< prev index next >

src/jdk.compiler/share/classes/com/sun/tools/javac/main/JavaCompiler.java

Print this page




1473          * already been added to C and its superclasses.
1474          */
1475         class ScanNested extends TreeScanner {
1476             Set<Env<AttrContext>> dependencies = new LinkedHashSet<>();
1477             protected boolean hasLambdas;
1478             @Override
1479             public void visitClassDef(JCClassDecl node) {
1480                 Type st = types.supertype(node.sym.type);
1481                 boolean envForSuperTypeFound = false;
1482                 while (!envForSuperTypeFound && st.hasTag(CLASS)) {
1483                     ClassSymbol c = st.tsym.outermostClass();
1484                     Env<AttrContext> stEnv = enter.getEnv(c);
1485                     if (stEnv != null && env != stEnv) {
1486                         if (dependencies.add(stEnv)) {
1487                             boolean prevHasLambdas = hasLambdas;
1488                             try {
1489                                 scan(stEnv.tree);
1490                             } finally {
1491                                 /*
1492                                  * ignore any updates to hasLambdas made during
1493                                  * the nested scan, this ensures an initalized
1494                                  * LambdaToMethod is available only to those
1495                                  * classes that contain lambdas
1496                                  */
1497                                 hasLambdas = prevHasLambdas;
1498                             }
1499                         }
1500                         envForSuperTypeFound = true;
1501                     }
1502                     st = types.supertype(st);
1503                 }
1504                 super.visitClassDef(node);
1505             }
1506             @Override
1507             public void visitLambda(JCLambda tree) {
1508                 hasLambdas = true;
1509                 super.visitLambda(tree);
1510             }
1511             @Override
1512             public void visitReference(JCMemberReference tree) {
1513                 hasLambdas = true;




1473          * already been added to C and its superclasses.
1474          */
1475         class ScanNested extends TreeScanner {
1476             Set<Env<AttrContext>> dependencies = new LinkedHashSet<>();
1477             protected boolean hasLambdas;
1478             @Override
1479             public void visitClassDef(JCClassDecl node) {
1480                 Type st = types.supertype(node.sym.type);
1481                 boolean envForSuperTypeFound = false;
1482                 while (!envForSuperTypeFound && st.hasTag(CLASS)) {
1483                     ClassSymbol c = st.tsym.outermostClass();
1484                     Env<AttrContext> stEnv = enter.getEnv(c);
1485                     if (stEnv != null && env != stEnv) {
1486                         if (dependencies.add(stEnv)) {
1487                             boolean prevHasLambdas = hasLambdas;
1488                             try {
1489                                 scan(stEnv.tree);
1490                             } finally {
1491                                 /*
1492                                  * ignore any updates to hasLambdas made during
1493                                  * the nested scan, this ensures an initialized
1494                                  * LambdaToMethod is available only to those
1495                                  * classes that contain lambdas
1496                                  */
1497                                 hasLambdas = prevHasLambdas;
1498                             }
1499                         }
1500                         envForSuperTypeFound = true;
1501                     }
1502                     st = types.supertype(st);
1503                 }
1504                 super.visitClassDef(node);
1505             }
1506             @Override
1507             public void visitLambda(JCLambda tree) {
1508                 hasLambdas = true;
1509                 super.visitLambda(tree);
1510             }
1511             @Override
1512             public void visitReference(JCMemberReference tree) {
1513                 hasLambdas = true;


< prev index next >