--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/TypeEnter.java Tue Mar 15 13:48:30 2016 -0700
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/TypeEnter.java Thu Mar 17 19:04:28 2016 +0000
@@ -162,6 +162,8 @@
// if there remain any unimported toplevels (these must have
// no classes at all), process their import statements as well.
for (JCCompilationUnit tree : trees) {
+ if (tree.defs.nonEmpty() && tree.defs.head.hasTag(MODULEDEF))
+ continue;
if (!tree.starImportScope.isFilled()) {
Env<AttrContext> topEnv = enter.topLevelEnv(tree);
finishImports(tree, () -> { completeClass.resolveImports(tree, topEnv); });
@@ -330,7 +332,7 @@
chk.importAccessible(sym, packge);
// Import-on-demand java.lang.
- PackageSymbol javaLang = syms.enterPackage(names.java_lang);
+ PackageSymbol javaLang = syms.enterPackage(syms.java_base, names.java_lang);
if (javaLang.members().isEmpty() && !javaLang.exists())
throw new FatalError(diags.fragment("fatal.err.no.java.lang"));
importAll(make.at(tree.pos()).Import(make.QualIdent(javaLang), false), javaLang, env);
@@ -358,7 +360,9 @@
Symbol p = env.toplevel.packge;
while (p.owner != syms.rootPackage) {
p.owner.complete(); // enter all class members of p
- if (syms.classes.get(p.getQualifiedName()) != null) {
+ //need to lookup the owning module/package:
+ PackageSymbol pack = syms.lookupPackage(env.toplevel.modle, p.owner.getQualifiedName());
+ if (syms.getClass(pack.modle, p.getQualifiedName()) != null) {
log.error(tree.pos,
"pkg.clashes.with.class.of.same.name",
p);
@@ -515,7 +519,7 @@
return result;
}
- protected Type modelMissingTypes(Type t, final JCExpression tree, final boolean interfaceExpected) {
+ protected Type modelMissingTypes(Env<AttrContext> env, Type t, final JCExpression tree, final boolean interfaceExpected) {
if (!t.hasTag(ERROR))
return t;
@@ -525,19 +529,21 @@
@Override
public Type getModelType() {
if (modelType == null)
- modelType = new Synthesizer(getOriginalType(), interfaceExpected).visit(tree);
+ modelType = new Synthesizer(env.toplevel.modle, getOriginalType(), interfaceExpected).visit(tree);
return modelType;
}
};
}
// where:
private class Synthesizer extends JCTree.Visitor {
+ ModuleSymbol msym;
Type originalType;
boolean interfaceExpected;
List<ClassSymbol> synthesizedSymbols = List.nil();
Type result;
- Synthesizer(Type originalType, boolean interfaceExpected) {
+ Synthesizer(ModuleSymbol msym, Type originalType, boolean interfaceExpected) {
+ this.msym = msym;
this.originalType = originalType;
this.interfaceExpected = interfaceExpected;
}
@@ -564,7 +570,7 @@
if (!tree.type.hasTag(ERROR)) {
result = tree.type;
} else {
- result = synthesizeClass(tree.name, syms.unnamedPackage).type;
+ result = synthesizeClass(tree.name, msym.unnamedPackage).type;
}
}
@@ -654,7 +660,7 @@
? Type.noType
: syms.objectType;
}
- ct.supertype_field = modelMissingTypes(supertype, extending, false);
+ ct.supertype_field = modelMissingTypes(baseEnv, supertype, extending, false);
// Determine interfaces.
ListBuffer<Type> interfaces = new ListBuffer<>();
@@ -669,7 +675,7 @@
} else {
if (all_interfaces == null)
all_interfaces = new ListBuffer<Type>().appendList(interfaces);
- all_interfaces.append(modelMissingTypes(it, iface, true));
+ all_interfaces.append(modelMissingTypes(baseEnv, it, iface, true));
}
}
@@ -816,8 +822,8 @@
// but admit classes in the unnamed package which have the same
// name as a top-level package.
if (checkClash &&
- sym.owner.kind == PCK && sym.owner != syms.unnamedPackage &&
- syms.packageExists(sym.fullname)) {
+ sym.owner.kind == PCK && sym.owner != env.toplevel.modle.unnamedPackage &&
+ syms.packageExists(env.toplevel.modle, sym.fullname)) {
log.error(tree.pos, "clash.with.pkg.of.same.name", Kinds.kindName(sym), sym);
}
if (sym.owner.kind == PCK && (sym.flags_field & PUBLIC) == 0 &&