44 import java.util.TreeSet;
45
46 import javax.tools.JavaFileObject;
47 import javax.tools.ToolProvider;
48
49 import com.sun.source.tree.IdentifierTree;
50 import com.sun.source.tree.Tree;
51 import com.sun.source.tree.VariableTree;
52 import com.sun.source.util.JavacTask;
53 import com.sun.tools.javac.api.JavacTool;
54 import com.sun.tools.javac.code.Symbol;
55 import com.sun.tools.javac.comp.AttrContext;
56 import com.sun.tools.javac.comp.Env;
57 import com.sun.tools.javac.comp.Lower;
58 import com.sun.tools.javac.tree.JCTree;
59 import com.sun.tools.javac.tree.JCTree.JCBlock;
60 import com.sun.tools.javac.tree.JCTree.JCExpression;
61 import com.sun.tools.javac.tree.JCTree.JCMethodDecl;
62 import com.sun.tools.javac.tree.JCTree.JCMethodInvocation;
63 import com.sun.tools.javac.tree.JCTree.JCModifiers;
64 import com.sun.tools.javac.tree.JCTree.JCVariableDecl;
65 import com.sun.tools.javac.tree.JCTree.LetExpr;
66 import com.sun.tools.javac.tree.JCTree.Tag;
67 import com.sun.tools.javac.tree.TreeCopier;
68 import com.sun.tools.javac.tree.TreeInfo;
69 import com.sun.tools.javac.tree.TreeMaker;
70 import com.sun.tools.javac.tree.TreeScanner;
71 import com.sun.tools.javac.util.Context;
72 import com.sun.tools.javac.util.List;
73 import com.sun.tools.javac.util.Log;
74 import com.sun.tools.javac.util.Log.WriterKind;
75 import com.sun.tools.javac.util.Names;
76
77 import toolbox.ToolBox;
78
79 public class BoxingAndSuper {
80 public static void main(String... args) throws Exception {
81 new BoxingAndSuper().testSuper();
82 new BoxingAndSuper().testThis();
83 }
310 return ;
311
312 JCMethodDecl method = declarations.get(methodSym);
313
314 if (method == null) {
315 return ;
316 }
317
318 log.getWriter(WriterKind.NOTICE).println(symbol2String(methodSym));
319
320 JCBlock body = new TreeCopier<Void>(make) {
321 private final Map<String, String> letExprRemap = new HashMap<>();
322 private int i;
323
324 @Override
325 public JCTree visitOther(Tree node, Void p) {
326 JCTree tree = (JCTree) node;
327 if (tree.hasTag(Tag.LETEXPR)) {
328 LetExpr le = (LetExpr) tree;
329
330 for (JCVariableDecl var : le.defs) {
331 letExprRemap.put(var.name.toString(), "$le" + i++);
332 }
333 }
334 return super.visitOther(node, p);
335 }
336
337 @Override
338 public JCTree visitVariable(VariableTree node, Void p) {
339 String newName = letExprRemap.get(node.getName().toString());
340 if (newName != null) {
341 node = make.VarDef((JCModifiers) node.getModifiers(), names.fromString(newName), (JCExpression) node.getType(), (JCExpression) node.getInitializer());
342 }
343 return super.visitVariable(node, p);
344 }
345
346 @Override
347 public JCTree visitIdentifier(IdentifierTree node, Void p) {
348 String newName = letExprRemap.get(node.getName().toString());
349 if (newName != null) {
350 node = make.Ident(names.fromString(newName));
351 }
|
44 import java.util.TreeSet;
45
46 import javax.tools.JavaFileObject;
47 import javax.tools.ToolProvider;
48
49 import com.sun.source.tree.IdentifierTree;
50 import com.sun.source.tree.Tree;
51 import com.sun.source.tree.VariableTree;
52 import com.sun.source.util.JavacTask;
53 import com.sun.tools.javac.api.JavacTool;
54 import com.sun.tools.javac.code.Symbol;
55 import com.sun.tools.javac.comp.AttrContext;
56 import com.sun.tools.javac.comp.Env;
57 import com.sun.tools.javac.comp.Lower;
58 import com.sun.tools.javac.tree.JCTree;
59 import com.sun.tools.javac.tree.JCTree.JCBlock;
60 import com.sun.tools.javac.tree.JCTree.JCExpression;
61 import com.sun.tools.javac.tree.JCTree.JCMethodDecl;
62 import com.sun.tools.javac.tree.JCTree.JCMethodInvocation;
63 import com.sun.tools.javac.tree.JCTree.JCModifiers;
64 import com.sun.tools.javac.tree.JCTree.JCStatement;
65 import com.sun.tools.javac.tree.JCTree.JCVariableDecl;
66 import com.sun.tools.javac.tree.JCTree.LetExpr;
67 import com.sun.tools.javac.tree.JCTree.Tag;
68 import com.sun.tools.javac.tree.TreeCopier;
69 import com.sun.tools.javac.tree.TreeInfo;
70 import com.sun.tools.javac.tree.TreeMaker;
71 import com.sun.tools.javac.tree.TreeScanner;
72 import com.sun.tools.javac.util.Context;
73 import com.sun.tools.javac.util.List;
74 import com.sun.tools.javac.util.Log;
75 import com.sun.tools.javac.util.Log.WriterKind;
76 import com.sun.tools.javac.util.Names;
77
78 import toolbox.ToolBox;
79
80 public class BoxingAndSuper {
81 public static void main(String... args) throws Exception {
82 new BoxingAndSuper().testSuper();
83 new BoxingAndSuper().testThis();
84 }
311 return ;
312
313 JCMethodDecl method = declarations.get(methodSym);
314
315 if (method == null) {
316 return ;
317 }
318
319 log.getWriter(WriterKind.NOTICE).println(symbol2String(methodSym));
320
321 JCBlock body = new TreeCopier<Void>(make) {
322 private final Map<String, String> letExprRemap = new HashMap<>();
323 private int i;
324
325 @Override
326 public JCTree visitOther(Tree node, Void p) {
327 JCTree tree = (JCTree) node;
328 if (tree.hasTag(Tag.LETEXPR)) {
329 LetExpr le = (LetExpr) tree;
330
331 for (JCStatement var : le.defs) {
332 letExprRemap.put(((JCVariableDecl) var).name.toString(), "$le" + i++);
333 }
334 }
335 return super.visitOther(node, p);
336 }
337
338 @Override
339 public JCTree visitVariable(VariableTree node, Void p) {
340 String newName = letExprRemap.get(node.getName().toString());
341 if (newName != null) {
342 node = make.VarDef((JCModifiers) node.getModifiers(), names.fromString(newName), (JCExpression) node.getType(), (JCExpression) node.getInitializer());
343 }
344 return super.visitVariable(node, p);
345 }
346
347 @Override
348 public JCTree visitIdentifier(IdentifierTree node, Void p) {
349 String newName = letExprRemap.get(node.getName().toString());
350 if (newName != null) {
351 node = make.Ident(names.fromString(newName));
352 }
|