سؤال

وأنا بحاجة للحصول على AST لاختيار الحالية في محرر جافا FO الكسوف. في الأساس أريد أن تحويل رمز جافا مختارة في بعض شكل آخر (ربما بعض اللغات أو XML الخ أخرى ..). لذا أعتقد، ولست بحاجة للحصول على AST لاختيار. حاليا أنا قادرة على الحصول على اختيار كنص بسيط. هل هناك أي طريقة للخروج عن هذه المشكلة؟ بفضل بالفعل !!

هل كانت مفيدة؟

المحلول

وهناك عدد من الأدوات المفيدة للمطورين المساعد JDT، وخصوصا AST عرض التي لا حد كبير ما كنت تبحث عنه. لذلك، كل ما عليك القيام به هو انتزاع رمز AST عرض وتحقق كيف يتم ذلك.

ويمكن تثبيت البرنامج المساعد من موقع التحديث التالي: HTTP: // شبكة الاتصالات العالمية. eclipse.org/jdt/ui/update-site

استخدم الجاسوس المساعد (اقرأ المزيد عن ذلك في <لأ href = "http://zvikico.typepad.com/problog/2008/06/eclipse-34-hidden-treasures.html" يختلط = "نوفولو noreferrer" > هذه المقالة ) لبدء الحفر في الطبقات الرأي.

وأنت السفر إلى المناطق الأقل تافهة (وغالبا لا يحملون وثائق) من JDT وتطوير التعليمات البرمجية حفر المهارات سوف تحسن كثيرا من أدائك.

نصائح أخرى

والتعليمات البرمجية التالية يتيح لك عقدة AST من قانون الحالي المحدد من CompilationUnitEditor.

        ITextEditor editor = (ITextEditor) HandlerUtil.getActiveEditor(event);
        ITextSelection sel  = (ITextSelection) editor.getSelectionProvider().getSelection();
        ITypeRoot typeRoot = JavaUI.getEditorInputTypeRoot(editor.getEditorInput());
        ICompilationUnit icu = (ICompilationUnit) typeRoot.getAdapter(ICompilationUnit.class);
        CompilationUnit cu = parse(icu);
        NodeFinder finder = new NodeFinder(cu, sel.getOffset(), sel.getLength());
        ASTNode node = finder.getCoveringNode();

ووJavaUI هي نقطة الدخول إلى البرنامج المساعد JDT UI.

استخدم في org.eclipse.jdt.internal.ui.javaeditor.EditorUtility.getActiveEditorJavaInput() الأسلوب. وترجع عنصر جافا تحريرها في محرر نشط الحالي. نوع الإرجاع هو org.eclipse.jdt.core.IJavaElement، ولكن اذا كان ملف جافا التي يجري تحريرها، سيتم org.eclipse.jdt.core.ICompilationUnit نوع وقت التشغيل.

لتحصل على AST، أي، وorg.eclipse.jdt.core.dom.CompilationUnit، يمكنك استخدام التعليمات البرمجية التالية:

public static CompilationUnit getCompilationUnit(ICompilationUnit icu,
        IProgressMonitor monitor) {
    final ASTParser parser = ASTParser.newParser(AST.JLS3);
    parser.setSource(icu);
    parser.setResolveBindings(true);
    final CompilationUnit ret = (CompilationUnit) parser.createAST(monitor);
    return ret;
}

ونضع في اعتبارنا أن هذا هو لجاوا> = 5. للحصول على الإصدارات السابقة ستحتاج لتبديل حجة لASTParser.newParser().

وأنا أدرك أن هذه المسألة كانت الاجابه ولكن أردت أن تسليط الضوء على الطبقة EditorUtility، وهو أمر مفيد جدا هنا.

وIIRC، كل عقدة في الكسوف AST تحتوي على تعويض. كل ما عليك القيام به هو لحساب التعويضات بالنسبة للجزء من الشفرة التي ترغب في ذلك السير على AST لتحديد العقد ضمن تلك التعويضات.

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