| Summary: | ASCII Art in Javadoc cause hanging Eclipse when formatting | ||
|---|---|---|---|
| Product: | [Eclipse Project] JDT | Reporter: | Andreas Höhmann <andreas.hoehmann> |
| Component: | Core | Assignee: | JDT-Core-Inbox <jdt-core-inbox> |
| Status: | CLOSED DUPLICATE | QA Contact: | |
| Severity: | critical | ||
| Priority: | P3 | CC: | daniel_megert, jarthana, mailings, manoj.palat, markus.kell.r, noopur_gupta |
| Version: | 4.5 | Flags: | manoj.palat:
review+
|
| Target Milestone: | --- | ||
| Hardware: | PC | ||
| OS: | Windows 7 | ||
| See Also: |
https://git.eclipse.org/r/53580 https://bugs.eclipse.org/bugs/show_bug.cgi?id=474916 |
||
| Whiteboard: | |||
If I change the ">" and "<" into "^" ... it works.
/**
* Dieses Plugin ermöglicht das Rücksetzen von {@link com.siemens.spice.datamodel.application.Characteristic Merkmalen} in Abhängigkeit zu
* anderen Merkmalsänderungen.
*
* <p>
* <h3>Workflow</h3>
*
* <pre>
* +--------------+ +--------------+ +--------------+ +--------------+
* | User | |Characteristic| | RDP | | ProductCstic |
* +------+-------+ +------+-------+ +------+-------+ +------+-------+
* | | | |
* | | | |
* | setValue/setValues | beforeAssignValue | |
* +--------------------->|----------------------^| |
* | | | |
* | | beforeClear | |
* | |----------------------^| |
* | | | |
* | | clear (*1) | |
* | |-----------------------------------------------^|
* | | | |
* | | | productCsticChanged |
* | | |^-----------------------|
* | | afterClear (*2) | |
* | |----------------------^| |
* | | | |
* | | setValue[s]/setValue[s]AsString (*3) |
* | |-----------------------------------------------^|
* | | | |
* | | | productCsticChanged |
* | | |^-----------------------|
* | | | |
* | | afterAssignValue (*4) | |
* | |----------------------^| |
* | | | |
* | | | |
* | | | |
* + + + +
* </pre>
* </p>
*
* @author Igor Strasser
* @author Stephan Dorer
* @author Andreas Höhmann
* @since 2.2013.05.0
*/
(In reply to Andreas Höhmann from comment #0) > I have the follwing type javadoc ... > > /** > * Dieses Plugin ermöglicht das Rücksetzen von {@link > com.siemens.spice.datamodel.application.Characteristic Merkmalen} in > Abhängigkeit zu > * anderen Merkmalsänderungen. > * > * <p> > * <h3>Workflow</h3> > * > * <pre> > * +--------------+ +--------------+ +--------------+ > +--------------+ > * | User | |Characteristic| | RDP | | > ProductCstic | > * +------+-------+ +------+-------+ +------+-------+ > +------+-------+ > * | | | > | > * | | | > | > * | setValue/setValues | beforeAssignValue | > | > * +--------------------->|---------------------->| > | > * | | | > | > * | | beforeClear | > | > * | |---------------------->| > | > * | | | > | > * | | clear (*1) | > | > * | > |----------------------------------------------->| > * | | | > | > * | | | > productCsticChanged | > * | | > |<-----------------------| > * | | afterClear (*2) | > | > * | |---------------------->| > | > * | | | > | > * | | setValue[s]/setValue[s]AsString (*3) > | > * | > |----------------------------------------------->| > * | | | > | > * | | | > productCsticChanged | > * | | > |<-----------------------| > * | | | > | > * | | afterAssignValue (*4) | > | > * | |---------------------->| > | > * | | | > | > * | | | > | > * | | | > | > * + + + > + > * </pre> > * </p> > * > * @author Igor Strasser > * @author Stephan Dorer > * @author Andreas Höhmann > * @since 2.2013.05.0 > */ > > If I save the file ... then Eclipse hang ... It can be reproduced in Eclipse 4.5 by trying to format (Ctrl+Shift+F) a file containing a type with given Javadoc. Is this a regression compared to 4.4? The problem is in the HTML_TAG_PATTERN regexp in org.eclipse.jdt.internal.formatter.CommentsPreparator. If we break that regexp down and isolate whitespace handling we find these subpatterns: String h = "[ \\t]"; String v = "[\\r\\n]"; String oneH = h + "+"; String oneV = v + "+"; String anyH = h + "*"; String optAsterisk = "\\*?"; String ws1 = oneH; String ws2 = oneV + anyH + optAsterisk; String ws = "(?:" + ws1 + "|" + ws2 + ")"; String anyWS = ws + "*"; String oneWS = ws + "+"; In other words, there is a backtracking repeating pattern (anyH) inside a backtracking repeating pattern (anyWS), which is poison for regexp engines. Worse, both branches of ws also contain the anyH pattern raising the number of potential paths to be checked further. The fix is to disallow backtracking inside the ws pattern as the patterns containing it already take care of backtracking. So change the following subpatterns to possessive: String oneH = h + "++"; String oneV = v + "++"; String anyH = h + "*+"; Please take a look. Thanks! (In reply to Dani Megert from comment #3) > Is this a regression compared to 4.4? Yes. It works well with Eclipse 4.4.2. *** Bug 474309 has been marked as a duplicate of this bug. *** New Gerrit change created: https://git.eclipse.org/r/53580 (In reply to Timo Kinnunen from comment #4) > The fix is to disallow backtracking inside the ws pattern as the patterns > containing it already take care of backtracking. Thank you for the analysis, Timo. It'd probably take me some time to figure this out :) +1 for 4.5.1 The hudson build failed, the failure looks unrelated, though. (In reply to Jay Arthanareeswaran from comment #11) > The hudson build failed, the failure looks unrelated, though. Bug 474916 takes a more complete approach to the regex problems, so I guess it's a good thing this merge failed. Let's do this via bug 474916. *** This bug has been marked as a duplicate of bug 474916 *** |
I have the follwing type javadoc ... /** * Dieses Plugin ermöglicht das Rücksetzen von {@link com.siemens.spice.datamodel.application.Characteristic Merkmalen} in Abhängigkeit zu * anderen Merkmalsänderungen. * * <p> * <h3>Workflow</h3> * * <pre> * +--------------+ +--------------+ +--------------+ +--------------+ * | User | |Characteristic| | RDP | | ProductCstic | * +------+-------+ +------+-------+ +------+-------+ +------+-------+ * | | | | * | | | | * | setValue/setValues | beforeAssignValue | | * +--------------------->|---------------------->| | * | | | | * | | beforeClear | | * | |---------------------->| | * | | | | * | | clear (*1) | | * | |----------------------------------------------->| * | | | | * | | | productCsticChanged | * | | |<-----------------------| * | | afterClear (*2) | | * | |---------------------->| | * | | | | * | | setValue[s]/setValue[s]AsString (*3) | * | |----------------------------------------------->| * | | | | * | | | productCsticChanged | * | | |<-----------------------| * | | | | * | | afterAssignValue (*4) | | * | |---------------------->| | * | | | | * | | | | * | | | | * + + + + * </pre> * </p> * * @author Igor Strasser * @author Stephan Dorer * @author Andreas Höhmann * @since 2.2013.05.0 */ If I save the file ... then Eclipse hang ... "main" #1 prio=6 os_prio=0 tid=0x00000000003be800 nid=0x15b8 runnable [0x00000000022b9000] java.lang.Thread.State: RUNNABLE at java.util.regex.Pattern$BmpCharProperty.match(Pattern.java:3797) at java.util.regex.Pattern$Curly.match(Pattern.java:4227) at java.util.regex.Pattern$Branch.match(Pattern.java:4604) at java.util.regex.Pattern$GroupHead.match(Pattern.java:4658) at java.util.regex.Pattern$Loop.match(Pattern.java:4785) at java.util.regex.Pattern$GroupTail.match(Pattern.java:4717) at java.util.regex.Pattern$BranchConn.match(Pattern.java:4568) at java.util.regex.Pattern$Curly.match0(Pattern.java:4279) at java.util.regex.Pattern$Curly.match(Pattern.java:4234) at java.util.regex.Pattern$Branch.match(Pattern.java:4604) at java.util.regex.Pattern$GroupHead.match(Pattern.java:4658) at java.util.regex.Pattern$Loop.match(Pattern.java:4785) at java.util.regex.Pattern$GroupTail.match(Pattern.java:4717) at java.util.regex.Pattern$BranchConn.match(Pattern.java:4568) at java.util.regex.Pattern$Curly.match0(Pattern.java:4272) at java.util.regex.Pattern$Curly.match(Pattern.java:4234) at java.util.regex.Pattern$Branch.match(Pattern.java:4604) at java.util.regex.Pattern$GroupHead.match(Pattern.java:4658) at java.util.regex.Pattern$Loop.match(Pattern.java:4785) at java.util.regex.Pattern$GroupTail.match(Pattern.java:4717) at java.util.regex.Pattern$BranchConn.match(Pattern.java:4568) at java.util.regex.Pattern$Curly.match0(Pattern.java:4272) at java.util.regex.Pattern$Curly.match(Pattern.java:4234) at java.util.regex.Pattern$Branch.match(Pattern.java:4604) at java.util.regex.Pattern$GroupHead.match(Pattern.java:4658) at java.util.regex.Pattern$Loop.match(Pattern.java:4785) at java.util.regex.Pattern$GroupTail.match(Pattern.java:4717) at java.util.regex.Pattern$BranchConn.match(Pattern.java:4568) at java.util.regex.Pattern$Curly.match0(Pattern.java:4272) at java.util.regex.Pattern$Curly.match(Pattern.java:4234) at java.util.regex.Pattern$Branch.match(Pattern.java:4604) at java.util.regex.Pattern$GroupHead.match(Pattern.java:4658) at java.util.regex.Pattern$Loop.match(Pattern.java:4785) at java.util.regex.Pattern$GroupTail.match(Pattern.java:4717) at java.util.regex.Pattern$BranchConn.match(Pattern.java:4568) at java.util.regex.Pattern$Curly.match0(Pattern.java:4272) at java.util.regex.Pattern$Curly.match(Pattern.java:4234) at java.util.regex.Pattern$Branch.match(Pattern.java:4604) at java.util.regex.Pattern$GroupHead.match(Pattern.java:4658) at java.util.regex.Pattern$Loop.match(Pattern.java:4785) at java.util.regex.Pattern$GroupTail.match(Pattern.java:4717) at java.util.regex.Pattern$BranchConn.match(Pattern.java:4568) at java.util.regex.Pattern$Curly.match0(Pattern.java:4272) at java.util.regex.Pattern$Curly.match(Pattern.java:4234) at java.util.regex.Pattern$Branch.match(Pattern.java:4604) at java.util.regex.Pattern$GroupHead.match(Pattern.java:4658) at java.util.regex.Pattern$Loop.match(Pattern.java:4785) at java.util.regex.Pattern$GroupTail.match(Pattern.java:4717) at java.util.regex.Pattern$BranchConn.match(Pattern.java:4568) at java.util.regex.Pattern$Curly.match0(Pattern.java:4272) at java.util.regex.Pattern$Curly.match(Pattern.java:4234) at java.util.regex.Pattern$Branch.match(Pattern.java:4604) at java.util.regex.Pattern$GroupHead.match(Pattern.java:4658) at java.util.regex.Pattern$Loop.match(Pattern.java:4785) at java.util.regex.Pattern$GroupTail.match(Pattern.java:4717) at java.util.regex.Pattern$BranchConn.match(Pattern.java:4568) at java.util.regex.Pattern$Curly.match0(Pattern.java:4272) at java.util.regex.Pattern$Curly.match(Pattern.java:4234) at java.util.regex.Pattern$Branch.match(Pattern.java:4604) at java.util.regex.Pattern$GroupHead.match(Pattern.java:4658) at java.util.regex.Pattern$Loop.match(Pattern.java:4785) at java.util.regex.Pattern$GroupTail.match(Pattern.java:4717) at java.util.regex.Pattern$BranchConn.match(Pattern.java:4568) at java.util.regex.Pattern$Curly.match0(Pattern.java:4272) at java.util.regex.Pattern$Curly.match(Pattern.java:4234) at java.util.regex.Pattern$Branch.match(Pattern.java:4604) at java.util.regex.Pattern$GroupHead.match(Pattern.java:4658) at java.util.regex.Pattern$Loop.matchInit(Pattern.java:4804) at java.util.regex.Pattern$Prolog.match(Pattern.java:4741) at java.util.regex.Pattern$Curly.match0(Pattern.java:4279) at java.util.regex.Pattern$Curly.match(Pattern.java:4234) at java.util.regex.Pattern$Loop.match(Pattern.java:4794) at java.util.regex.Pattern$GroupTail.match(Pattern.java:4717) at java.util.regex.Pattern$BranchConn.match(Pattern.java:4568) at java.util.regex.Pattern$Curly.match0(Pattern.java:4272) at java.util.regex.Pattern$Curly.match(Pattern.java:4234) at java.util.regex.Pattern$Branch.match(Pattern.java:4604) at java.util.regex.Pattern$GroupHead.match(Pattern.java:4658) at java.util.regex.Pattern$Loop.match(Pattern.java:4785) at java.util.regex.Pattern$GroupTail.match(Pattern.java:4717) at java.util.regex.Pattern$BranchConn.match(Pattern.java:4568) at java.util.regex.Pattern$Curly.match0(Pattern.java:4272) at java.util.regex.Pattern$Curly.match(Pattern.java:4234) at java.util.regex.Pattern$Branch.match(Pattern.java:4604) at java.util.regex.Pattern$GroupHead.match(Pattern.java:4658) at java.util.regex.Pattern$Loop.match(Pattern.java:4785) at java.util.regex.Pattern$GroupTail.match(Pattern.java:4717) at java.util.regex.Pattern$BranchConn.match(Pattern.java:4568) at java.util.regex.Pattern$Curly.match0(Pattern.java:4272) at java.util.regex.Pattern$Curly.match(Pattern.java:4234) at java.util.regex.Pattern$Branch.match(Pattern.java:4604) at java.util.regex.Pattern$GroupHead.match(Pattern.java:4658) at java.util.regex.Pattern$Loop.match(Pattern.java:4785) at java.util.regex.Pattern$GroupTail.match(Pattern.java:4717) at java.util.regex.Pattern$BranchConn.match(Pattern.java:4568) at java.util.regex.Pattern$Curly.match0(Pattern.java:4272) at java.util.regex.Pattern$Curly.match(Pattern.java:4234) at java.util.regex.Pattern$Branch.match(Pattern.java:4604) at java.util.regex.Pattern$GroupHead.match(Pattern.java:4658) at java.util.regex.Pattern$Loop.match(Pattern.java:4785) at java.util.regex.Pattern$GroupTail.match(Pattern.java:4717) at java.util.regex.Pattern$BranchConn.match(Pattern.java:4568) at java.util.regex.Pattern$Curly.match0(Pattern.java:4272) at java.util.regex.Pattern$Curly.match(Pattern.java:4234) at java.util.regex.Pattern$Branch.match(Pattern.java:4604) at java.util.regex.Pattern$GroupHead.match(Pattern.java:4658) at java.util.regex.Pattern$Loop.match(Pattern.java:4785) at java.util.regex.Pattern$GroupTail.match(Pattern.java:4717) at java.util.regex.Pattern$BranchConn.match(Pattern.java:4568) at java.util.regex.Pattern$Curly.match0(Pattern.java:4272) at java.util.regex.Pattern$Curly.match(Pattern.java:4234) at java.util.regex.Pattern$Branch.match(Pattern.java:4604) at java.util.regex.Pattern$GroupHead.match(Pattern.java:4658) at java.util.regex.Pattern$Loop.match(Pattern.java:4785) at java.util.regex.Pattern$GroupTail.match(Pattern.java:4717) at java.util.regex.Pattern$BranchConn.match(Pattern.java:4568) at java.util.regex.Pattern$Ques.match(Pattern.java:4181) at java.util.regex.Pattern$Curly.match0(Pattern.java:4272) at java.util.regex.Pattern$Curly.match(Pattern.java:4234) at java.util.regex.Pattern$Curly.match0(Pattern.java:4272) at java.util.regex.Pattern$Curly.match(Pattern.java:4234) at java.util.regex.Pattern$Branch.match(Pattern.java:4604) at java.util.regex.Pattern$GroupHead.match(Pattern.java:4658) at java.util.regex.Pattern$Loop.match(Pattern.java:4785) at java.util.regex.Pattern$GroupTail.match(Pattern.java:4717) at java.util.regex.Pattern$BranchConn.match(Pattern.java:4568) at java.util.regex.Pattern$Curly.match0(Pattern.java:4279) at java.util.regex.Pattern$Curly.match(Pattern.java:4234) at java.util.regex.Pattern$Branch.match(Pattern.java:4604) at java.util.regex.Pattern$GroupHead.match(Pattern.java:4658) at java.util.regex.Pattern$Loop.match(Pattern.java:4785) at java.util.regex.Pattern$GroupTail.match(Pattern.java:4717) at java.util.regex.Pattern$BranchConn.match(Pattern.java:4568) at java.util.regex.Pattern$Curly.match0(Pattern.java:4272) at java.util.regex.Pattern$Curly.match(Pattern.java:4234) at java.util.regex.Pattern$Branch.match(Pattern.java:4604) at java.util.regex.Pattern$GroupHead.match(Pattern.java:4658) at java.util.regex.Pattern$Loop.match(Pattern.java:4785) at java.util.regex.Pattern$GroupTail.match(Pattern.java:4717) at java.util.regex.Pattern$BranchConn.match(Pattern.java:4568) at java.util.regex.Pattern$Curly.match0(Pattern.java:4272) at java.util.regex.Pattern$Curly.match(Pattern.java:4234) at java.util.regex.Pattern$Branch.match(Pattern.java:4604) at java.util.regex.Pattern$GroupHead.match(Pattern.java:4658) at java.util.regex.Pattern$Loop.match(Pattern.java:4785) at java.util.regex.Pattern$GroupTail.match(Pattern.java:4717) at java.util.regex.Pattern$BranchConn.match(Pattern.java:4568) at java.util.regex.Pattern$Curly.match0(Pattern.java:4272) at java.util.regex.Pattern$Curly.match(Pattern.java:4234) at java.util.regex.Pattern$Branch.match(Pattern.java:4604) at java.util.regex.Pattern$GroupHead.match(Pattern.java:4658) at java.util.regex.Pattern$Loop.matchInit(Pattern.java:4801) at java.util.regex.Pattern$Prolog.match(Pattern.java:4741) at java.util.regex.Pattern$GroupHead.match(Pattern.java:4658) at java.util.regex.Pattern$Loop.matchInit(Pattern.java:4804) at java.util.regex.Pattern$Prolog.match(Pattern.java:4741) at java.util.regex.Pattern$GroupHead.match(Pattern.java:4658) at java.util.regex.Pattern$BranchConn.match(Pattern.java:4568) at java.util.regex.Pattern$GroupTail.match(Pattern.java:4717) at java.util.regex.Pattern$Curly.match0(Pattern.java:4272) at java.util.regex.Pattern$Curly.match(Pattern.java:4234) at java.util.regex.Pattern$GroupHead.match(Pattern.java:4658) at java.util.regex.Pattern$Branch.match(Pattern.java:4604) at java.util.regex.Pattern$Branch.match(Pattern.java:4602) at java.util.regex.Pattern$Branch.match(Pattern.java:4602) at java.util.regex.Pattern$Branch.match(Pattern.java:4602) at java.util.regex.Pattern$Branch.match(Pattern.java:4602) at java.util.regex.Pattern$Branch.match(Pattern.java:4602) at java.util.regex.Pattern$Branch.match(Pattern.java:4602) at java.util.regex.Pattern$BmpCharProperty.match(Pattern.java:3798) at java.util.regex.Pattern$Start.match(Pattern.java:3461) at java.util.regex.Matcher.search(Matcher.java:1248) at java.util.regex.Matcher.find(Matcher.java:637) at org.eclipse.jdt.internal.formatter.CommentsPreparator.handleHtml(CommentsPreparator.java:629) at org.eclipse.jdt.internal.formatter.CommentsPreparator.endVisit(CommentsPreparator.java:619) at org.eclipse.jdt.core.dom.TagElement.accept0(TagElement.java:282) at org.eclipse.jdt.core.dom.ASTNode.accept(ASTNode.java:2711) at org.eclipse.jdt.core.dom.ASTNode.acceptChildren(ASTNode.java:2782) at org.eclipse.jdt.core.dom.Javadoc.accept0(Javadoc.java:205) at org.eclipse.jdt.core.dom.ASTNode.accept(ASTNode.java:2711) at org.eclipse.jdt.internal.formatter.DefaultCodeFormatter.prepareComments(DefaultCodeFormatter.java:365) at org.eclipse.jdt.internal.formatter.DefaultCodeFormatter.prepareFormattedCode(DefaultCodeFormatter.java:195) at org.eclipse.jdt.internal.formatter.DefaultCodeFormatter.format(DefaultCodeFormatter.java:155) at org.eclipse.jdt.internal.formatter.DefaultCodeFormatter.format(DefaultCodeFormatter.java:139) at org.eclipse.jdt.internal.corext.util.CodeFormatterUtil.reformat(CodeFormatterUtil.java:288) at org.eclipse.jdt.internal.corext.util.CodeFormatterUtil.reformat(CodeFormatterUtil.java:351) at org.eclipse.jdt.internal.corext.fix.CodeFormatFix.createCleanUp(CodeFormatFix.java:69) at org.eclipse.jdt.internal.ui.fix.CodeFormatCleanUp.createFix(CodeFormatCleanUp.java:67) at org.eclipse.jdt.internal.corext.fix.CleanUpRefactoring.calculateChange(CleanUpRefactoring.java:809) at org.eclipse.jdt.internal.corext.fix.CleanUpPostSaveListener.saved(CleanUpPostSaveListener.java:396) at org.eclipse.jdt.internal.ui.javaeditor.CompilationUnitDocumentProvider$5.run(CompilationUnitDocumentProvider.java:1598) at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) at org.eclipse.jdt.internal.ui.javaeditor.CompilationUnitDocumentProvider.notifyPostSaveListeners(CompilationUnitDocumentProvider.java:1593) at org.eclipse.jdt.internal.ui.javaeditor.CompilationUnitDocumentProvider.commitWorkingCopy(CompilationUnitDocumentProvider.java:1380) at org.eclipse.jdt.internal.ui.javaeditor.CompilationUnitDocumentProvider$4.execute(CompilationUnitDocumentProvider.java:1458) at org.eclipse.ui.editors.text.TextFileDocumentProvider$DocumentProviderOperation.run(TextFileDocumentProvider.java:132) at org.eclipse.ui.actions.WorkspaceModifyDelegatingOperation.execute(WorkspaceModifyDelegatingOperation.java:70) at org.eclipse.ui.actions.WorkspaceModifyOperation$1.run(WorkspaceModifyOperation.java:108) at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2241) at org.eclipse.ui.actions.WorkspaceModifyOperation.run(WorkspaceModifyOperation.java:130) - locked <0x00000000f07c9978> (a org.eclipse.ui.actions.WorkspaceModifyDelegatingOperation) at org.eclipse.ui.internal.editors.text.WorkspaceOperationRunner.run(WorkspaceOperationRunner.java:75) at org.eclipse.ui.internal.editors.text.WorkspaceOperationRunner.run(WorkspaceOperationRunner.java:65) at org.eclipse.ui.editors.text.TextFileDocumentProvider.executeOperation(TextFileDocumentProvider.java:456) at org.eclipse.ui.editors.text.TextFileDocumentProvider.saveDocument(TextFileDocumentProvider.java:772) at org.eclipse.ui.texteditor.AbstractTextEditor.performSave(AbstractTextEditor.java:5076) at org.eclipse.jdt.internal.ui.javaeditor.CompilationUnitEditor.performSave(CompilationUnitEditor.java:1244) at org.eclipse.jdt.internal.ui.javaeditor.CompilationUnitEditor.doSave(CompilationUnitEditor.java:1298) - locked <0x00000000a27d2cf8> (a org.eclipse.jdt.internal.core.CompilationUnit) at org.eclipse.ui.texteditor.AbstractTextEditor$TextEditorSavable.doSave(AbstractTextEditor.java:7209) at org.eclipse.ui.Saveable.doSave(Saveable.java:216) at org.eclipse.ui.internal.SaveableHelper.doSaveModel(SaveableHelper.java:357) at org.eclipse.ui.internal.SaveablesList$3.run(SaveablesList.java:665) at org.eclipse.ui.internal.SaveableHelper$5.run(SaveableHelper.java:285) at org.eclipse.jface.operation.ModalContext.runInCurrentThread(ModalContext.java:463) at org.eclipse.jface.operation.ModalContext.run(ModalContext.java:371) at org.eclipse.ui.internal.WorkbenchWindow$14.run(WorkbenchWindow.java:2156) at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70) at org.eclipse.ui.internal.WorkbenchWindow.run(WorkbenchWindow.java:2152) at org.eclipse.ui.internal.SaveableHelper.runProgressMonitorOperation(SaveableHelper.java:293) at org.eclipse.ui.internal.SaveablesList.saveModels(SaveablesList.java:675) at org.eclipse.ui.internal.SaveablesList.saveModels(SaveablesList.java:632) at org.eclipse.ui.internal.SaveablesList.promptForSaving(SaveablesList.java:617) at org.eclipse.ui.internal.SaveablesList.promptForSavingIfNecessary(SaveablesList.java:449) at org.eclipse.ui.internal.SaveablesList.preCloseParts(SaveablesList.java:405) at org.eclipse.ui.internal.SaveablesList.preCloseParts(SaveablesList.java:355) at org.eclipse.ui.internal.SaveablesList.preCloseParts(SaveablesList.java:350) at org.eclipse.ui.internal.WorkbenchWindow$7.save(WorkbenchWindow.java:587) at org.eclipse.e4.ui.internal.workbench.PartServiceImpl.savePart(PartServiceImpl.java:1342) at org.eclipse.e4.ui.workbench.renderers.swt.StackRenderer.closePart(StackRenderer.java:1277) at org.eclipse.e4.ui.workbench.renderers.swt.StackRenderer.access$4(StackRenderer.java:1260) at org.eclipse.e4.ui.workbench.renderers.swt.StackRenderer$10.mouseUp(StackRenderer.java:1114) at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:220) at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4362) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1113) at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4180) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3769) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$4.run(PartRenderingEngine.java:1127) at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:337) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1018) at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:156) at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:654) at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:337) at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:598) at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:139) at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:134) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:380) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:235) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:497) at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:669) at org.eclipse.equinox.launcher.Main.basicRun(Main.java:608) at org.eclipse.equinox.launcher.Main.run(Main.java:1515) at org.eclipse.equinox.launcher.Main.main(Main.java:1488)