Skip to content

Commit bf9a0b3

Browse files
SONARJAVA-5241 Support .withoutSemantic() mode in FilterVerifier (#4958)
Co-authored-by: Dorian Burihabwa <dorian.burihabwa@sonarsource.com>
1 parent 2d6bb09 commit bf9a0b3

9 files changed

Lines changed: 71 additions & 13 deletions
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import lombok.experimental.UtilityClass;
2+
3+
// FP happening without semantics.
4+
@UtilityClass
5+
public class Utility { // WithIssue
6+
public static int triple(int in) {
7+
return in * 3;
8+
}
9+
}

java-checks/src/test/java/org/sonar/java/filters/EclipseI18NFilterTest.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@ class EclipseI18NFilterTest {
2222

2323
@Test
2424
void test() {
25-
FilterVerifier.verify("src/test/files/filters/EclipseI18NFilter.java", new EclipseI18NFilter());
25+
FilterVerifier.newInstance()
26+
.verify("src/test/files/filters/EclipseI18NFilter.java", new EclipseI18NFilter());
2627
}
2728

2829
}

java-checks/src/test/java/org/sonar/java/filters/FilterVerifier.java

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
import org.sonar.java.SonarComponents;
4141
import org.sonar.java.ast.JavaAstScanner;
4242
import org.sonar.java.ast.visitors.SubscriptionVisitor;
43+
import org.sonar.java.checks.verifier.CheckVerifier;
4344
import org.sonar.java.checks.verifier.FilesUtils;
4445
import org.sonar.java.checks.verifier.TestUtils;
4546
import org.sonar.java.model.JavaVersionImpl;
@@ -58,7 +59,16 @@
5859

5960
public class FilterVerifier {
6061

61-
public static void verify(String filename, JavaIssueFilter filter, JavaCheck... extraJavaChecks) {
62+
private FilterVerifier() {
63+
}
64+
65+
public static FilterVerifier newInstance() {
66+
return new FilterVerifier();
67+
}
68+
69+
private boolean withoutSemantic = false;
70+
71+
public void verify(String filename, JavaIssueFilter filter, JavaCheck... extraJavaChecks) {
6272
IssueCollector issueCollector = new IssueCollector();
6373
List<JavaCheck> visitors = new ArrayList<>();
6474
visitors.add(filter);
@@ -74,7 +84,12 @@ public static void verify(String filename, JavaIssueFilter filter, JavaCheck...
7484
projectClasspath.add(new File("target/test-classes"));
7585

7686
InputFile inputFile = TestUtils.inputFile(filename);
77-
VisitorsBridgeForTests visitorsBridge = new VisitorsBridgeForTests(visitors, projectClasspath, sonarComponents(inputFile), new JavaVersionImpl());
87+
VisitorsBridgeForTests visitorsBridge;
88+
if (this.withoutSemantic) {
89+
visitorsBridge = new VisitorsBridgeForTests(visitors, sonarComponents(inputFile), new JavaVersionImpl());
90+
} else {
91+
visitorsBridge = new VisitorsBridgeForTests(visitors, projectClasspath, sonarComponents(inputFile), new JavaVersionImpl());
92+
}
7893
JavaAstScanner.scanSingleFileForTests(inputFile, visitorsBridge);
7994
JavaFileScannerContextForTests testJavaFileScannerContext = visitorsBridge.lastCreatedTestContext();
8095

@@ -114,6 +129,15 @@ public static void verify(String filename, JavaIssueFilter filter, JavaCheck...
114129
}
115130
}
116131

132+
/**
133+
* Tells the verifier that no bytecode will be provided.
134+
* See {@link CheckVerifier#withoutSemantic()} for more.
135+
*/
136+
public FilterVerifier withoutSemantic() {
137+
this.withoutSemantic = true;
138+
return this;
139+
}
140+
117141
private static Set<JavaCheck> instantiateRules(Set<Class<? extends JavaCheck>> filteredRules) {
118142
Set<JavaCheck> rules = new HashSet<>();
119143
for (Class<? extends JavaCheck> rule : filteredRules) {

java-checks/src/test/java/org/sonar/java/filters/FilterVerifierTest.java

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,20 @@ class FilterVerifierTest {
2929
void filterVerifierShouldFailInCaseOfInvalidFile() {
3030
String parseErrorFile = "src/test/files/filters/FilterParseError.java";
3131
JavaIssueFilter testIssueFilter = new TestIssueFilter();
32-
assertThrows(AssertionError.class, () -> FilterVerifier.verify(parseErrorFile, testIssueFilter));
32+
FilterVerifier filterVerifier = FilterVerifier.newInstance();
33+
assertThrows(
34+
AssertionError.class,
35+
() -> filterVerifier.verify(parseErrorFile, testIssueFilter));
36+
}
37+
38+
@Test
39+
void filterVerifierShouldFailInCaseOfInvalidFileWithoutSemantic() {
40+
String parseErrorFile = "src/test/files/filters/FilterParseError.java";
41+
JavaIssueFilter testIssueFilter = new TestIssueFilter();
42+
FilterVerifier filterWithoutSemantic = FilterVerifier.newInstance().withoutSemantic();
43+
assertThrows(
44+
AssertionError.class,
45+
() -> filterWithoutSemantic.verify(parseErrorFile, testIssueFilter));
3346
}
3447

3548
/**

java-checks/src/test/java/org/sonar/java/filters/GeneratedCodeFilterTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ class GeneratedCodeFilterTest {
2828
void test() {
2929
CommentRegularExpressionCheck commentRegularExpressionCheck = new CommentRegularExpressionCheck();
3030
commentRegularExpressionCheck.regularExpression = ".*alpha.*";
31-
FilterVerifier.verify("src/test/files/filters/GeneratedCodeFilter.java", new GeneratedCodeFilter(),
31+
FilterVerifier.newInstance().verify("src/test/files/filters/GeneratedCodeFilter.java", new GeneratedCodeFilter(),
3232
// activated rules
3333
commentRegularExpressionCheck,
3434
new BadClassNameCheck(),

java-checks/src/test/java/org/sonar/java/filters/GoogleAutoFilterTest.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@ class GoogleAutoFilterTest {
2222

2323
@Test
2424
void test() {
25-
FilterVerifier.verify("src/test/files/filters/GoogleAutoFilter.java", new GoogleAutoFilter());
25+
FilterVerifier.newInstance()
26+
.verify("src/test/files/filters/GoogleAutoFilter.java", new GoogleAutoFilter());
2627
}
2728

2829
}

java-checks/src/test/java/org/sonar/java/filters/LombokFilterTest.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,14 @@ class LombokFilterTest {
2222

2323
@Test
2424
void test() {
25-
FilterVerifier.verify("src/test/files/filters/LombokFilter.java", new LombokFilter());
25+
FilterVerifier.newInstance()
26+
.verify("src/test/files/filters/LombokFilter.java", new LombokFilter());
27+
}
28+
29+
@Test
30+
void testWithoutSemantic() {
31+
FilterVerifier.newInstance()
32+
.withoutSemantic()
33+
.verify("src/test/files/filters/LombokFilterWithoutSemantic.java", new LombokFilter());
2634
}
2735
}

java-checks/src/test/java/org/sonar/java/filters/SpringFilterTest.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,13 @@
2424
class SpringFilterTest {
2525
@Test
2626
void test() {
27-
FilterVerifier.verify(mainCodeSourcesPath("filters/SpringFilter.java"), new SpringFilter());
27+
FilterVerifier.newInstance()
28+
.verify(mainCodeSourcesPath("filters/SpringFilter.java"), new SpringFilter());
2829
}
2930

3031
@Test
3132
void test_without_semantic() {
32-
FilterVerifier.verify(nonCompilingTestSourcesPath("filters/SpringFilter.java"), new SpringFilter());
33+
FilterVerifier.newInstance()
34+
.verify(nonCompilingTestSourcesPath("filters/SpringFilter.java"), new SpringFilter());
3335
}
3436
}

java-checks/src/test/java/org/sonar/java/filters/SuppressWarningFilterTest.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ class SuppressWarningFilterTest {
5656
public static final String CONSTANT_RULE_KEY = "java:S115";
5757
@Test
5858
void verify() {
59-
FilterVerifier.verify("src/test/files/filters/SuppressWarningFilter.java", new SuppressWarningFilter(),
59+
FilterVerifier.newInstance().verify("src/test/files/filters/SuppressWarningFilter.java", new SuppressWarningFilter(),
6060
// activated rules
6161
new UnusedPrivateFieldCheck(),
6262
new BadConstantNameCheck(),
@@ -80,7 +80,7 @@ void verify() {
8080

8181
@Test
8282
void verify_2() {
83-
FilterVerifier.verify("src/test/files/filters/SuppressWarningFilter_2.java", new SuppressWarningFilter(),
83+
FilterVerifier.newInstance().verify("src/test/files/filters/SuppressWarningFilter_2.java", new SuppressWarningFilter(),
8484
// activated rules
8585
new BoxedBooleanExpressionsCheck(),
8686
new ImmediateReverseBoxingCheck(),
@@ -95,7 +95,7 @@ void verify_2() {
9595

9696
@Test
9797
void verify_unused() {
98-
FilterVerifier.verify("src/test/files/filters/SuppressWarningFilter_unused.java", new SuppressWarningFilter(),
98+
FilterVerifier.newInstance().verify("src/test/files/filters/SuppressWarningFilter_unused.java", new SuppressWarningFilter(),
9999
// activated rules
100100
new UnusedLocalVariableCheck(),
101101
new UnusedLabelCheck(),
@@ -109,7 +109,7 @@ void verify_unused() {
109109

110110
@Test
111111
void verify_javadoc() {
112-
FilterVerifier.verify("src/test/files/filters/SuppressWarningFilter_javadoc.java", new SuppressWarningFilter(),
112+
FilterVerifier.newInstance().verify("src/test/files/filters/SuppressWarningFilter_javadoc.java", new SuppressWarningFilter(),
113113
// activated rules
114114
new UndocumentedApiCheck()
115115
);

0 commit comments

Comments
 (0)