以编程方式获取eclipse bundle的java提议

时间:2015-07-27 07:15:22

标签: java nullpointerexception eclipse-plugin

我为我的问题尝试了各种组合但没有用。

问题

我正在开发一个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);
....

编辑于7月28日

现在,当我将org.eclipse.jdt.ui的依赖包含在NullPointer之上时,错误消失了。但现在收到以下错误

!ENTRY org.eclipse.jdt.ui 4 2 2015-07-28 13:07:37.926 !MESSAGE从插件调用代码时出现问题:“org.eclipse.jdt.ui”。 !STACK 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)

更新 - 7月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之间的评论。任何帮助/线索将不胜感激。

2 个答案:

答案 0 :(得分:0)

要测试Eclipse插件,请使用&#39; Run As&gt; Eclipse Application&#39;。

对于插件,这将启动一个带有新工作空间的Eclipse新实例(最初将为空)。您必须在此工作空间中创建测试项目才能使用。

&#39;运行&gt;运行配置&#39;菜单将显示测试工作区在应用程序配置条目中的位置。

答案 1 :(得分:0)

我需要创建一个处理程序,从中获取ExecutionEvent Object,然后从该点触发流程并获取Workbench,ResourcePlugin,Workspace和Project / JavaProject的对象。

最后我能得到我需要的建议。因此,如果您需要workbench对象,则需要UI。