Skip to content

Commit

Permalink
replace all fileManagers to make sure we patch the generated bytecode,
Browse files Browse the repository at this point in the history
…fixes #1518
  • Loading branch information
rspilker committed Nov 29, 2017
1 parent 72561d7 commit 4710d20
Showing 1 changed file with 28 additions and 1 deletion.
29 changes: 28 additions & 1 deletion src/core/lombok/javac/apt/LombokProcessor.java
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,8 @@

import com.sun.source.util.TreePath;
import com.sun.source.util.Trees;
import com.sun.tools.javac.jvm.ClassWriter;
import com.sun.tools.javac.main.JavaCompiler;
import com.sun.tools.javac.processing.JavacFiler;
import com.sun.tools.javac.processing.JavacProcessingEnvironment;
import com.sun.tools.javac.tree.JCTree.JCCompilationUnit;
Expand Down Expand Up @@ -156,7 +158,6 @@ private void placePostCompileAndDontMakeForceRoundDummiesHook() {
@SuppressWarnings("unchecked")
Map<Object,Object> ht = (Map<Object,Object>) htField.get(context);
final JavaFileManager originalFiler = (JavaFileManager) ht.get(key);

if (!(originalFiler instanceof InterceptingJavaFileManager)) {
final Messager messager = processingEnv.getMessager();
DiagnosticsReceiver receiver = new MessagerDiagnosticsReceiver(messager);
Expand All @@ -166,11 +167,37 @@ private void placePostCompileAndDontMakeForceRoundDummiesHook() {
Field filerFileManagerField = JavacFiler.class.getDeclaredField("fileManager");
filerFileManagerField.setAccessible(true);
filerFileManagerField.set(processingEnv.getFiler(), newFiler);

replaceFileManagerJdk9(context, newFiler);
}
} catch (Exception e) {
throw Lombok.sneakyThrow(e);
}
}

private void replaceFileManagerJdk9(Context context, JavaFileManager newFiler) {
try {
JavaCompiler compiler = (JavaCompiler) JavaCompiler.class.getDeclaredMethod("instance", Context.class).invoke(null, context);
try {
Field fileManagerField = JavaCompiler.class.getDeclaredField("fileManager");
fileManagerField.setAccessible(true);
fileManagerField.set(compiler, newFiler);
}
catch (Exception e) {}

try {
Field writerField = JavaCompiler.class.getDeclaredField("writer");
writerField.setAccessible(true);
ClassWriter writer = (ClassWriter) writerField.get(compiler);
Field fileManagerField = ClassWriter.class.getDeclaredField("fileManager");
fileManagerField.setAccessible(true);
fileManagerField.set(writer, newFiler);
}
catch (Exception e) {}
}
catch (Exception e) {
}
}

private void forceMultipleRoundsInNetBeansEditor() {
try {
Expand Down

0 comments on commit 4710d20

Please sign in to comment.