--- old/src/jdk.compiler/share/classes/com/sun/tools/javac/code/ClassFinder.java 2017-02-08 11:44:09.439649276 -0800 +++ new/src/jdk.compiler/share/classes/com/sun/tools/javac/code/ClassFinder.java 2017-02-08 11:44:09.299648224 -0800 @@ -553,20 +553,47 @@ Location classLocn = msym.classLocation; Location sourceLocn = msym.sourceLocation; + Location patchLocn = msym.patchLocation; + Location patchOutLocn = msym.patchOutputLocation; - if (wantClassFiles && (classLocn != null)) { - fillIn(p, classLocn, - list(classLocn, - p, - packageName, - classKinds)); - } - if (wantSourceFiles && (sourceLocn != null)) { - fillIn(p, sourceLocn, - list(sourceLocn, - p, - packageName, - sourceKinds)); + boolean prevPreferCurrent = preferCurrent; + + try { + preferCurrent = false; + if (wantClassFiles && (patchOutLocn != null)) { + fillIn(p, patchOutLocn, + list(patchOutLocn, + p, + packageName, + classKinds)); + } + if ((wantClassFiles || wantSourceFiles) && (patchLocn != null)) { + Set combined = EnumSet.noneOf(JavaFileObject.Kind.class); + combined.addAll(classKinds); + combined.addAll(sourceKinds); + fillIn(p, patchLocn, + list(patchLocn, + p, + packageName, + combined)); + } + preferCurrent = true; + if (wantClassFiles && (classLocn != null)) { + fillIn(p, classLocn, + list(classLocn, + p, + packageName, + classKinds)); + } + if (wantSourceFiles && (sourceLocn != null)) { + fillIn(p, sourceLocn, + list(sourceLocn, + p, + packageName, + sourceKinds)); + } + } finally { + preferCurrent = prevPreferCurrent; } }