Cleanup (reverts accidentally committed file)

This commit is contained in:
Roman Shevchenko
2018-11-30 19:08:58 +01:00
parent 39f631f2cb
commit ca46b0c37d
@@ -4,6 +4,8 @@ package com.intellij.compiler.notNullVerification;
import com.intellij.compiler.instrumentation.FailSafeClassReader;
import com.intellij.compiler.instrumentation.FailSafeMethodVisitor;
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.PrintStream;
@@ -31,6 +33,7 @@ public class NotNullVerifyingInstrumenter extends ClassVisitor implements Opcode
private final Set<String> myNotNullAnnotations = new HashSet<String>();
private boolean myEnum;
private boolean myInner;
private boolean myEnclosed;
private NotNullVerifyingInstrumenter(ClassVisitor classVisitor, ClassReader reader, String[] notNullAnnotations) {
super(Opcodes.API_VERSION, classVisitor);
@@ -104,6 +107,12 @@ public class NotNullVerifyingInstrumenter extends ClassVisitor implements Opcode
}
}
@Override
public void visitOuterClass(String owner, String name, String desc) {
super.visitOuterClass(owner, name, desc);
myEnclosed = true;
}
private static class NotNullState {
String message;
String exceptionType;
@@ -141,6 +150,9 @@ public class NotNullVerifyingInstrumenter extends ClassVisitor implements Opcode
final boolean isStatic = isStatic(access);
final Type[] args = Type.getArgumentTypes(desc);
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));
final int paramAnnotationOffset = !"<init>".equals(name) ? 0 : myEnum ? 2 : myInner ? 1 : 0;
final Type returnType = Type.getReturnType(desc);
@@ -177,7 +189,7 @@ public class NotNullVerifyingInstrumenter extends ClassVisitor implements Opcode
return checkNotNullMethod(desc, base);
}
if (ref.getSort() == TypeReference.METHOD_FORMAL_PARAMETER) {
return checkNotNullParameter(ref.getFormalParameterIndex() + paramAnnotationOffset, desc, base);
return checkNotNullParameter(ref.getFormalParameterIndex() + syntheticCount, desc, base);
}
return base;
}
@@ -241,7 +253,7 @@ public class NotNullVerifyingInstrumenter extends ClassVisitor implements Opcode
String descrPattern = state.getNullParamMessage(paramName);
String[] args = state.message != null
? EMPTY_STRING_ARRAY
: new String[]{paramName != null ? paramName : String.valueOf(param - paramAnnotationOffset), myClassName, name};
: new String[]{paramName != null ? paramName : String.valueOf(param - syntheticCount), myClassName, name};
reportError(state.exceptionType, end, descrPattern, args);
}
}
@@ -291,6 +303,18 @@ public class NotNullVerifyingInstrumenter extends ClassVisitor implements Opcode
return (access & ACC_STATIC) != 0;
}
private static int getSignatureParameterCount(String signature) {
final int[] count = {0};
new SignatureReader(signature).accept(new SignatureVisitor(Opcodes.ASM6) {
@Override
public SignatureVisitor visitParameterType() {
count[0]++;
return super.visitParameterType();
}
});
return count[0];
}
private static boolean isReferenceType(Type type) {
return type.getSort() == Type.OBJECT || type.getSort() == Type.ARRAY;
}