Java Eclipse插件开发-处理多个文件,将multigeeditor标记为脏抛出异常
我正在编写eclipse插件。我有一个多页面编辑器,里面有5页。在第一页上有一个扩展GraphicalEditor(geEx)的编辑器,在第二页上有2个(logicInputEditor,logicOutputEditor)GroovyEditor的org.codehaus.groovy.eclipse.editor.GroovyEditor)。geEx正在使用一个文件(例如first.qwe)和 LogicEditor正在处理另外两个文件(in.groovy、out.groovy)。在里面 哎呀,有一个代码:Java Eclipse插件开发-处理多个文件,将multigeeditor标记为脏抛出异常,java,exception,eclipse-plugin,Java,Exception,Eclipse Plugin,我正在编写eclipse插件。我有一个多页面编辑器,里面有5页。在第一页上有一个扩展GraphicalEditor(geEx)的编辑器,在第二页上有2个(logicInputEditor,logicOutputEditor)GroovyEditor的org.codehaus.groovy.eclipse.editor.GroovyEditor)。geEx正在使用一个文件(例如first.qwe)和 LogicEditor正在处理另外两个文件(in.groovy、out.groovy)。在里面 哎
@Override
public void commandStackChanged(EventObject event) {
firePropertyChange(IEditorPart.PROP_DIRTY);
super.commandStackChanged(event);
}
当我编辑file first.qwe MultiPageEditor时,我们知道有些东西
已修改并标记它并允许保存文件-一切正常
好的
我将侦听器添加到GrooveEditor:
logicInputEditor.addPropertyListener(new IPropertyListener() {
@Override
public void propertyChanged(Object source, int propId) {
if (propId == IEditorPart.PROP_DIRTY){
firePropertyChange(IEditorPart.PROP_DIRTY);
}
}
});
我不能重写commandStackChanged函数,因为GrooveEditor没有实现CommandStackListener
每次我在其中一个GroovyEditor中编辑某个内容时,MultiPageEditor都会将其状态更改为dirty—这正是我想要的,但控制台上也会打印异常。所以-它可以按我所希望的方式工作,但每次用户在编辑器中键入内容时抛出和捕获异常都很慢,而且通常很糟糕
信息是:
Problem trying to determine classpath of project Test:
Java Model Exception: Java Model Status [Test does not exist]
at org.eclipse.jdt.internal.core.JavaElement.newNotPresentException(JavaElement.java:495)
at org.eclipse.jdt.internal.core.JavaModelManager.getPerProjectInfoCheckExistence(JavaModelManager.java:2287)
at org.eclipse.jdt.internal.core.JavaProject.getPerProjectInfo(JavaProject.java:1914)
at org.eclipse.jdt.internal.core.JavaProject.getOutputLocation(JavaProject.java:1741)
at org.eclipse.jdt.core.util.CompilerUtils.calculateClasspath(CompilerUtils.java:209)
at org.eclipse.jdt.core.util.CompilerUtils.setGroovyClasspath(CompilerUtils.java:152)
at org.eclipse.jdt.core.util.CompilerUtils.setGroovyClasspath(CompilerUtils.java:117)
at org.codehaus.jdt.groovy.model.GroovyCompilationUnit.buildStructure(GroovyCompilationUnit.java:260)
at org.eclipse.jdt.internal.core.Openable.generateInfos(Openable.java:258)
at org.eclipse.jdt.internal.core.JavaElement.openWhenClosed(JavaElement.java:526)
at org.eclipse.jdt.internal.core.CompilationUnit.makeConsistent(CompilationUnit.java:1100)
at org.codehaus.jdt.groovy.model.GroovyReconcileWorkingCopyOperation.makeConsistent(GroovyReconcileWorkingCopyOperation.java:60)
at org.eclipse.jdt.internal.core.ReconcileWorkingCopyOperation.executeOperation(ReconcileWorkingCopyOperation.java:89)
at org.eclipse.jdt.internal.core.JavaModelOperation.run(JavaModelOperation.java:728)
at org.eclipse.jdt.internal.core.JavaModelOperation.runOperation(JavaModelOperation.java:788)
at org.codehaus.jdt.groovy.model.GroovyCompilationUnit.reconcile(GroovyCompilationUnit.java:423)
at org.eclipse.jdt.internal.core.CompilationUnit.reconcile(CompilationUnit.java:1231)
at org.eclipse.jdt.internal.ui.text.java.JavaReconcilingStrategy.reconcile(JavaReconcilingStrategy.java:133)
at org.eclipse.jdt.internal.ui.text.java.JavaReconcilingStrategy.access$0(JavaReconcilingStrategy.java:108)
at org.eclipse.jdt.internal.ui.text.java.JavaReconcilingStrategy$1.run(JavaReconcilingStrategy.java:89)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
at org.eclipse.jdt.internal.ui.text.java.JavaReconcilingStrategy.reconcile(JavaReconcilingStrategy.java:87)
at org.eclipse.jdt.internal.ui.text.java.JavaReconcilingStrategy.reconcile(JavaReconcilingStrategy.java:151)
at org.eclipse.jdt.internal.ui.text.CompositeReconcilingStrategy.reconcile(CompositeReconcilingStrategy.java:86)
at org.eclipse.jdt.internal.ui.text.JavaCompositeReconcilingStrategy.reconcile(JavaCompositeReconcilingStrategy.java:104)
at org.eclipse.jface.text.reconciler.MonoReconciler.process(MonoReconciler.java:77)
at org.eclipse.jface.text.reconciler.AbstractReconciler$BackgroundThread.run(AbstractReconciler.java:206)
或:
!条目org.eclipse.jdt.core 4 4 2012-08-13 20:33:29.402
!in.groovy的生成结构存在消息问题
!堆栈1
Java模型异常:Java模型状态[测试不存在]
位于org.eclipse.jdt.internal.core.JavaElement.newJavaModelException(JavaElement.java:505)
位于org.eclipse.jdt.internal.core.Openable.generateInfo(Openable.java:246)
位于org.eclipse.jdt.internal.core.JavaElement.openWhenClosed(JavaElement.java:526)
位于org.eclipse.jdt.internal.core.JavaElement.getElementInfo(JavaElement.java:255)
位于org.eclipse.jdt.internal.core.JavaElement.getElementInfo(JavaElement.java:241)
位于org.eclipse.jdt.internal.core.JavaProject.getJavaProjectElementInfo(JavaProject.java:1646)
位于org.eclipse.jdt.internal.core.JavaProject.newNameLookup(JavaProject.java:2334)
位于org.eclipse.jdt.internal.core.SearchableEnvironment(SearchableEnvironment.java:59)
位于org.eclipse.jdt.internal.core.SearchableEnvironment(SearchableEnvironment.java:66)
位于org.eclipse.jdt.internal.core.CancelableNameEnvironment。(CancelableNameEnvironment.java:26)
位于org.eclipse.jdt.internal.core.CompilationUnitProblemFinder.process(CompilationUnitProblemFinder.java:178)
位于org.codehaus.jdt.groovy.model.GroovyCompilationUnit.buildStructure(GroovyCompilationUnit.java:338)
位于org.eclipse.jdt.internal.core.Openable.generateInfo(Openable.java:258)
位于org.eclipse.jdt.internal.core.JavaElement.openWhenClosed(JavaElement.java:526)
位于org.eclipse.jdt.internal.core.CompilationUnit.makeConsistent(CompilationUnit.java:1100)
位于org.codehaus.jdt.groovy.model.GroovyReconcileWorkingCopyOperation.makeConsistent(GroovyReconcileWorkingCopyOperation.java:60)
位于org.eclipse.jdt.internal.core.ReconcileWorkingCopyOperation.executeOperation(ReconcileWorkingCopyOperation.java:89)
位于org.eclipse.jdt.internal.core.JavaModelOperation.run(JavaModelOperation.java:728)
位于org.eclipse.jdt.internal.core.JavaModelOperation.runOperation(JavaModelOperation.java:788)
位于org.codehaus.jdt.groovy.model.GroovyCompilationUnit.confidence(GroovyCompilationUnit.java:423)
位于org.eclipse.jdt.internal.core.CompilationUnit.confidence(CompilationUnit.java:1231)
位于org.eclipse.jdt.internal.ui.text.java.JavaReconcilingStrategy.reconcile(JavaReconcilingStrategy.java:133)
在org.eclipse.jdt.internal.ui.text.java.JavaReconcilingStrategy.access$0(JavaReconcilingStrategy.java:108)
位于org.eclipse.jdt.internal.ui.text.java.JavaReconcilingStrategy$1.run(JavaReconcilingStrategy.java:89)
位于org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
在org.eclipse.jdt.internal.ui.text.java.JavaReconcilingStrategy.reconcile上(JavaReconcilingStrategy.java:87)
在org.eclipse.jdt.internal.ui.text.java.JavaReconcilingStrategy.reconcile(JavaReconcilingStrategy.java:151)上
在org.eclipse.jdt.internal.ui.text.CompositeReconcilingStrategy.conference(CompositeReconcilingStrategy.java:86)上
位于org.eclipse.jdt.internal.ui.text.JavaCompositeReconcilingStrategy.conference(JavaCompositeReconcilingStrategy.java:104)
位于org.eclipse.jface.text.reconciler.monoconneciler.process(monoconciler.java:77)
位于org.eclipse.jface.text.reconciler.AbstractReconciler$BackgroundThread.run(AbstractReconciler.java:206)
!子条目1 org.eclipse.jdt.core 4 969 2012-08-13 20:33:29.402
!消息测试不存在
问题是-我如何解决这个问题?我应该如何向MultiPageEditor发送“消息”,其中一个GroovyEditor是“脏的”?最终解决了-问题不在我的代码中,而是在GroovyEditor中-如果项目性质是Java项目性质(可能Groovy项目性质也会起作用),那么一切都很好,否则GroovyEditor会抛出异常。我已经向Groove编辑器问题跟踪器报告了这个bug,它已经被解决了,所以在下一个版本中,一切都应该是好的。现在唯一的解决方案是将java项目性质添加到项目的性质中
!ENTRY org.eclipse.jdt.core 4 4 2012-08-13 20:33:29.402
!MESSAGE Problem with build structure for in.groovy
!STACK 1
Java Model Exception: Java Model Status [Test does not exist]
at org.eclipse.jdt.internal.core.JavaElement.newJavaModelException(JavaElement.java:505)
at org.eclipse.jdt.internal.core.Openable.generateInfos(Openable.java:246)
at org.eclipse.jdt.internal.core.JavaElement.openWhenClosed(JavaElement.java:526)
at org.eclipse.jdt.internal.core.JavaElement.getElementInfo(JavaElement.java:255)
at org.eclipse.jdt.internal.core.JavaElement.getElementInfo(JavaElement.java:241)
at org.eclipse.jdt.internal.core.JavaProject.getJavaProjectElementInfo(JavaProject.java:1646)
at org.eclipse.jdt.internal.core.JavaProject.newNameLookup(JavaProject.java:2334)
at org.eclipse.jdt.internal.core.SearchableEnvironment.<init>(SearchableEnvironment.java:59)
at org.eclipse.jdt.internal.core.SearchableEnvironment.<init>(SearchableEnvironment.java:66)
at org.eclipse.jdt.internal.core.CancelableNameEnvironment.<init>(CancelableNameEnvironment.java:26)
at org.eclipse.jdt.internal.core.CompilationUnitProblemFinder.process(CompilationUnitProblemFinder.java:178)
at org.codehaus.jdt.groovy.model.GroovyCompilationUnit.buildStructure(GroovyCompilationUnit.java:338)
at org.eclipse.jdt.internal.core.Openable.generateInfos(Openable.java:258)
at org.eclipse.jdt.internal.core.JavaElement.openWhenClosed(JavaElement.java:526)
at org.eclipse.jdt.internal.core.CompilationUnit.makeConsistent(CompilationUnit.java:1100)
at org.codehaus.jdt.groovy.model.GroovyReconcileWorkingCopyOperation.makeConsistent(GroovyReconcileWorkingCopyOperation.java:60)
at org.eclipse.jdt.internal.core.ReconcileWorkingCopyOperation.executeOperation(ReconcileWorkingCopyOperation.java:89)
at org.eclipse.jdt.internal.core.JavaModelOperation.run(JavaModelOperation.java:728)
at org.eclipse.jdt.internal.core.JavaModelOperation.runOperation(JavaModelOperation.java:788)
at org.codehaus.jdt.groovy.model.GroovyCompilationUnit.reconcile(GroovyCompilationUnit.java:423)
at org.eclipse.jdt.internal.core.CompilationUnit.reconcile(CompilationUnit.java:1231)
at org.eclipse.jdt.internal.ui.text.java.JavaReconcilingStrategy.reconcile(JavaReconcilingStrategy.java:133)
at org.eclipse.jdt.internal.ui.text.java.JavaReconcilingStrategy.access$0(JavaReconcilingStrategy.java:108)
at org.eclipse.jdt.internal.ui.text.java.JavaReconcilingStrategy$1.run(JavaReconcilingStrategy.java:89)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
at org.eclipse.jdt.internal.ui.text.java.JavaReconcilingStrategy.reconcile(JavaReconcilingStrategy.java:87)
at org.eclipse.jdt.internal.ui.text.java.JavaReconcilingStrategy.reconcile(JavaReconcilingStrategy.java:151)
at org.eclipse.jdt.internal.ui.text.CompositeReconcilingStrategy.reconcile(CompositeReconcilingStrategy.java:86)
at org.eclipse.jdt.internal.ui.text.JavaCompositeReconcilingStrategy.reconcile(JavaCompositeReconcilingStrategy.java:104)
at org.eclipse.jface.text.reconciler.MonoReconciler.process(MonoReconciler.java:77)
at org.eclipse.jface.text.reconciler.AbstractReconciler$BackgroundThread.run(AbstractReconciler.java:206)
!SUBENTRY 1 org.eclipse.jdt.core 4 969 2012-08-13 20:33:29.402
!MESSAGE Test does not exist