Skip to content

Commit 2c64803

Browse files
sulliswakingrufus
authored andcommitted
add nullability rule for springframework
1 parent c68df57 commit 2c64803

File tree

8 files changed

+40
-4
lines changed

8 files changed

+40
-4
lines changed

archrules-deprecation/gradle.lockfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ com.netflix.nebula:archrules-joda:0.1.3=archRules
77
com.netflix.nebula:archrules-nullability:0.1.3=archRules
88
com.netflix.nebula:archrules-testing-frameworks:0.1.3=archRules
99
com.netflix.nebula:nebula-archrules-core:0.1.5=archRules
10-
com.netflix.nebula:nebula-archrules-core:0.2.2=archRulesCompileClasspath,archRulesRuntimeClasspath,archRulesTestCompileClasspath,archRulesTestRuntimeClasspath
10+
com.netflix.nebula:nebula-archrules-core:0.2.3=archRulesCompileClasspath,archRulesRuntimeClasspath,archRulesTestCompileClasspath,archRulesTestRuntimeClasspath
1111
com.tngtech.archunit:archunit:1.4.1=archRules,archRulesCompileClasspath,archRulesRuntimeClasspath,archRulesTestCompileClasspath,archRulesTestRuntimeClasspath
1212
net.bytebuddy:byte-buddy:1.17.7=archRulesTestCompileClasspath,archRulesTestRuntimeClasspath
1313
org.apiguardian:apiguardian-api:1.1.2=archRulesTestCompileClasspath

archrules-joda/gradle.lockfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ com.netflix.nebula:archrules-deprecation:0.1.3=archRules
77
com.netflix.nebula:archrules-nullability:0.1.3=archRules
88
com.netflix.nebula:archrules-testing-frameworks:0.1.3=archRules
99
com.netflix.nebula:nebula-archrules-core:0.1.5=archRules
10-
com.netflix.nebula:nebula-archrules-core:0.2.2=archRulesCompileClasspath,archRulesRuntimeClasspath,archRulesTestCompileClasspath,archRulesTestRuntimeClasspath
10+
com.netflix.nebula:nebula-archrules-core:0.2.3=archRulesCompileClasspath,archRulesRuntimeClasspath,archRulesTestCompileClasspath,archRulesTestRuntimeClasspath
1111
com.tngtech.archunit:archunit:1.4.1=archRules,archRulesCompileClasspath,archRulesRuntimeClasspath,archRulesTestCompileClasspath,archRulesTestRuntimeClasspath
1212
joda-time:joda-time:2.14.0=archRulesTestCompileClasspath,archRulesTestRuntimeClasspath
1313
net.bytebuddy:byte-buddy:1.17.7=archRulesTestCompileClasspath,archRulesTestRuntimeClasspath

