Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--codan/org.eclipse.cdt.codan.core.test/src/org/eclipse/cdt/codan/core/test/CodanTestCase.java2
-rw-r--r--codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/CodanCorePlugin.java2
-rw-r--r--codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/internal/core/CodanRunner.java40
3 files changed, 23 insertions, 21 deletions
diff --git a/codan/org.eclipse.cdt.codan.core.test/src/org/eclipse/cdt/codan/core/test/CodanTestCase.java b/codan/org.eclipse.cdt.codan.core.test/src/org/eclipse/cdt/codan/core/test/CodanTestCase.java
index 41af0bf470d..dceab470a8e 100644
--- a/codan/org.eclipse.cdt.codan.core.test/src/org/eclipse/cdt/codan/core/test/CodanTestCase.java
+++ b/codan/org.eclipse.cdt.codan.core.test/src/org/eclipse/cdt/codan/core/test/CodanTestCase.java
@@ -78,6 +78,8 @@ public class CodanTestCase extends BaseTestCase {
removeLeftOverProjects();
cproject = createProject(isCpp());
tmpDir = cproject.getProject().getLocation().makeAbsolute().toFile();
+ // this make CodanRunner to propagate all exceptions it normally just logs
+ System.setProperty("codan.rethrow", "true"); // test can override setUp and unset this
}
@Override
diff --git a/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/CodanCorePlugin.java b/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/CodanCorePlugin.java
index 70a583c6c10..968e827a267 100644
--- a/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/CodanCorePlugin.java
+++ b/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/CodanCorePlugin.java
@@ -95,6 +95,8 @@ public class CodanCorePlugin extends Plugin {
* @noreference This method is not intended to be referenced by clients.
*/
public static void log(Throwable e) {
+ if (Boolean.valueOf(System.getProperty("codan.rethrow"))) //$NON-NLS-1$
+ throw new RuntimeException(e);
log("Internal Error", e); //$NON-NLS-1$
}
diff --git a/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/internal/core/CodanRunner.java b/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/internal/core/CodanRunner.java
index 8b23934fe07..4b41a4d921e 100644
--- a/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/internal/core/CodanRunner.java
+++ b/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/internal/core/CodanRunner.java
@@ -76,31 +76,29 @@ public class CodanRunner {
ICheckerInvocationContext context = new CheckerInvocationContext(resource);
try {
for (IChecker checker : chegistry) {
- try {
- if (monitor.isCanceled())
- return;
- if (chegistry.isCheckerEnabled(checker, resource, checkerLaunchMode)) {
- synchronized (checker) {
- try {
- checker.before(resource);
- CheckersTimeStats.getInstance().checkerStart(checker.getClass().getName());
- if (checkerLaunchMode == CheckerLaunchMode.RUN_AS_YOU_TYPE) {
- ((IRunnableInEditorChecker) checker).processModel(model, context);
- } else {
- checker.processResource(resource, context);
- }
- } finally {
- CheckersTimeStats.getInstance().checkerStop(checker.getClass().getName());
- checker.after(resource);
+ if (monitor.isCanceled())
+ return;
+ if (chegistry.isCheckerEnabled(checker, resource, checkerLaunchMode)) {
+ synchronized (checker) {
+ try {
+ checker.before(resource);
+ CheckersTimeStats.getInstance().checkerStart(checker.getClass().getName());
+ if (checkerLaunchMode == CheckerLaunchMode.RUN_AS_YOU_TYPE) {
+ ((IRunnableInEditorChecker) checker).processModel(model, context);
+ } else {
+ checker.processResource(resource, context);
}
+ } catch (OperationCanceledException e) {
+ return;
+ } catch (Throwable e) {
+ CodanCorePlugin.log(e);
+ } finally {
+ CheckersTimeStats.getInstance().checkerStop(checker.getClass().getName());
+ checker.after(resource);
}
}
- monitor.worked(1);
- } catch (OperationCanceledException e) {
- return;
- } catch (Throwable e) {
- CodanCorePlugin.log(e);
}
+ monitor.worked(1);
}
} finally {
context.dispose();

Back to the top