2015-07-27 3 views
0

Я пробовал различные комбинации для своей проблемы, но бесполезно.Программно получить java-предложения для пакета eclipse

Проблема

Я разрабатываю один затмение OSGi пакет для автоматической коррекции исходного кода Java. Я могу получить объект проекта Java и объект класса внутри него, который я хочу исправить. Каждый раз, когда я пытаюсь собрать предложения коды Java, как я ставлю один тестовый файл, который можно исправить (например, импорт дублирующего)

Я всегда получаю ошибки, подобные ниже

java.lang.NullPointerException 
    at org.eclipse.jdt.internal.ui.JavaPlugin.getImageDescriptorRegistry(JavaPlugin.java:335) 
    at org.eclipse.jdt.ui.text.java.CompletionProposalCollector.<init>(CompletionProposalCollector.java:103) 
    at org.eclipse.jdt.ui.text.java.CompletionProposalCollector.<init>(CompletionProposalCollector.java:157) 

Пожалуйста, скажи мне, что я делаю неправильно , Вот мой фрагмент кода:

.... 
CompletionProposalCollector collectorPrjTemp= new CompletionProposalCollector(javaProject); // this line throws error 
IJavaCompletionProposal[] prjProposals = collectorPrjTemp.getJavaCompletionProposals(); 
System.out.println("prjProposals == "+prjProposals.length); 
.... 

Редактировать 28-Июл

Теперь, когда я включил зависимость org.eclipse.jdt.ui выше NullPointer ошибка уходит. Но теперь получение ниже ошибки

! ENTRY org.eclipse.jdt.ui 4 2 2015-07-28 13: 07: 37.926 ! СООБЩЕНИЕ Проблемы возникают при вызове кода из подключаемого модуля: «org.eclipse.jdt. уй». ! СТЕК 0

java.lang.IllegalStateException: Workbench has not been created yet. 
    at org.eclipse.ui.PlatformUI.getWorkbench(PlatformUI.java:93) 
    at org.eclipse.jdt.internal.ui.javaeditor.ASTProvider.install(ASTProvider.java:236) 
    at org.eclipse.jdt.internal.ui.javaeditor.ASTProvider.<init>(ASTProvider.java:227) 
    at org.eclipse.jdt.internal.ui.JavaPlugin.getASTProvider(JavaPlugin.java:741) 
    at org.eclipse.jdt.ui.SharedASTProvider.getAST(SharedASTProvider.java:128) 
    at org.eclipse.jdt.internal.ui.text.correction.AssistContext.getASTRoot(AssistContext.java:119) 
    at org.eclipse.jdt.internal.ui.text.correction.ReorgCorrectionsSubProcessor.removeImportStatementProposals(ReorgCorrectionsSubProcessor.java:210) 
    at org.eclipse.jdt.internal.ui.text.correction.QuickFixProcessor.process(QuickFixProcessor.java:337) 
    at org.eclipse.jdt.internal.ui.text.correction.QuickFixProcessor.getCorrections(QuickFixProcessor.java:316) 
    at org.eclipse.jdt.internal.ui.text.correction.JavaCorrectionProcessor$SafeCorrectionCollector.safeRun(JavaCorrectionProcessor.java:378) 
    at org.eclipse.jdt.internal.ui.text.correction.JavaCorrectionProcessor$SafeCorrectionProcessorAccess.run(JavaCorrectionProcessor.java:339) 
    at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) 
    at org.eclipse.jdt.internal.ui.text.correction.JavaCorrectionProcessor$SafeCorrectionProcessorAccess.process(JavaCorrectionProcessor.java:335) 
    at org.eclipse.jdt.internal.ui.text.correction.JavaCorrectionProcessor.collectCorrections(JavaCorrectionProcessor.java:468) 

Обновление - 29-Июль

Теперь я пытаюсь создать объект верстак с помощью команды

WorkbenchAdvisor advisor=new WorkbenchAdvisor(){ 
     public String getInitialWindowPerspectiveId(){ 
      return "org.eclipse.rap.junit.runtime.emptyPerspective"; 
     } 
     }; 
    //Display display = Display.getCurrent(); // did not worked, gives null 
    //Display display = Display.getDefault(); // did not worked, gives null 
    Display display = PlatformUI.getDisplay(); // did not worked, gives null 
    PlatformUI.createAndRunWorkbench(display, advisor); 

Когда я попытался ниже код

Display display = new Display(); 

после этого получилось ниже ошибки:

No context available outside of the request processing 

Пожалуйста, прочитайте комментарии между собой и greg для моих попыток. Любая помощь/подсказка будет оценена по достоинству.

+0

Вы используете это в плагине Eclipse, работающем в Eclipse? Похоже, что JavaPlugin не был запущен, что произойдет, если вы попытаетесь использовать его вне Eclipse. –

+0

Я запускаю это внутреннее затмение.GetProject ("Sample"); ", мне нужно что-то делать для JavaPlugin – shaILU

+0

Привет greg-449, Еще вопрос от вас помогает меня, я сейчас на шаг впереди. На самом деле мне нужно добавить плагин jdt.ui в качестве необходимого плагина, чтобы получить информацию из этого места (http://www.eclipse.org/forums/index.php/t/67141/). И теперь я попал в новую ошибку: «Workbench еще не создан. Java.lang.IllegalStateException: Workbench еще не создан». Теперь изучаем это. Пожалуйста, дайте мне знать, есть ли у вас какой-либо указатель. – shaILU

ответ

0

Мне нужно создать один обработчик, откуда я получаю объект ExecutionEvent, а затем запускаю поток из этой точки и получаю объект Workbench, ResourcePlugin, Workspace и Project/JavaProject.

И наконец я могу получить предложения, которые мне нужны. Поэтому, если вам нужен объект workbench, вам нужен пользовательский интерфейс.

0

Чтобы проверить плагин Eclipse, вы используете «Запуск как> Приложение Eclipse».

Для плагина это запустит новый экземпляр Eclipse с новым рабочим пространством (которое сначала будет пустым). Вам нужно будет создать тестовые проекты в этом рабочем пространстве для работы.

В меню «Run> Run Configurations» вы увидите местоположение тестовой рабочей области в записи конфигурации для вашего приложения.

+0

:(Еще одна ошибка. Что я делаю - Запуск моего проекта Hello, в котором есть код для ссылки на тот же или другой проект, в котором есть один Test.java, для которого мне нужны Java-предложения. Теперь, если я запускаю как Eclipse Appl то мне нужен объект workbench и программно добавить проект Hello, но теперь получаем ошибку как «java.lang.IllegalArgumentException: Path должен включать имя проекта и ресурса» при попытке загрузить проект как «project = workspace.getRoot(). getFolder (Path.fromOSString ("/ Hello")). GetProject(); " – shaILU

+0

' getFolder' должно иметь наименьшее имя проекта и имя папки. Просто используйте 'project = workspace.getRoot(). GetProject (" Hello ")' если вы хотите, чтобы проект назывался «Hello» –

+0

ok, теперь программа говорит, что Project загружен, но когда я печатаю весь список проектов из рабочей области, он печатает только 1 как «RemoteSystemsTempFiles». В основном мой проект Hello недоступен через рабочую область. Я запускаю его как продукт Eclipse Appl, который открывает новый экземпляр eclipse. – shaILU

Смежные вопросы