繁体   English   中英

以编程方式获取Eclipse捆绑包的Java建议

[英]Programmatically get java proposals for eclipse bundle

我尝试了各种组合来解决问题,但没有用。

问题

我正在开发一个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”。 !堆栈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之间的评论以供我尝试。 任何帮助/线索将不胜感激。

要测试Eclipse插件,请使用“运行方式> Eclipse应用程序”。

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

“运行>运行配置”菜单将在您的应用程序的配置条目中显示测试工作区的位置。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM