Sophie

Sophie

distrib > Fedora > 13 > i386 > by-pkgid > bdbe8ee81748df660abeb99af85e7582 > files > 3

intellij-idea-9.0.1.94.399-10.fc13.src.rpm

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