get Javac processing environment for intellij

This commit is contained in:
金戟 2020-12-26 19:30:35 +08:00
parent ee21c8dcd8
commit 96ea5680df
2 changed files with 21 additions and 11 deletions

View File

@ -11,7 +11,6 @@ import com.sun.tools.javac.code.Symbol;
import com.sun.tools.javac.processing.JavacProcessingEnvironment;
import com.sun.tools.javac.tree.JCTree;
import com.sun.tools.javac.tree.TreeMaker;
import com.sun.tools.javac.util.Context;
import com.sun.tools.javac.util.Names;
import javax.annotation.processing.AbstractProcessor;
@ -35,14 +34,14 @@ public class EnablePrivateAccessProcessor extends AbstractProcessor {
@Override
public synchronized void init(ProcessingEnvironment processingEnv) {
super.init(processingEnv);
Context context = getJavacProcessingContext(processingEnv);
if (context == null) {
JavacProcessingEnvironment javacProcessingContext = getJavacProcessingEnvironment(processingEnv);
if (javacProcessingContext == null) {
cx = new TestableContext(new TestableLogger(processingEnv.getMessager()), processingEnv.getFiler());
cx.logger.info("Skip testable compile time processing");
} else {
cx = new TestableContext(new TestableLogger(processingEnv.getMessager()), processingEnv.getFiler(),
processingEnv.getElementUtils(), processingEnv.getTypeUtils(), JavacTrees.instance(processingEnv),
TreeMaker.instance(context), Names.instance(context));
processingEnv.getElementUtils(), processingEnv.getTypeUtils(), JavacTrees.instance(javacProcessingContext),
TreeMaker.instance(javacProcessingContext.getContext()), Names.instance(javacProcessingContext.getContext()));
}
cx.logger.info("Testable processor initialized");
}
@ -67,10 +66,9 @@ public class EnablePrivateAccessProcessor extends AbstractProcessor {
return SourceVersion.values()[SourceVersion.values().length - 1];
}
private Context getJavacProcessingContext(ProcessingEnvironment processingEnv) {
private JavacProcessingEnvironment getJavacProcessingEnvironment(ProcessingEnvironment processingEnv) {
try {
JavacProcessingEnvironment javacProcessingEnv = JavacUtil.getJavacProcessingEnvironment(processingEnv);
return javacProcessingEnv.getContext();
return JavacUtil.getJavacProcessingEnvironment(processingEnv);
} catch (Exception e) {
return null;
}

View File

@ -71,8 +71,20 @@ public class JavacUtil {
}
}
private static Field getField(Class<?> clazz, String field) {
return null;
private static Field getField(Class<?> c, String fName) throws NoSuchFieldException {
Field f = null;
Class<?> oc = c;
while (c != null) {
try {
f = c.getDeclaredField(fName);
break;
} catch (NoSuchFieldException e) {}
c = c.getSuperclass();
}
if (f == null) {
throw new NoSuchFieldException(oc.getName() + " :: " + fName);
}
f.setAccessible(true);
return f;
}
}