[英]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.