كيفية الحصول على سياق مترجم جافاك من جافاكتسك?
سؤال
بالنظر إلى نموذج برمجة معالجة التعليقات التوضيحية، فمن الراسخ كيفية الحصول على مرجع إلى سياق المترجم من داخل معالج التعليقات التوضيحية بشيء من هذا القبيل:
context = ((JavacProcessingEnvironment) this.processingEnv).getContext();
يمكن استخدام سياق المترجم هذا عند الحاجة إلى مرجع لمرفق مترجم داخلي مثل Attr
, Enter
, MemberEnter
, TreeMaker
, ، إلخ.عبر استدعاء طريقة مثيل:
make = TreeMaker.instance(context);
ومع ذلك ، وذلك باستخدام جافا 8 آلية البرنامج المساعد, ، كيف يمكن للمرء أن يشير com.sun.tools.javac.util.Context
حالات?الوثائق تنص على:
داخل المترجم ، يتم استخدام سياق واحد لكل استدعاء المترجم.ثم يتم استخدام السياق لضمان نسخة واحدة من توجد كل مرحلة مترجم لكل استدعاء مترجم.
حتى داخل البرنامج المساعد ، في حين يتم تمرير إشارة إلى جافاكتسك (باسيكجافاكتسك فعال) ، كيف يمكن استرداد كائن السياق من المرحلة مترجم الحالية?
المحلول
الاتصال getContext()
لن تعمل مع جافا 8 مترجم البرنامج المساعد الآلية:
((JavacTaskImpl) task).getContext()
على سبيل المثال:
import com.sun.tools.javac.api.JavacTaskImpl;
import com.sun.tools.javac.util.Context;
import com.sun.tools.javac.main.JavaCompiler;
// ...
JavacTask javacTask = getJavacTask();
Context context = ((JavacTaskImpl)javacTask).getContext();
JavaCompiler compiler = JavaCompiler.instance( context );
لاحظ ، مع ذلك ، أن com.sun.tools.javac.main.JavaCompiler
لا تنفذ javax.tools.JavaCompiler
واجهة المستخدم ، وبالتالي فإن واجهة برمجة التطبيقات الخاصة بها غير متوفرة باستخدام هذه التقنية.علاوة على ذلك ، انتبه للتحذير من JavacTaskImpl
و com.sun.tools.javac.main.JavaCompiler
:
هذا ليس جزءا من أي واجهة برمجة تطبيقات مدعومة.إذا قمت بكتابة التعليمات البرمجية التي تعتمد على هذا ، يمكنك القيام بذلك على مسؤوليتك الخاصة.هذا الرمز وواجهاته الداخلية عرضة للتغيير أو الحذف دون إشعار.