كيفية الحصول على سياق مترجم جافاك من جافاكتسك?

StackOverflow https://stackoverflow.com//questions/22000339

  •  20-12-2019
  •  | 
  •  

سؤال

بالنظر إلى نموذج برمجة معالجة التعليقات التوضيحية، فمن الراسخ كيفية الحصول على مرجع إلى سياق المترجم من داخل معالج التعليقات التوضيحية بشيء من هذا القبيل:

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:

هذا ليس جزءا من أي واجهة برمجة تطبيقات مدعومة.إذا قمت بكتابة التعليمات البرمجية التي تعتمد على هذا ، يمكنك القيام بذلك على مسؤوليتك الخاصة.هذا الرمز وواجهاته الداخلية عرضة للتغيير أو الحذف دون إشعار.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top