Skip to content

Commit

Permalink
Allow SuppressModernizer on local types
Browse files Browse the repository at this point in the history
This requires using the explicit type name instead of using var.
Fixes #155.
  • Loading branch information
gaul committed Jan 14, 2025
1 parent 4db7975 commit 7a52ccc
Show file tree
Hide file tree
Showing 5 changed files with 56 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
@Retention(RetentionPolicy.CLASS)
@Target({
ElementType.TYPE,
ElementType.TYPE_USE,
ElementType.METHOD,
ElementType.CONSTRUCTOR,
})
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,10 @@
import org.objectweb.asm.AnnotationVisitor;
import org.objectweb.asm.ClassReader;
import org.objectweb.asm.ClassVisitor;
import org.objectweb.asm.Label;
import org.objectweb.asm.MethodVisitor;
import org.objectweb.asm.Type;
import org.objectweb.asm.TypePath;

public final class SuppressModernizerAnnotationDetector {
private final Set<String> annotatedClassNames =
Expand Down Expand Up @@ -130,5 +133,29 @@ public AnnotationVisitor visitAnnotation(String desc, boolean visible) {
}
return super.visitAnnotation(desc, visible);
}

@Override
public MethodVisitor visitMethod(int access, String name, String descriptor, String signature, String[] exceptions) {
MethodVisitor methodvisitor = super.visitMethod(access, name, descriptor, signature, exceptions);
return new SimpleMethodVisitor(ASM_API, methodvisitor, className);
}
}

private final class SimpleMethodVisitor extends MethodVisitor {
private final String className;

SimpleMethodVisitor(int api, MethodVisitor methodVisitor, String className) {
super(api, methodVisitor);
this.className = className;
}

@Override
public AnnotationVisitor visitLocalVariableAnnotation(int typeRef, TypePath typePath, Label[] start, Label[] end, int[] index, String descriptor, boolean visible) {
boolean isSuppressModernizer = Type.getType(descriptor).getClassName().equals(SuppressModernizer.class.getName());
if (isSuppressModernizer) {
annotatedClassNames.add(className);
}
return super.visitLocalVariableAnnotation(typeRef, typePath, start, end, index, descriptor, visible);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,10 @@
import java.util.Set;
import java.util.TreeSet;

import org.gaul.modernizer_maven_plugin
.SuppressModernizerTestClasses.SuppressedOnClass;
import org.gaul.modernizer_maven_plugin
.SuppressModernizerTestClasses.SuppressedOnMembers;
import org.gaul.modernizer_maven_plugin.SuppressModernizerTestClasses.SuppressedOnClass;
import org.gaul.modernizer_maven_plugin.SuppressModernizerTestClasses.SuppressedOnLocal;
import org.gaul.modernizer_maven_plugin.SuppressModernizerTestClasses.SuppressedOnLocalAnonymousInnerClass;
import org.gaul.modernizer_maven_plugin.SuppressModernizerTestClasses.SuppressedOnMembers;
import org.junit.Test;

public final class SuppressModernizerAnnotationDetectorTest {
Expand All @@ -35,13 +35,17 @@ public void itDetectsSuppressModernizerAnnotation() throws IOException {
Set<String> actual = SuppressModernizerAnnotationDetector.detect(
SuppressedOnClass.class,
SuppressedOnClass.InnerClass.class,
SuppressedOnLocal.class,
SuppressedOnLocalAnonymousInnerClass.class,
SuppressedOnMembers.class,
SuppressedOnMembers.InnerClass.class
);

assertThat(new TreeSet<String>(actual)).containsExactly(
SuppressedOnClass.class.getName().replace('.', '/'),
SuppressedOnClass.InnerClass.class.getName().replace('.', '/'),
SuppressedOnLocal.class.getName().replace('.', '/'),
SuppressedOnLocalAnonymousInnerClass.class.getName().replace('.', '/'),
SuppressedOnMembers.InnerClass.class.getName().replace('.', '/')
);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
package org.gaul.modernizer_maven_plugin;

import java.nio.charset.Charset;
import java.util.Vector;

import com.google.common.base.Charsets;

Expand Down Expand Up @@ -55,4 +56,23 @@ public Charset getCharset() {
}
}
}

public static final class SuppressedOnLocal {
public SuppressedOnLocal() {
@SuppressModernizer
Charset charset = Charsets.UTF_8;
}
}

public static final class SuppressedOnLocalAnonymousInnerClass {
public SuppressedOnLocalAnonymousInnerClass() {
@SuppressModernizer
Vector vector = new Vector() {
@Override
public boolean isEmpty() {
return false;
}
};
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@
<property name="severity" value="ignore"/>
<metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/>
</module>
<module name="LineLength"/>
<module name="NewlineAtEndOfFile">
<property name="lineSeparator" value="lf" />
</module>
Expand Down

0 comments on commit 7a52ccc

Please sign in to comment.