Skip to content

Commit 7a52ccc

Browse files
committed
Allow SuppressModernizer on local types
This requires using the explicit type name instead of using var. Fixes #155.
1 parent 4db7975 commit 7a52ccc

File tree

5 files changed

+56
-5
lines changed

5 files changed

+56
-5
lines changed

modernizer-maven-annotations/src/main/java/org/gaul/modernizer_maven_annotations/SuppressModernizer.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
@Retention(RetentionPolicy.CLASS)
2525
@Target({
2626
ElementType.TYPE,
27+
ElementType.TYPE_USE,
2728
ElementType.METHOD,
2829
ElementType.CONSTRUCTOR,
2930
})

modernizer-maven-plugin/src/main/java/org/gaul/modernizer_maven_plugin/SuppressModernizerAnnotationDetector.java

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,10 @@
3030
import org.objectweb.asm.AnnotationVisitor;
3131
import org.objectweb.asm.ClassReader;
3232
import org.objectweb.asm.ClassVisitor;
33+
import org.objectweb.asm.Label;
34+
import org.objectweb.asm.MethodVisitor;
3335
import org.objectweb.asm.Type;
36+
import org.objectweb.asm.TypePath;
3437

3538
public final class SuppressModernizerAnnotationDetector {
3639
private final Set<String> annotatedClassNames =
@@ -130,5 +133,29 @@ public AnnotationVisitor visitAnnotation(String desc, boolean visible) {
130133
}
131134
return super.visitAnnotation(desc, visible);
132135
}
136+
137+
@Override
138+
public MethodVisitor visitMethod(int access, String name, String descriptor, String signature, String[] exceptions) {
139+
MethodVisitor methodvisitor = super.visitMethod(access, name, descriptor, signature, exceptions);
140+
return new SimpleMethodVisitor(ASM_API, methodvisitor, className);
141+
}
142+
}
143+
144+
private final class SimpleMethodVisitor extends MethodVisitor {
145+
private final String className;
146+
147+
SimpleMethodVisitor(int api, MethodVisitor methodVisitor, String className) {
148+
super(api, methodVisitor);
149+
this.className = className;
150+
}
151+
152+
@Override
153+
public AnnotationVisitor visitLocalVariableAnnotation(int typeRef, TypePath typePath, Label[] start, Label[] end, int[] index, String descriptor, boolean visible) {
154+
boolean isSuppressModernizer = Type.getType(descriptor).getClassName().equals(SuppressModernizer.class.getName());
155+
if (isSuppressModernizer) {
156+
annotatedClassNames.add(className);
157+
}
158+
return super.visitLocalVariableAnnotation(typeRef, typePath, start, end, index, descriptor, visible);
159+
}
133160
}
134161
}

modernizer-maven-plugin/src/test/java/org/gaul/modernizer_maven_plugin/SuppressModernizerAnnotationDetectorTest.java

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,10 @@
2222
import java.util.Set;
2323
import java.util.TreeSet;
2424

25-
import org.gaul.modernizer_maven_plugin
26-
.SuppressModernizerTestClasses.SuppressedOnClass;
27-
import org.gaul.modernizer_maven_plugin
28-
.SuppressModernizerTestClasses.SuppressedOnMembers;
25+
import org.gaul.modernizer_maven_plugin.SuppressModernizerTestClasses.SuppressedOnClass;
26+
import org.gaul.modernizer_maven_plugin.SuppressModernizerTestClasses.SuppressedOnLocal;
27+
import org.gaul.modernizer_maven_plugin.SuppressModernizerTestClasses.SuppressedOnLocalAnonymousInnerClass;
28+
import org.gaul.modernizer_maven_plugin.SuppressModernizerTestClasses.SuppressedOnMembers;
2929
import org.junit.Test;
3030

3131
public final class SuppressModernizerAnnotationDetectorTest {
@@ -35,13 +35,17 @@ public void itDetectsSuppressModernizerAnnotation() throws IOException {
3535
Set<String> actual = SuppressModernizerAnnotationDetector.detect(
3636
SuppressedOnClass.class,
3737
SuppressedOnClass.InnerClass.class,
38+
SuppressedOnLocal.class,
39+
SuppressedOnLocalAnonymousInnerClass.class,
3840
SuppressedOnMembers.class,
3941
SuppressedOnMembers.InnerClass.class
4042
);
4143

4244
assertThat(new TreeSet<String>(actual)).containsExactly(
4345
SuppressedOnClass.class.getName().replace('.', '/'),
4446
SuppressedOnClass.InnerClass.class.getName().replace('.', '/'),
47+
SuppressedOnLocal.class.getName().replace('.', '/'),
48+
SuppressedOnLocalAnonymousInnerClass.class.getName().replace('.', '/'),
4549
SuppressedOnMembers.InnerClass.class.getName().replace('.', '/')
4650
);
4751
}

modernizer-maven-plugin/src/test/java/org/gaul/modernizer_maven_plugin/SuppressModernizerTestClasses.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
package org.gaul.modernizer_maven_plugin;
1818

1919
import java.nio.charset.Charset;
20+
import java.util.Vector;
2021

2122
import com.google.common.base.Charsets;
2223

@@ -55,4 +56,23 @@ public Charset getCharset() {
5556
}
5657
}
5758
}
59+
60+
public static final class SuppressedOnLocal {
61+
public SuppressedOnLocal() {
62+
@SuppressModernizer
63+
Charset charset = Charsets.UTF_8;
64+
}
65+
}
66+
67+
public static final class SuppressedOnLocalAnonymousInnerClass {
68+
public SuppressedOnLocalAnonymousInnerClass() {
69+
@SuppressModernizer
70+
Vector vector = new Vector() {
71+
@Override
72+
public boolean isEmpty() {
73+
return false;
74+
}
75+
};
76+
}
77+
}
5878
}

modernizer-maven-policy/src/main/resources/checkstyle/checkstyle.xml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
<property name="severity" value="ignore"/>
1010
<metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/>
1111
</module>
12-
<module name="LineLength"/>
1312
<module name="NewlineAtEndOfFile">
1413
<property name="lineSeparator" value="lf" />
1514
</module>

0 commit comments

Comments
 (0)