Rethrow stored process canceled exception as a new one with both stacks
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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>
|
||||
|
||||
+38
@@ -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)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user