diff --git a/java/compiler/instrumentation-util/src/com/intellij/compiler/notNullVerification/NotNullVerifyingInstrumenter.java b/java/compiler/instrumentation-util/src/com/intellij/compiler/notNullVerification/NotNullVerifyingInstrumenter.java index 686791e94c04..80b5ad023765 100644 --- a/java/compiler/instrumentation-util/src/com/intellij/compiler/notNullVerification/NotNullVerifyingInstrumenter.java +++ b/java/compiler/instrumentation-util/src/com/intellij/compiler/notNullVerification/NotNullVerifyingInstrumenter.java @@ -75,14 +75,20 @@ public class NotNullVerifyingInstrumenter extends ClassVisitor implements Opcode final Map names = new LinkedHashMap(); final Type[] args = Type.getArgumentTypes(desc); methodParamNames.put(methodName, names); - + + final boolean isStatic = (access & ACC_STATIC) != 0; return new MethodVisitor(api) { + int varIndex = 0; + @Override public void visitLocalVariable(String name2, String desc, String signature, Label start, Label end, int index) { - int parameterIndex = getParameterIndex(index, access, args); - if (parameterIndex >= 0) { - names.put(parameterIndex, name2); + if (!isStatic && index == 0) { + return; //'this' variable } + if (varIndex >= args.length) { + return; // no parameters anymore + } + names.put(varIndex++, name2); } }; } diff --git a/java/java-tests/testData/compiler/notNullVerification/LongParameter.java b/java/java-tests/testData/compiler/notNullVerification/LongParameter.java new file mode 100644 index 000000000000..473591c37091 --- /dev/null +++ b/java/java-tests/testData/compiler/notNullVerification/LongParameter.java @@ -0,0 +1,9 @@ +import org.jetbrains.annotations.NotNull; + +public class LongParameter { + + public static void foo(long a, @NotNull String b, @NotNull String c) { + + } + +} diff --git a/java/java-tests/testSrc/com/intellij/compiler/notNullVerification/NotNullVerifyingInstrumenterTest.java b/java/java-tests/testSrc/com/intellij/compiler/notNullVerification/NotNullVerifyingInstrumenterTest.java index e9d1da3aaf18..f05c612a12a8 100644 --- a/java/java-tests/testSrc/com/intellij/compiler/notNullVerification/NotNullVerifyingInstrumenterTest.java +++ b/java/java-tests/testSrc/com/intellij/compiler/notNullVerification/NotNullVerifyingInstrumenterTest.java @@ -126,6 +126,12 @@ public class NotNullVerifyingInstrumenterTest extends UsefulTestCase { verifyCallThrowsException("Argument for @NotNull parameter 'x' of UseParameterNames.instanceMethod must not be null", instance, instanceMethod, (Object)null); } + public void testLongParameter() throws Exception { + Class testClass = prepareTest(true); + Method staticMethod = testClass.getMethod("foo", long.class, String.class, String.class); + verifyCallThrowsException("Argument for @NotNull parameter 'c' of LongParameter.foo must not be null", null, staticMethod, new Long(2), "z", null); + } + public void testEnumConstructor() throws Exception { Class testClass = prepareTest(); Object field = testClass.getField("Value");