我为我的问题尝试了各种组合但没有用。
问题
我正在开发一个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之间的评论。任何帮助/线索将不胜感激。
答案 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。