Невозможно включить средства Eclispe JDT codeAssist вне подключаемого модуля - PullRequest
3 голосов
/ 26 апреля 2010

Используя средства Eclipse jdt, вы можете пройти AST фрагментов кода Java следующим образом:

ASTParser ASTparser = ASTParser.newParser(AST.JLS3);
ASTparser.setSource("package x;class X{}".toCharArray());
ASTparser.createAST(null).accept(...);

Но при попытке выполнить полный код и выбрать код кажется, что я должен сделать это в подключаемом приложении, так как мне приходится писать коды вроде

IFile file = ResourcesPlugin.getWorkspace().getRoot().getFile(new Path(somePath));
ICodeAssist i  = JavaCore.createCompilationUnitFrom(f);
i.codeComplete/codeSelect(...)

В любом случае, смогу ли я наконец получить отдельное Java-приложение, которое включает в себя средства jdt code complete / select?

большое спасибо! Ши Куй


Я заметил, что с помощью org.eclipse.jdt.internal.codeassist.complete.CompletionParser Я также могу разобрать фрагмент кода.

CompletionParser parser =new CompletionParser(new ProblemReporter(
        DefaultErrorHandlingPolicies.proceedWithAllProblems(),
        new CompilerOptions(null),
        new DefaultProblemFactory(Locale.getDefault())),
        false);
org.eclipse.jdt.internal.compiler.batch.CompilationUnit sourceUnit =
new org.eclipse.jdt.internal.compiler.batch.CompilationUnit(
    "class T{f(){new T().=1;}  \nint j;}".toCharArray(), "testName", null);
CompilationResult compilationResult = new CompilationResult(sourceUnit, 0, 0, 0);
CompilationUnitDeclaration unit = parser.dietParse(sourceUnit, compilationResult, 25);

Но у меня есть 2 вопроса: 1. Как получить вспомогательную информацию? 2. Как я могу указать путь к классу или исходный путь для компилятора для поиска информации о типе / методе / поле?

1 Ответ

1 голос
/ 26 апреля 2010

Я так не думаю, если вы не предоставите собственную реализацию ICodeAssist.

Как отмечает Выполнение кода в коде Java , элементы, разрешающие эту манипуляцию, должны реализовывать ICodeAssist.

Существует два вида манипуляций:

  • Завершение кода - вычисление завершения токена Java.
  • Выбор кода - ответ на элемент Java, указанный выделенным текстом с заданным смещением и длиной.

В модели Java есть два элемента, которые реализуют этот интерфейс: IClassFile и ICompilationUnit.
Завершение кода и выбор кода отвечают только на результаты для файла класса, если к нему прикреплен источник.

Вы можете попробовать открыть файл вне любого рабочего пространства (например, в этом FAQ ), но результат не будет реализован ICodeAssist.

Таким образом, IFile большую часть времени приходит из рабочей области .

...