[java] drops obsolete ASM 6 compatibility hacks

This commit is contained in:
Roman Shevchenko
2018-11-29 18:02:27 +01:00
parent ffaa9aa52b
commit f8ec92228a
4 changed files with 5 additions and 47 deletions
Binary file not shown.
@@ -25,12 +25,6 @@ public class NotNullVerifyingInstrumenter extends ClassVisitor implements Opcode
@SuppressWarnings("SSBasedInspection") private static final String[] EMPTY_STRING_ARRAY = new String[0];
private static final boolean NEW_ASM;
static {
try { NEW_ASM = (Integer)Opcodes.class.getField("API_VERSION").get(null) > Opcodes.ASM6; }
catch (Exception e) { throw new RuntimeException(e); }
}
private final Map<String, Map<Integer, String>> myMethodParamNames;
private String myClassName;
private boolean myIsModification = false;
@@ -159,10 +153,7 @@ public class NotNullVerifyingInstrumenter extends ClassVisitor implements Opcode
boolean hasOuterClassParameter = myEnclosed && myInner && "<init>".equals(name);
// see http://forge.ow2.org/tracker/?aid=307392&group_id=23&atid=100023&func=detail
final int syntheticCount = signature == null ? 0 : hasOuterClassParameter ? 1 : Math.max(0, args.length - getSignatureParameterCount(signature));
// workaround for ASM workaround for javac bug: http://forge.ow2.org/tracker/?func=detail&aid=317788&group_id=23&atid=100023
final int paramAnnotationOffset = !"<init>".equals(name) ? 0 : NEW_ASM
? (myEnum ? -2 : myInner ? -1 : 0)
: signature != null && hasOuterClassParameter ? Math.max(0, args.length - getSignatureParameterCount(signature) - 1) : 0;
final int paramAnnotationOffset = !"<init>".equals(name) ? 0 : myEnum ? 2 : myInner ? 1 : 0;
final Type returnType = Type.getReturnType(desc);
final MethodVisitor v = cv.visitMethod(access, name, desc, signature, exceptions);
@@ -214,8 +205,7 @@ public class NotNullVerifyingInstrumenter extends ClassVisitor implements Opcode
@Override
public AnnotationVisitor visitParameterAnnotation(int parameter, String anno, boolean visible) {
AnnotationVisitor base = mv.visitParameterAnnotation(parameter, anno, visible);
if (!NEW_ASM && parameter < myParamAnnotationOffset) return base;
return checkNotNullParameter(parameter - myParamAnnotationOffset, anno, base);
return checkNotNullParameter(parameter + myParamAnnotationOffset, anno, base);
}
private AnnotationVisitor checkNotNullParameter(int parameter, String anno, AnnotationVisitor av) {
@@ -8,7 +8,6 @@ import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.List;
import static org.jetbrains.jps.intellilang.instrumentation.PatternInstrumenter.NEW_ASM;
import static org.jetbrains.jps.intellilang.instrumentation.PatternInstrumenter.isStringType;
class InstrumentationAdapter extends FailSafeMethodVisitor implements Opcodes {
@@ -59,12 +58,12 @@ class InstrumentationAdapter extends FailSafeMethodVisitor implements Opcodes {
public AnnotationVisitor visitParameterAnnotation(int parameter, String desc, boolean visible) {
AnnotationVisitor av = mv.visitParameterAnnotation(parameter, desc, visible);
if (NEW_ASM ? isStringType(myArgTypes[parameter - myParamAnnotationOffset]) : parameter >= myParamAnnotationOffset && isStringType(myArgTypes[parameter])) {
if (isStringType(myArgTypes[parameter + myParamAnnotationOffset])) {
String annotationClassName = Type.getType(desc).getClassName();
String pattern = myInstrumenter.getAnnotationPattern(annotationClassName);
if (pattern != null) {
String shortName = annotationClassName.substring(annotationClassName.lastIndexOf('.') + 1);
PatternValue patternValue = new PatternValue(parameter - myParamAnnotationOffset, shortName, pattern);
PatternValue patternValue = new PatternValue(parameter + myParamAnnotationOffset, shortName, pattern);
myParameterPatterns.add(patternValue);
if (pattern == PatternInstrumenter.NULL_PATTERN) {
return new MyAnnotationVisitor(av, patternValue);
@@ -6,8 +6,6 @@ import com.intellij.openapi.diagnostic.Logger;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.org.objectweb.asm.*;
import org.jetbrains.org.objectweb.asm.signature.SignatureReader;
import org.jetbrains.org.objectweb.asm.signature.SignatureVisitor;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
@@ -26,12 +24,6 @@ class PatternInstrumenter extends ClassVisitor implements Opcodes {
static final String JAVA_UTIL_REGEX_PATTERN = "[Ljava/util/regex/Pattern;";
static final String NULL_PATTERN = "((((";
static final boolean NEW_ASM;
static {
try { NEW_ASM = (Integer)Opcodes.class.getField("API_VERSION").get(null) > Opcodes.ASM6; }
catch (Exception e) { throw new RuntimeException(e); }
}
private final String myPatternAnnotationClassName;
private final boolean myDoAssert;
private final InstrumentationClassFinder myClassFinder;
@@ -41,7 +33,6 @@ class PatternInstrumenter extends ClassVisitor implements Opcodes {
private String myClassName;
private boolean myEnum;
private boolean myInner;
private boolean myEnclosed;
private boolean myHasAssertions;
private boolean myHasStaticInitializer;
private boolean myInstrumented;
@@ -84,12 +75,6 @@ class PatternInstrumenter extends ClassVisitor implements Opcodes {
}
}
@Override
public void visitOuterClass(String owner, String name, String desc) {
super.visitOuterClass(owner, name, desc);
myEnclosed = true;
}
@Override
public FieldVisitor visitField(int access, String name, String desc, String signature, Object value) {
if (name.equals(ASSERTIONS_DISABLED_NAME)) {
@@ -183,9 +168,7 @@ class PatternInstrumenter extends ClassVisitor implements Opcodes {
Type[] argTypes = Type.getArgumentTypes(desc);
Type returnType = Type.getReturnType(desc);
if (isCandidate(argTypes, returnType)) {
int offset = !"<init>".equals(name) ? 0 : NEW_ASM
? (myEnum ? -2 : myInner ? -1 : 0)
: (myEnclosed && myInner && signature != null ? Math.max(0, argTypes.length - countSignatureParameters(signature) - 1) : 0);
int offset = !"<init>".equals(name) ? 0 : myEnum ? 2 : myInner ? 1 : 0;
return new InstrumentationAdapter(this, methodvisitor, argTypes, returnType, myClassName, name, myDoAssert, isStatic, offset);
}
}
@@ -209,20 +192,6 @@ class PatternInstrumenter extends ClassVisitor implements Opcodes {
return type.getSort() == Type.OBJECT && type.getDescriptor().equals(JAVA_LANG_STRING);
}
private static int countSignatureParameters(String signature) {
int[] count = {0};
if (signature != null) {
new SignatureReader(signature).accept(new SignatureVisitor(Opcodes.API_VERSION) {
@Override
public SignatureVisitor visitParameterType() {
count[0]++;
return super.visitParameterType();
}
});
}
return count[0];
}
int addPattern(String s) {
return myPatterns.add(s) ? myPatterns.size() - 1 : Arrays.asList(myPatterns.toArray()).indexOf(s);
}