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";
|
return "NULL_VALUE";
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
public static volatile boolean throwWrappedProcessCanceledException = false;
|
||||||
|
|
||||||
private final static class ThrowableWrapper {
|
private final static class ThrowableWrapper {
|
||||||
private final Throwable throwable;
|
private final Throwable throwable;
|
||||||
@@ -74,10 +75,23 @@ public class WrappedValues {
|
|||||||
@Nullable
|
@Nullable
|
||||||
public static <V> V unescapeThrowable(@Nullable Object value) {
|
public static <V> V unescapeThrowable(@Nullable Object value) {
|
||||||
if (value instanceof ThrowableWrapper) {
|
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
|
//noinspection unchecked
|
||||||
return (V) value;
|
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"/>
|
<add-to-group group-id="KotlinToolsGroup" anchor="last"/>
|
||||||
</action>
|
</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">
|
<action id="CreateIncrementalCompilationBackup" class="org.jetbrains.kotlin.idea.internal.makeBackup.CreateIncrementalCompilationBackup">
|
||||||
<add-to-group group-id="KotlinToolsGroup" anchor="last"/>
|
<add-to-group group-id="KotlinToolsGroup" anchor="last"/>
|
||||||
</action>
|
</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