1077 } |
1077 } |
1078 } |
1078 } |
1079 |
1079 |
1080 |
1080 |
1081 private Env<AttrContext> baseEnv(JCClassDecl tree, Env<AttrContext> env) { |
1081 private Env<AttrContext> baseEnv(JCClassDecl tree, Env<AttrContext> env) { |
1082 Scope typaramScope = new Scope(tree.sym); |
1082 Scope baseScope = new Scope(tree.sym); |
|
1083 //import already entered local classes into base scope |
|
1084 for (Scope.Entry e = env.outer.info.scope.elems ; e != null ; e = e.sibling) { |
|
1085 if (e.sym.isLocal()) { |
|
1086 baseScope.enter(e.sym); |
|
1087 } |
|
1088 } |
|
1089 //import current type-parameters into base scope |
1083 if (tree.typarams != null) |
1090 if (tree.typarams != null) |
1084 for (List<JCTypeParameter> typarams = tree.typarams; |
1091 for (List<JCTypeParameter> typarams = tree.typarams; |
1085 typarams.nonEmpty(); |
1092 typarams.nonEmpty(); |
1086 typarams = typarams.tail) |
1093 typarams = typarams.tail) |
1087 typaramScope.enter(typarams.head.type.tsym); |
1094 baseScope.enter(typarams.head.type.tsym); |
1088 Env<AttrContext> outer = env.outer; // the base clause can't see members of this class |
1095 Env<AttrContext> outer = env.outer; // the base clause can't see members of this class |
1089 Env<AttrContext> localEnv = outer.dup(tree, outer.info.dup(typaramScope)); |
1096 Env<AttrContext> localEnv = outer.dup(tree, outer.info.dup(baseScope)); |
1090 localEnv.baseClause = true; |
1097 localEnv.baseClause = true; |
1091 localEnv.outer = outer; |
1098 localEnv.outer = outer; |
1092 localEnv.info.isSelfCall = false; |
1099 localEnv.info.isSelfCall = false; |
1093 return localEnv; |
1100 return localEnv; |
1094 } |
1101 } |