Skip to content

Commit bd1d592

Browse files
Add rule for joda-time usage (#10)
* Add rule for joda-time usage * Update dependency lock * Update libraries to use java 8 --------- Co-authored-by: Emily Yuan <eyuan@netflix.com>
1 parent d796a2b commit bd1d592

File tree

10 files changed

+135
-7
lines changed

10 files changed

+135
-7
lines changed

archrules-deprecation/gradle.lockfile

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33
# This file is expected to be part of source control.
44
ch.qos.logback:logback-classic:1.5.20=archRulesTestCompileClasspath,archRulesTestRuntimeClasspath
55
ch.qos.logback:logback-core:1.5.20=archRulesTestCompileClasspath,archRulesTestRuntimeClasspath
6-
com.netflix.nebula:nebula-archrules-core:0.1.0=archRulesCompileClasspath,archRulesTestCompileClasspath,archRulesTestRuntimeClasspath
7-
com.tngtech.archunit:archunit:1.4.1=archRulesCompileClasspath,archRulesTestCompileClasspath,archRulesTestRuntimeClasspath
6+
com.netflix.nebula:nebula-archrules-core:0.1.1=archRulesCompileClasspath,archRulesRuntimeClasspath,archRulesTestCompileClasspath,archRulesTestRuntimeClasspath
7+
com.tngtech.archunit:archunit:1.4.1=archRulesCompileClasspath,archRulesRuntimeClasspath,archRulesTestCompileClasspath,archRulesTestRuntimeClasspath
88
net.bytebuddy:byte-buddy:1.17.7=archRulesTestCompileClasspath,archRulesTestRuntimeClasspath
99
org.apiguardian:apiguardian-api:1.1.2=archRulesTestCompileClasspath
1010
org.assertj:assertj-core:3.27.6=archRulesTestCompileClasspath,archRulesTestRuntimeClasspath
@@ -17,5 +17,5 @@ org.junit.platform:junit-platform-engine:1.12.2=archRulesTestRuntimeClasspath
1717
org.junit.platform:junit-platform-launcher:1.12.2=archRulesTestRuntimeClasspath
1818
org.junit:junit-bom:5.12.2=archRulesTestCompileClasspath,archRulesTestRuntimeClasspath
1919
org.opentest4j:opentest4j:1.3.0=archRulesTestCompileClasspath,archRulesTestRuntimeClasspath
20-
org.slf4j:slf4j-api:2.0.17=archRulesCompileClasspath,archRulesTestCompileClasspath,archRulesTestRuntimeClasspath
21-
empty=annotationProcessor,archRulesAnnotationProcessor,archRulesTestAnnotationProcessor,compileClasspath,testAnnotationProcessor,testCompileClasspath,testRuntimeClasspath
20+
org.slf4j:slf4j-api:2.0.17=archRulesCompileClasspath,archRulesRuntimeClasspath,archRulesTestCompileClasspath,archRulesTestRuntimeClasspath
21+
empty=annotationProcessor,archRulesAnnotationProcessor,archRulesTestAnnotationProcessor,compileClasspath,runtimeClasspath,testAnnotationProcessor,testCompileClasspath,testRuntimeClasspath

archrules-joda/build.gradle.kts

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
plugins {
2+
id("com.netflix.nebula.library")
3+
id("com.netflix.nebula.archrules.library")
4+
}
5+
description = "Arch Rules for detecting usage of Joda"
6+
repositories {
7+
mavenCentral()
8+
}
9+
dependencies {
10+
archRulesTestImplementation(libs.assertj)
11+
archRulesTestImplementation(libs.logback)
12+
13+
archRulesTestImplementation("joda-time:joda-time:2.14.0")
14+
}
15+
java {
16+
toolchain {
17+
languageVersion = JavaLanguageVersion.of(8)
18+
}
19+
}
20+
dependencyLocking {
21+
lockAllConfigurations()
22+
}

archrules-joda/gradle.lockfile

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
# This is a Gradle generated file for dependency locking.
2+
# Manual edits can break the build and are not advised.
3+
# This file is expected to be part of source control.
4+
ch.qos.logback:logback-classic:1.5.20=archRulesTestCompileClasspath,archRulesTestRuntimeClasspath
5+
ch.qos.logback:logback-core:1.5.20=archRulesTestCompileClasspath,archRulesTestRuntimeClasspath
6+
com.netflix.nebula:nebula-archrules-core:0.1.1=archRulesCompileClasspath,archRulesRuntimeClasspath,archRulesTestCompileClasspath,archRulesTestRuntimeClasspath
7+
com.tngtech.archunit:archunit:1.4.1=archRulesCompileClasspath,archRulesRuntimeClasspath,archRulesTestCompileClasspath,archRulesTestRuntimeClasspath
8+
joda-time:joda-time:2.14.0=archRulesTestCompileClasspath,archRulesTestRuntimeClasspath
9+
net.bytebuddy:byte-buddy:1.17.7=archRulesTestCompileClasspath,archRulesTestRuntimeClasspath
10+
org.apiguardian:apiguardian-api:1.1.2=archRulesTestCompileClasspath
11+
org.assertj:assertj-core:3.27.6=archRulesTestCompileClasspath,archRulesTestRuntimeClasspath
12+
org.junit.jupiter:junit-jupiter-api:5.12.2=archRulesTestCompileClasspath,archRulesTestRuntimeClasspath
13+
org.junit.jupiter:junit-jupiter-engine:5.12.2=archRulesTestRuntimeClasspath
14+
org.junit.jupiter:junit-jupiter-params:5.12.2=archRulesTestCompileClasspath,archRulesTestRuntimeClasspath
15+
org.junit.jupiter:junit-jupiter:5.12.2=archRulesTestCompileClasspath,archRulesTestRuntimeClasspath
16+
org.junit.platform:junit-platform-commons:1.12.2=archRulesTestCompileClasspath,archRulesTestRuntimeClasspath
17+
org.junit.platform:junit-platform-engine:1.12.2=archRulesTestRuntimeClasspath
18+
org.junit.platform:junit-platform-launcher:1.12.2=archRulesTestRuntimeClasspath
19+
org.junit:junit-bom:5.12.2=archRulesTestCompileClasspath,archRulesTestRuntimeClasspath
20+
org.opentest4j:opentest4j:1.3.0=archRulesTestCompileClasspath,archRulesTestRuntimeClasspath
21+
org.slf4j:slf4j-api:2.0.17=archRulesCompileClasspath,archRulesRuntimeClasspath,archRulesTestCompileClasspath,archRulesTestRuntimeClasspath
22+
empty=annotationProcessor,archRulesAnnotationProcessor,archRulesTestAnnotationProcessor,compileClasspath,runtimeClasspath,testAnnotationProcessor,testCompileClasspath,testRuntimeClasspath
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package com.netflix.nebula.archrules.joda;
2+
3+
import com.netflix.nebula.archrules.core.ArchRulesService;
4+
import com.tngtech.archunit.lang.ArchRule;
5+
import com.tngtech.archunit.lang.Priority;
6+
import com.tngtech.archunit.lang.syntax.ArchRuleDefinition;
7+
import static com.tngtech.archunit.core.domain.JavaClass.Predicates.resideInAPackage;
8+
9+
import java.util.Collections;
10+
import java.util.Map;
11+
12+
public class JodaRule implements ArchRulesService {
13+
/**
14+
* This rule is a stop-gap to find all usages of Joda.
15+
*/
16+
public static ArchRule jodaRule = ArchRuleDefinition.priority(Priority.MEDIUM)
17+
.noClasses()
18+
.should().dependOnClassesThat(resideInAPackage("org.joda.time.."))
19+
.allowEmptyShould(true)
20+
.as("No code should use Joda time library")
21+
.because("usage of Joda is deprecated. Please migrate to java.time.");
22+
23+
@Override
24+
public Map<String, ArchRule> getRules() {
25+
return Collections.singletonMap("jodaRule", jodaRule);
26+
}
27+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
com.netflix.nebula.archrules.joda.JodaRule
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
package com.netflix.nebula.archrules.joda;
2+
3+
import com.netflix.nebula.archrules.core.Runner;
4+
import com.tngtech.archunit.lang.EvaluationResult;
5+
import org.junit.jupiter.api.Test;
6+
import org.slf4j.Logger;
7+
import org.slf4j.LoggerFactory;
8+
9+
import static org.assertj.core.api.Assertions.assertThat;
10+
11+
public class JodaRuleTest {
12+
private static final Logger LOG = LoggerFactory.getLogger(JodaRuleTest.class);
13+
14+
@Test
15+
public void test_joda_variable_usage() {
16+
final EvaluationResult result = Runner.check(JodaRule.jodaRule, JodaUsageVariable.class);
17+
LOG.info(result.getFailureReport().toString());
18+
assertThat(result.hasViolation()).isTrue();
19+
}
20+
21+
@Test
22+
public void test_joda_parameter_usage() {
23+
final EvaluationResult result = Runner.check(JodaRule.jodaRule, JodaUsageParameter.class);
24+
LOG.info(result.getFailureReport().toString());
25+
assertThat(result.hasViolation()).isTrue();
26+
}
27+
28+
@Test
29+
public void test_java_time_usage() {
30+
final EvaluationResult result = Runner.check(JodaRule.jodaRule, JavaTimeUsage.class);
31+
LOG.info(result.getFailureReport().toString());
32+
assertThat(result.hasViolation()).isFalse();
33+
}
34+
35+
public static class JodaUsageVariable {
36+
private org.joda.time.DateTime dateTime;
37+
38+
public void useJodaTime() {
39+
dateTime = org.joda.time.DateTime.now();
40+
}
41+
}
42+
43+
public static class JodaUsageParameter {
44+
public void useJodaTime(org.joda.time.DateTime dateTime) { }
45+
}
46+
47+
public static class JavaTimeUsage {
48+
private java.time.LocalDateTime dateTime;
49+
50+
public void useJavaTime() {
51+
dateTime = java.time.LocalDateTime.now();
52+
}
53+
}
54+
}

archrules-testing-frameworks/build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ dependencies {
1414
}
1515
java {
1616
toolchain {
17-
languageVersion = JavaLanguageVersion.of(11)
17+
languageVersion = JavaLanguageVersion.of(8)
1818
}
1919
}
2020
dependencyLocking {

archrules-testing-frameworks/gradle.lockfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
# This file is expected to be part of source control.
44
ch.qos.logback:logback-classic:1.5.20=archRulesTestCompileClasspath,archRulesTestRuntimeClasspath
55
ch.qos.logback:logback-core:1.5.20=archRulesTestCompileClasspath,archRulesTestRuntimeClasspath
6-
com.netflix.nebula:nebula-archrules-core:0.1.0=archRulesCompileClasspath,archRulesRuntimeClasspath,archRulesTestCompileClasspath,archRulesTestRuntimeClasspath
6+
com.netflix.nebula:nebula-archrules-core:0.1.1=archRulesCompileClasspath,archRulesRuntimeClasspath,archRulesTestCompileClasspath,archRulesTestRuntimeClasspath
77
com.tngtech.archunit:archunit:1.4.1=archRulesCompileClasspath,archRulesRuntimeClasspath,archRulesTestCompileClasspath,archRulesTestRuntimeClasspath
88
junit:junit:4.12=archRulesTestCompileClasspath,archRulesTestRuntimeClasspath
99
net.bytebuddy:byte-buddy:1.17.7=archRulesTestCompileClasspath,archRulesTestRuntimeClasspath

archrules-testing-frameworks/src/archRules/java/com/netflix/nebula/archrules/testingframeworks/JUnit4Rule.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import static com.tngtech.archunit.core.domain.JavaClass.Predicates.resideInAPackage;
88
import static com.tngtech.archunit.core.domain.JavaClass.Predicates.resideOutsideOfPackage;
99

10+
import java.util.Collections;
1011
import java.util.Map;
1112

1213
public class JUnit4Rule implements ArchRulesService {
@@ -23,6 +24,6 @@ public class JUnit4Rule implements ArchRulesService {
2324

2425
@Override
2526
public Map<String, ArchRule> getRules() {
26-
return Map.of("junit4Rule", junit4Rule);
27+
return Collections.singletonMap("junit4Rule", junit4Rule);
2728
}
2829
}

settings.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,3 +22,4 @@ rootProject.name = "nebula-archrules"
2222

2323
include(":archrules-deprecation")
2424
include(":archrules-testing-frameworks")
25+
include(":archrules-joda")

0 commit comments

Comments
 (0)