Rethrow stored process canceled exception as a new one with both stacks

This commit is contained in:
Nikolay Krasko
2015-11-06 15:29:08 +03:00
parent 4aa7314600
commit 58dbb1ad53
3 changed files with 57 additions and 1 deletions
@@ -26,6 +26,7 @@ public class WrappedValues {
return "NULL_VALUE";
}
};
public static volatile boolean throwWrappedProcessCanceledException = false;
private final static class ThrowableWrapper {
private final Throwable throwable;
@@ -74,10 +75,23 @@ public class WrappedValues {
@Nullable
public static <V> V unescapeThrowable(@Nullable Object value) {
if (value instanceof ThrowableWrapper) {
throw ExceptionUtilsKt.rethrow(((ThrowableWrapper) value).getThrowable());
Throwable originThrowable = ((ThrowableWrapper) value).getThrowable();
if (throwWrappedProcessCanceledException &&
originThrowable.getClass().getName().equals("com.intellij.openapi.progress.ProcessCanceledException")) {
throw new WrappedProcessCanceledException(originThrowable);
}
throw ExceptionUtilsKt.rethrow(originThrowable);
}
//noinspection unchecked
return (V) value;
}
public static class WrappedProcessCanceledException extends RuntimeException {
public WrappedProcessCanceledException(Throwable cause) {
super("Rethrow stored exception", cause);
}
}
}
+4
View File
@@ -139,6 +139,10 @@
<add-to-group group-id="KotlinToolsGroup" anchor="last"/>
</action>
<action id="StoredExceptionsThrowToggleAction" class="org.jetbrains.kotlin.idea.actions.internal.StoredExceptionsThrowToggleAction"
text="Throw cached PCE">
</action>
<action id="CreateIncrementalCompilationBackup" class="org.jetbrains.kotlin.idea.internal.makeBackup.CreateIncrementalCompilationBackup">
<add-to-group group-id="KotlinToolsGroup" anchor="last"/>
</action>
@@ -0,0 +1,38 @@
/*
* Copyright 2010-2015 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jetbrains.kotlin.idea.actions.internal
import com.intellij.openapi.actionSystem.AnActionEvent
import com.intellij.openapi.actionSystem.ToggleAction
import org.jetbrains.kotlin.utils.WrappedValues
public class StoredExceptionsThrowToggleAction : ToggleAction("Internal: toggle throwing cached PCE", "Rethrow stored PCE as a new runtime exception", null) {
override fun isSelected(e: AnActionEvent?): Boolean {
return WrappedValues.throwWrappedProcessCanceledException
}
override fun setSelected(e: AnActionEvent?, state: Boolean) {
WrappedValues.throwWrappedProcessCanceledException = state
}
override fun update(e: AnActionEvent) {
super.update(e)
e.getPresentation().setEnabled(KotlinInternalMode.enabled)
}
}