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

View File

@ -71,8 +71,20 @@ public class JavacUtil {
} }
} }
private static Field getField(Class<?> clazz, String field) { private static Field getField(Class<?> c, String fName) throws NoSuchFieldException {
return null; 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;
} }
} }