langtools/src/share/classes/com/sun/tools/javac/comp/LambdaToMethod.java
changeset 21495 40291cbc31c2
parent 21493 d3f44b144a76
child 21496 2eb1bb11add1
--- a/langtools/src/share/classes/com/sun/tools/javac/comp/LambdaToMethod.java	Wed Oct 23 13:54:13 2013 -0700
+++ b/langtools/src/share/classes/com/sun/tools/javac/comp/LambdaToMethod.java	Wed Oct 23 23:02:17 2013 +0200
@@ -156,15 +156,12 @@
          */
         private final VarSymbol deserParamSym;
 
-        private final JCClassDecl clazz;
-
-        private KlassInfo(JCClassDecl clazz) {
-            this.clazz = clazz;
+        private KlassInfo(Symbol kSym) {
             appendedMethodList = new ListBuffer<>();
             deserializeCases = new HashMap<String, ListBuffer<JCStatement>>();
             MethodType type = new MethodType(List.of(syms.serializedLambdaType), syms.objectType,
                     List.<Type>nil(), syms.methodClass);
-            deserMethodSym = makePrivateSyntheticMethod(STATIC, names.deserializeLambda, type, clazz.sym);
+            deserMethodSym = makePrivateSyntheticMethod(STATIC, names.deserializeLambda, type, kSym);
             deserParamSym = new VarSymbol(FINAL, names.fromString("lambda"),
                     syms.serializedLambdaType, deserMethodSym);
         }
@@ -224,16 +221,10 @@
         }
         KlassInfo prevKlassInfo = kInfo;
         try {
-            kInfo = new KlassInfo(tree);
+            kInfo = new KlassInfo(tree.sym);
             super.visitClassDef(tree);
             if (!kInfo.deserializeCases.isEmpty()) {
-                int prevPos = make.pos;
-                try {
-                    make.at(tree);
-                    kInfo.addMethod(makeDeserializeMethod(tree.sym));
-                } finally {
-                    make.at(prevPos);
-                }
+                kInfo.addMethod(makeDeserializeMethod(tree.sym));
             }
             //add all translated instance methods here
             List<JCTree> newMethods = kInfo.appendedMethodList.toList();
@@ -409,21 +400,14 @@
         if (context == null || !analyzer.lambdaIdentSymbolFilter(tree.sym)) {
             super.visitIdent(tree);
         } else {
-            int prevPos = make.pos;
-            try {
-                make.at(tree);
-
-                LambdaTranslationContext lambdaContext = (LambdaTranslationContext) context;
-                JCTree ltree = lambdaContext.translate(tree);
-                if (ltree != null) {
-                    result = ltree;
-                } else {
-                    //access to untranslated symbols (i.e. compile-time constants,
-                    //members defined inside the lambda body, etc.) )
-                    super.visitIdent(tree);
-                }
-            } finally {
-                make.at(prevPos);
+            LambdaTranslationContext lambdaContext = (LambdaTranslationContext) context;
+            JCTree ltree = lambdaContext.translate(tree);
+            if (ltree != null) {
+                result = ltree;
+            } else {
+                //access to untranslated symbols (i.e. compile-time constants,
+                //members defined inside the lambda body, etc.) )
+                super.visitIdent(tree);
             }
         }
     }
@@ -433,21 +417,11 @@
         LambdaTranslationContext lambdaContext = (LambdaTranslationContext)context;
         if (context != null && lambdaContext.getSymbolMap(LOCAL_VAR).containsKey(tree.sym)) {
             JCExpression init = translate(tree.init);
-            int prevPos = make.pos;
-            try {
-                result = make.at(tree).VarDef((VarSymbol)lambdaContext.getSymbolMap(LOCAL_VAR).get(tree.sym), init);
-            } finally {
-                make.at(prevPos);
-            }
+            result = make.VarDef((VarSymbol)lambdaContext.getSymbolMap(LOCAL_VAR).get(tree.sym), init);
         } else if (context != null && lambdaContext.getSymbolMap(TYPE_VAR).containsKey(tree.sym)) {
             JCExpression init = translate(tree.init);
             VarSymbol xsym = (VarSymbol)lambdaContext.getSymbolMap(TYPE_VAR).get(tree.sym);
-            int prevPos = make.pos;
-            try {
-                result = make.at(tree).VarDef(xsym, init);
-            } finally {
-                make.at(prevPos);
-            }
+            result = make.VarDef(xsym, init);
             // Replace the entered symbol for this variable
             Scope sc = tree.sym.owner.members();
             if (sc != null) {
@@ -474,28 +448,23 @@
         boolean isLambda_void = expr.type.hasTag(VOID);
         boolean isTarget_void = restype.hasTag(VOID);
         boolean isTarget_Void = types.isSameType(restype, types.boxedClass(syms.voidType).type);
-        int prevPos = make.pos;
-        try {
-            if (isTarget_void) {
-                //target is void:
-                // BODY;
-                JCStatement stat = make.at(expr).Exec(expr);
-                return make.Block(0, List.<JCStatement>of(stat));
-            } else if (isLambda_void && isTarget_Void) {
-                //void to Void conversion:
-                // BODY; return null;
-                ListBuffer<JCStatement> stats = new ListBuffer<>();
-                stats.append(make.at(expr).Exec(expr));
-                stats.append(make.Return(make.Literal(BOT, null).setType(syms.botType)));
-                return make.Block(0, stats.toList());
-            } else {
-                //non-void to non-void conversion:
-                // return (TYPE)BODY;
-                JCExpression retExpr = transTypes.coerce(attrEnv, expr, restype);
-                return make.at(retExpr).Block(0, List.<JCStatement>of(make.Return(retExpr)));
-            }
-        } finally {
-            make.at(prevPos);
+        if (isTarget_void) {
+            //target is void:
+            // BODY;
+            JCStatement stat = make.Exec(expr);
+            return make.Block(0, List.<JCStatement>of(stat));
+        } else if (isLambda_void && isTarget_Void) {
+            //void to Void conversion:
+            // BODY; return null;
+            ListBuffer<JCStatement> stats = new ListBuffer<>();
+            stats.append(make.Exec(expr));
+            stats.append(make.Return(make.Literal(BOT, null).setType(syms.botType)));
+            return make.Block(0, stats.toList());
+        } else {
+            //non-void to non-void conversion:
+            // return (TYPE)BODY;
+            JCExpression retExpr = transTypes.coerce(attrEnv, expr, restype);
+            return make.at(retExpr).Block(0, List.<JCStatement>of(make.Return(retExpr)));
         }
     }
 
@@ -997,14 +966,8 @@
                 }
             }
             if (context.isSerializable()) {
-                int prevPos = make.pos;
-                try {
-                    make.at(kInfo.clazz);
-                    addDeserializationCase(refKind, refSym, tree.type, samSym,
-                            tree, staticArgs, indyType);
-                } finally {
-                    make.at(prevPos);
-                }
+                addDeserializationCase(refKind, refSym, tree.type, samSym,
+                        tree, staticArgs, indyType);
             }
         }