1.1 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/code/ClassFinder.java Wed May 10 12:38:59 2017 +0200
1.2 +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/code/ClassFinder.java Mon Jul 31 11:07:41 2017 +0200
1.3 @@ -355,6 +355,8 @@
1.4 JavaFileObject classfile = c.classfile;
1.5 if (classfile != null) {
1.6 JavaFileObject previousClassFile = currentClassFile;
1.7 + Symbol prevOwner = c.owner;
1.8 + Name prevName = c.fullname;
1.9 try {
1.10 if (reader.filling) {
1.11 Assert.error("Filling " + classfile.toUri() + " during " + previousClassFile);
1.12 @@ -377,6 +379,21 @@
1.13 + classfile.toUri());
1.14 }
1.15 }
1.16 + } catch (BadClassFile cf) {
1.17 + //the symbol may be partially initialized, purge it:
1.18 + c.owner = prevOwner;
1.19 + c.members_field.getSymbols(sym -> sym.kind == TYP).forEach(sym -> {
1.20 + ClassSymbol csym = (ClassSymbol) sym;
1.21 + csym.owner = sym.packge();
1.22 + csym.owner.members().enter(sym);
1.23 + csym.fullname = sym.flatName();
1.24 + csym.name = Convert.shortName(sym.flatName());
1.25 + csym.reset();
1.26 + });
1.27 + c.fullname = prevName;
1.28 + c.name = Convert.shortName(prevName);
1.29 + c.reset();
1.30 + throw cf;
1.31 } finally {
1.32 currentClassFile = previousClassFile;
1.33 }