diff --git a/build.gradle b/build.gradle index 1eb3c86852..44d069b11f 100644 --- a/build.gradle +++ b/build.gradle @@ -176,7 +176,7 @@ shadowJar { bnd(''' -exportcontents: graphql.* -removeheaders: Private-Package -Import-Package: !android.os.*,!com.google.*,!org.checkerframework.*,!javax.annotation.*,!graphql.com.google.*,!org.antlr.*,!graphql.org.antlr.*,!sun.misc.*,org.jspecify.annotations;resolution:=optional,* +Import-Package: !android.os.*,!com.google.*,!org.checkerframework.*,!graphql.com.google.*,!org.antlr.*,!graphql.org.antlr.*,!sun.misc.*,org.jspecify.annotations;resolution:=optional,* ''') } diff --git a/src/test/groovy/graphql/NullabilityAnnotationUsageTest.groovy b/src/test/groovy/graphql/NullabilityAnnotationUsageTest.groovy new file mode 100644 index 0000000000..10b6b5458f --- /dev/null +++ b/src/test/groovy/graphql/NullabilityAnnotationUsageTest.groovy @@ -0,0 +1,40 @@ +package graphql + +import com.tngtech.archunit.core.domain.JavaClasses +import com.tngtech.archunit.core.importer.ClassFileImporter +import com.tngtech.archunit.core.importer.ImportOption +import com.tngtech.archunit.lang.ArchRule +import com.tngtech.archunit.lang.EvaluationResult +import com.tngtech.archunit.lang.syntax.ArchRuleDefinition +import spock.lang.Specification + +class NullabilityAnnotationUsageTest extends Specification { + + private static final JavaClasses importedClasses = new ClassFileImporter() + .withImportOption(ImportOption.Predefined.DO_NOT_INCLUDE_TESTS) + .importPackages("graphql") + + def "should only use JSpecify nullability annotations"() { + given: + ArchRule dependencyRule = ArchRuleDefinition.noClasses() + .should() + .dependOnClassesThat() + .resideInAnyPackage( + "javax.annotation", + "org.jetbrains.annotations" + ) + .because("We are using JSpecify nullability annotations only. Please change to use JSpecify.") + + when: + EvaluationResult result = dependencyRule.evaluate(importedClasses) + + then: + if (result.hasViolation()) { + println "We are using JSpecify nullability annotations only. Please change the following to use JSpecify instead:" + result.getFailureReport().getDetails().each { violation -> + println "- ${violation}" + } + } + !result.hasViolation() + } +} \ No newline at end of file