From 96ea5680df0de49810a28eb0a79b2cb033e3796e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=87=91=E6=88=9F?= Date: Sat, 26 Dec 2020 19:30:35 +0800 Subject: [PATCH] get Javac processing environment for intellij --- .../EnablePrivateAccessProcessor.java | 14 ++++++-------- .../testable/processor/util/JavacUtil.java | 18 +++++++++++++++--- 2 files changed, 21 insertions(+), 11 deletions(-) diff --git a/testable-processor/src/main/java/com/alibaba/testable/processor/EnablePrivateAccessProcessor.java b/testable-processor/src/main/java/com/alibaba/testable/processor/EnablePrivateAccessProcessor.java index becddc8..563b894 100644 --- a/testable-processor/src/main/java/com/alibaba/testable/processor/EnablePrivateAccessProcessor.java +++ b/testable-processor/src/main/java/com/alibaba/testable/processor/EnablePrivateAccessProcessor.java @@ -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; } diff --git a/testable-processor/src/main/java/com/alibaba/testable/processor/util/JavacUtil.java b/testable-processor/src/main/java/com/alibaba/testable/processor/util/JavacUtil.java index 13cf11a..cbd4b03 100644 --- a/testable-processor/src/main/java/com/alibaba/testable/processor/util/JavacUtil.java +++ b/testable-processor/src/main/java/com/alibaba/testable/processor/util/JavacUtil.java @@ -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; } - }