diff --git a/core/util.runtime/src/org/jetbrains/kotlin/utils/WrappedValues.java b/core/util.runtime/src/org/jetbrains/kotlin/utils/WrappedValues.java index 42328dd6888..62a0f25feae 100644 --- a/core/util.runtime/src/org/jetbrains/kotlin/utils/WrappedValues.java +++ b/core/util.runtime/src/org/jetbrains/kotlin/utils/WrappedValues.java @@ -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 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); + } + } } diff --git a/idea/src/META-INF/plugin.xml b/idea/src/META-INF/plugin.xml index 41ac385fc6a..d47e374a775 100644 --- a/idea/src/META-INF/plugin.xml +++ b/idea/src/META-INF/plugin.xml @@ -139,6 +139,10 @@ + + + diff --git a/idea/src/org/jetbrains/kotlin/idea/actions/internal/StoredExceptionsThrowToggleAction.kt b/idea/src/org/jetbrains/kotlin/idea/actions/internal/StoredExceptionsThrowToggleAction.kt new file mode 100644 index 00000000000..46ed689e9ca --- /dev/null +++ b/idea/src/org/jetbrains/kotlin/idea/actions/internal/StoredExceptionsThrowToggleAction.kt @@ -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) + } +}