Community
Participate
Working Groups
My logs show AbortCompilation wrapped in a JavaModelException although the initial exception was only meant to cause cancellation of the current operation (from CancelableProblemFactory). Inspecting the source of CompilationUnitProblemFinder the following block seems inconsistent: if (parser != null) { problemFinder.parser = parser; try { unit = parser.parseCompilationUnit(unitElement, true/*full parse*/, monitor); problemFinder.resolve( unit, unitElement, true, // verify methods analyzeAndGenerateCode, // analyze code analyzeAndGenerateCode); // generate code } catch (AbortCompilation e) { problemFinder.handleInternalException(e, unit); } } else { unit = problemFinder.resolve( unitElement, true, // verify methods analyzeAndGenerateCode, // analyze code analyzeAndGenerateCode); // generate code } Why is AbortCompilation only caught on one branch and not the other? Looks like a bug to me. I'm not sure how much effort it would be to extract a test case, but maybe you agree that it is safe to just flip the nesting of try and if?
This indeed looks like a bug. Could you please give the complete log?
Created attachment 166555 [details] source file for line number lookup (In reply to comment #1) > This indeed looks like a bug. > Could you please give the complete log? Sure, but it comes with my usual disclaimer: line numbers may be slightly off, because this was taken from our jdt.core branch. I've attached our version of CompilationUnitProblemFinder.java for line-number lookup. Here's a typical stack trace: Java Model Exception: org.eclipse.jdt.internal.compiler.problem.AbortCompilation: at org.eclipse.jdt.internal.core.CompilationUnitProblemFinder.process(CompilationUnitProblemFinder.java:260) at org.eclipse.jdt.internal.core.CompilationUnitProblemFinder.process(CompilationUnitProblemFinder.java:281) at org.eclipse.jdt.internal.core.ReconcileWorkingCopyOperation.makeConsistent(ReconcileWorkingCopyOperation.java:190) 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.eclipse.jdt.internal.core.CompilationUnit.reconcile(CompilationUnit.java:1274) at org.eclipse.jdt.internal.ui.text.java.JavaReconcilingStrategy.reconcile(JavaReconcilingStrategy.java:126) 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:102) at org.eclipse.jface.text.reconciler.MonoReconciler.process(MonoReconciler.java:77) at org.eclipse.jface.text.reconciler.AbstractReconciler$BackgroundThread.run(AbstractReconciler.java:206) Caused by: org.eclipse.jdt.internal.compiler.problem.AbortCompilation: at org.eclipse.jdt.internal.core.CancelableProblemFactory.createProblem(CancelableProblemFactory.java:30) at org.eclipse.jdt.internal.compiler.problem.ProblemHandler.createProblem(ProblemHandler.java:80) at org.eclipse.jdt.internal.compiler.Compiler.handleInternalException(Compiler.java:651) at org.eclipse.jdt.internal.compiler.Compiler.resolve(Compiler.java:1000) at org.eclipse.jdt.internal.compiler.Compiler.resolve(Compiler.java:1036) at org.eclipse.jdt.internal.core.CompilationUnitProblemFinder.process(CompilationUnitProblemFinder.java:220) ... 23 more Caused by: org.eclipse.jdt.internal.compiler.problem.AbortCompilation: at org.eclipse.jdt.internal.core.CancelableProblemFactory.createProblem(CancelableProblemFactory.java:30) at org.eclipse.jdt.internal.compiler.problem.ProblemHandler.createProblem(ProblemHandler.java:80) at org.eclipse.jdt.internal.compiler.Compiler.handleInternalException(Compiler.java:651) at org.eclipse.jdt.internal.compiler.Compiler.resolve(Compiler.java:1000) at org.eclipse.jdt.internal.compiler.Compiler.resolve(Compiler.java:1036) at org.eclipse.jdt.internal.core.CompilationUnitProblemFinder.process(CompilationUnitProblemFinder.java:220) at org.eclipse.jdt.internal.core.CompilationUnitProblemFinder.process(CompilationUnitProblemFinder.java:281) at org.eclipse.jdt.internal.core.ReconcileWorkingCopyOperation.makeConsistent(ReconcileWorkingCopyOperation.java:190) 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.eclipse.jdt.internal.core.CompilationUnit.reconcile(CompilationUnit.java:1274) at org.eclipse.jdt.internal.ui.text.java.JavaReconcilingStrategy.reconcile(JavaReconcilingStrategy.java:126) 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:102) at org.eclipse.jface.text.reconciler.MonoReconciler.process(MonoReconciler.java:77) at org.eclipse.jface.text.reconciler.AbstractReconciler$BackgroundThread.run(AbstractReconciler.java:206) Looking at Compiler.handleInternalException() there was an exception as the root cause which is unfortunately not exposed in the logs. However, any call to createProblem() after the monitor was canceled should cause the same effect. HTH.
Created attachment 166557 [details] Proposed fix
Patch looks good to me. Searching for the root cause, I came to the conclusion that I must have had a RuntimeException during compilation, which was wrapped in an AbortCompilation and never unwrapped again. With your patch in place I should be able to see my original bug :)
Srikanth, please review.
Patch looks good.
Released for 3.6RC1. Thanks again, Stephan.
(In reply to comment #7) > Released for 3.6RC1. > Thanks again, Stephan. Thank you! :)
Verified for 3.6RC1 through code inspection.
Verified.