archrules-nullability/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ dependencies {
1515
archRulesTestImplementation("com.google.code.findbugs:jsr305:3.0.2")
1616
archRulesTestImplementation("jakarta.annotation:jakarta.annotation-api:3.0.0")
1717
archRulesTestImplementation("org.jetbrains:annotations:26.0.2-1")
18+
archRulesTestImplementation("org.springframework:spring-core:5.3.39")
1819
}
1920
java {
2021
toolchain {

archrules-nullability/gradle.lockfile

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ com.netflix.nebula:archrules-deprecation:0.1.3=archRules
88
com.netflix.nebula:archrules-joda:0.1.3=archRules
99
com.netflix.nebula:archrules-testing-frameworks:0.1.3=archRules
1010
com.netflix.nebula:nebula-archrules-core:0.1.5=archRules
11-
com.netflix.nebula:nebula-archrules-core:0.2.2=archRulesCompileClasspath,archRulesRuntimeClasspath,archRulesTestCompileClasspath,archRulesTestRuntimeClasspath
11+
com.netflix.nebula:nebula-archrules-core:0.2.3=archRulesCompileClasspath,archRulesRuntimeClasspath,archRulesTestCompileClasspath,archRulesTestRuntimeClasspath
1212
com.tngtech.archunit:archunit:1.4.1=archRules,archRulesCompileClasspath,archRulesRuntimeClasspath,archRulesTestCompileClasspath,archRulesTestRuntimeClasspath
1313
jakarta.annotation:jakarta.annotation-api:3.0.0=archRulesTestCompileClasspath,archRulesTestRuntimeClasspath
1414
net.bytebuddy:byte-buddy:1.17.7=archRulesTestCompileClasspath,archRulesTestRuntimeClasspath
@@ -26,4 +26,6 @@ org.junit.platform:junit-platform-launcher:1.12.2=archRulesTestRuntimeClasspath
2626
org.junit:junit-bom:5.12.2=archRulesTestCompileClasspath,archRulesTestRuntimeClasspath
2727
org.opentest4j:opentest4j:1.3.0=archRulesTestCompileClasspath,archRulesTestRuntimeClasspath
2828
org.slf4j:slf4j-api:2.0.17=archRules,archRulesCompileClasspath,archRulesRuntimeClasspath,archRulesTestCompileClasspath,archRulesTestRuntimeClasspath
29+
org.springframework:spring-core:5.3.39=archRulesTestCompileClasspath,archRulesTestRuntimeClasspath
30+
org.springframework:spring-jcl:5.3.39=archRulesTestCompileClasspath,archRulesTestRuntimeClasspath
2931
empty=annotationProcessor,archRulesAnnotationProcessor,archRulesTestAnnotationProcessor,compileClasspath,runtimeClasspath,testAnnotationProcessor,testCompileClasspath,testRuntimeClasspath

archrules-nullability/src/archRules/java/com/netflix/nebula/archrules/nullability/NebulaNullabilityArchRules.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,14 @@ public class NebulaNullabilityArchRules implements ArchRulesService {
3131
.orShould().dependOnClassesThat(fullyQualifiedName("org.jetbrains.annotations.NotNull"))
3232
.allowEmptyShould(true)
3333
.because("Only JSpecify annotations should be used on @NullMarked classes");
34+
static final ArchRule UPGRADE_LEGACY_SPRING_FRAMEWORK = ArchRuleDefinition.priority(Priority.MEDIUM)
35+
.noClasses()
36+
.that().areAnnotatedWith("org.jspecify.annotations.NullMarked")
37+
.should()
38+
.dependOnClassesThat(fullyQualifiedName("org.springframework.lang.Nullable"))
39+
.orShould().dependOnClassesThat(fullyQualifiedName("org.springframework.lang.NonNull"))
40+
.allowEmptyShould(true)
41+
.because("Only JSpecify annotations should be used on @NullMarked classes");
3442
static final ArchRule UPGRADE_LEGACY_JAVAX = ArchRuleDefinition.priority(Priority.MEDIUM)
3543
.noClasses()
3644
.that().areAnnotatedWith("org.jspecify.annotations.NullMarked")
@@ -53,6 +61,7 @@ public Map<String, ArchRule> getRules() {
5361
Map<String, ArchRule> rules = new HashMap<>();
5462
rules.put("public classes should be @NullMarked", PUBLIC_CLASSES_SHOULD_BE_NULL_MARKED);
5563
rules.put("upgrade legacy jetbrains annotations", UPGRADE_LEGACY_JETBRAINS);
64+
rules.put("upgrade legacy spring annotations", UPGRADE_LEGACY_SPRING_FRAMEWORK);
5665
rules.put("upgrade legacy javax annotations", UPGRADE_LEGACY_JAVAX);
5766
rules.put("upgrade legacy jakarta annotations", UPGRADE_LEGACY_JAKARTA);
5867
return rules;

archrules-nullability/src/archRulesTest/java/com/netflix/nebula/archrules/nullability/NebulaNullabilityArchRulesTest.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,17 @@ public void test_jetbrains() {
7878
.hasSize(2);
7979
}
8080

81+
@Test
82+
public void test_spring_framework() {
83+
EvaluationResult result = Runner.check(
84+
NebulaNullabilityArchRules.UPGRADE_LEGACY_SPRING_FRAMEWORK,
85+
SpringFrameworkFailingClass.class);
86+
assertThat(result.hasViolation())
87+
.isTrue();
88+
assertThat(result.getFailureReport().getDetails())
89+
.hasSize(2);
90+
}
91+
8192
static class InnerClass {
8293
}
8394
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package com.netflix.nebula.archrules.nullability;
2+
3+
import org.jspecify.annotations.NullMarked;
4+
5+
6+
@NullMarked
7+
public class SpringFrameworkFailingClass {
8+
@org.springframework.lang.Nullable
9+
String nullable;
10+
11+
@org.springframework.lang.NonNull
12+
String nonNullable = "";
13+
}

archrules-testing-frameworks/gradle.lockfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ com.netflix.nebula:archrules-deprecation:0.1.3=archRules
77
com.netflix.nebula:archrules-joda:0.1.3=archRules
88
com.netflix.nebula:archrules-nullability:0.1.3=archRules
99
com.netflix.nebula:nebula-archrules-core:0.1.5=archRules
10-
com.netflix.nebula:nebula-archrules-core:0.2.2=archRulesCompileClasspath,archRulesRuntimeClasspath,archRulesTestCompileClasspath,archRulesTestRuntimeClasspath
10+
com.netflix.nebula:nebula-archrules-core:0.2.3=archRulesCompileClasspath,archRulesRuntimeClasspath,archRulesTestCompileClasspath,archRulesTestRuntimeClasspath
1111
com.tngtech.archunit:archunit:1.4.1=archRules,archRulesCompileClasspath,archRulesRuntimeClasspath,archRulesTestCompileClasspath,archRulesTestRuntimeClasspath
1212
junit:junit:4.12=archRulesTestCompileClasspath,archRulesTestRuntimeClasspath
1313
net.bytebuddy:byte-buddy:1.17.7=archRulesTestCompileClasspath,archRulesTestRuntimeClasspath

0 commit comments

Comments
 (0)