diff --git a/java-checks-test-sources/default/src/main/java/checks/DefaultPackageCheckCompactSample.java b/java-checks-test-sources/default/src/main/java/checks/DefaultPackageCheckCompactSample.java new file mode 100644 index 0000000000..c9e8efe161 --- /dev/null +++ b/java-checks-test-sources/default/src/main/java/checks/DefaultPackageCheckCompactSample.java @@ -0,0 +1,7 @@ +void main() { + System.out.println("Hello from compact source!"); +} + +int value = 1; + +void helper() {} diff --git a/java-checks/src/main/java/org/sonar/java/checks/DefaultPackageCheck.java b/java-checks/src/main/java/org/sonar/java/checks/DefaultPackageCheck.java index 6d2e0c1f42..7deb08c906 100644 --- a/java-checks/src/main/java/org/sonar/java/checks/DefaultPackageCheck.java +++ b/java-checks/src/main/java/org/sonar/java/checks/DefaultPackageCheck.java @@ -20,6 +20,9 @@ import org.sonar.plugins.java.api.JavaFileScanner; import org.sonar.plugins.java.api.JavaFileScannerContext; import org.sonar.plugins.java.api.tree.CompilationUnitTree; +import org.sonar.plugins.java.api.tree.Tree; + +import java.util.List; @Rule(key = "S1220") public class DefaultPackageCheck implements JavaFileScanner { @@ -28,10 +31,14 @@ public class DefaultPackageCheck implements JavaFileScanner { public void scanFile(JavaFileScannerContext context) { if (context.fileParsed()) { CompilationUnitTree cut = context.getTree(); - if (cut.moduleDeclaration() == null && cut.packageDeclaration() == null) { + if (cut.moduleDeclaration() == null && cut.packageDeclaration() == null && !isCompactSource(cut)) { context.addIssueOnFile(this, "Move this file to a named package."); } } } + private static boolean isCompactSource(CompilationUnitTree cu) { + List types = cu.types(); + return types.size() == 1 && types.get(0).is(Tree.Kind.IMPLICIT_CLASS); + } } diff --git a/java-checks/src/test/java/org/sonar/java/checks/DefaultPackageCheckTest.java b/java-checks/src/test/java/org/sonar/java/checks/DefaultPackageCheckTest.java index 74ef1e783e..7160759c36 100644 --- a/java-checks/src/test/java/org/sonar/java/checks/DefaultPackageCheckTest.java +++ b/java-checks/src/test/java/org/sonar/java/checks/DefaultPackageCheckTest.java @@ -47,4 +47,11 @@ void with_module() { .verifyNoIssues(); } + @Test + void compact_source() { + CheckVerifier.newVerifier() + .onFile(mainCodeSourcesPath("checks/DefaultPackageCheckCompactSample.java")) + .withCheck(new DefaultPackageCheck()) + .verifyNoIssues(); + } }