From 754a04ad703a63cca10f27ed852ab9589cfc63d5 Mon Sep 17 00:00:00 2001 From: Lubomir Rintel <lkundrak@v3.sk> Date: Wed, 10 Mar 2010 07:26:06 +0100 Subject: [PATCH 03/15] Make the NotNull instrumenter work with stock asm --- .../NotNullVerifyingInstrumenter.java | 16 +++++++++++----- 1 files changed, 11 insertions(+), 5 deletions(-) diff --git a/java/compiler/notNull/src/com/intellij/compiler/notNullVerification/NotNullVerifyingInstrumenter.java b/java/compiler/notNull/src/com/intellij/compiler/notNullVerification/NotNullVerifyingInstrumenter.java index ee4c4de..0839f63 100644 --- a/java/compiler/notNull/src/com/intellij/compiler/notNullVerification/NotNullVerifyingInstrumenter.java +++ b/java/compiler/notNull/src/com/intellij/compiler/notNullVerification/NotNullVerifyingInstrumenter.java @@ -75,6 +75,7 @@ public class NotNullVerifyingInstrumenter extends ClassAdapter { return new MethodAdapter(v) { private final ArrayList myNotNullParams = new ArrayList(); + private int synthetics = 0; private boolean myIsNotNull = false; public Label myThrowLabel; private Label myStartGeneratedCodeLabel; @@ -87,10 +88,15 @@ public class NotNullVerifyingInstrumenter extends ClassAdapter { av = mv.visitParameterAnnotation(parameter, anno, visible); - if (isReferenceType(args[parameter]) && - anno.equals("Lorg/jetbrains/annotations/NotNull;")) { - myNotNullParams.add(new Integer(parameter)); - } + if (isReferenceType(args[parameter])) { + if (anno.equals("Lorg/jetbrains/annotations/NotNull;")) { + myNotNullParams.add(new Integer(parameter)); + } else if (anno.equals("Ljava/lang/Synthetic;")) { + // See asm r1278 for what we do this, + // http://forge.objectweb.org/tracker/index.php?func=detail&aid=307392&group_id=23&atid=100023 + synthetics++; + } + } return av; } @@ -112,7 +118,7 @@ public class NotNullVerifyingInstrumenter extends ClassAdapter { } for (int p = 0; p < myNotNullParams.size(); ++p) { int var = ((access & Opcodes.ACC_STATIC) == 0) ? 1 : 0; - int param = ((Integer)myNotNullParams.get(p)).intValue(); + int param = ((Integer)myNotNullParams.get(p)).intValue() - synthetics; for (int i = 0; i < param + startParameter; ++i) { var += args[i].getSize(); } -- 1.7.0.1