From 985b8c0ba6cd8ba85a2934f5b88b30de256b9653 Mon Sep 17 00:00:00 2001 From: Evgeny Gerashchenko Date: Mon, 15 Jun 2015 16:04:57 +0300 Subject: [PATCH] KT-8042 ISE at KotlinHighlightExitPointsHandlerFactory.createHighlightUsagesHandler() on typing a function name starting with `throw` #KT-8042 fixed #EA-68157 fixed --- .../KotlinHighlightExitPointsHandlerFactory.kt | 7 ++++++- idea/testData/exitPoints/invalidReturn.kt | 4 ++++ idea/testData/exitPoints/invalidThrow.kt | 4 ++++ .../highlighter/AbstractHighlightExitPointsTest.kt | 4 ++++ .../HighlightExitPointsTestGenerated.java | 12 ++++++++++++ 5 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 idea/testData/exitPoints/invalidReturn.kt create mode 100644 idea/testData/exitPoints/invalidThrow.kt diff --git a/idea/src/org/jetbrains/kotlin/idea/highlighter/KotlinHighlightExitPointsHandlerFactory.kt b/idea/src/org/jetbrains/kotlin/idea/highlighter/KotlinHighlightExitPointsHandlerFactory.kt index 87af908319c..fe6bca02f7f 100644 --- a/idea/src/org/jetbrains/kotlin/idea/highlighter/KotlinHighlightExitPointsHandlerFactory.kt +++ b/idea/src/org/jetbrains/kotlin/idea/highlighter/KotlinHighlightExitPointsHandlerFactory.kt @@ -41,7 +41,12 @@ public class KotlinHighlightExitPointsHandlerFactory: HighlightUsagesHandlerFact override fun createHighlightUsagesHandler(editor: Editor, file: PsiFile, target: PsiElement): HighlightUsagesHandlerBase<*>? { if (target is LeafPsiElement && (target.getElementType() in RETURN_AND_THROW)) { - val returnOrThrow: JetExpression = PsiTreeUtil.getParentOfType(target, javaClass(), javaClass()) + val returnOrThrow = PsiTreeUtil.getParentOfType( + target, + javaClass(), + javaClass() + ) ?: return null + return MyHandler(editor, file, returnOrThrow) } return null diff --git a/idea/testData/exitPoints/invalidReturn.kt b/idea/testData/exitPoints/invalidReturn.kt new file mode 100644 index 00000000000..ea2fc142338 --- /dev/null +++ b/idea/testData/exitPoints/invalidReturn.kt @@ -0,0 +1,4 @@ +// KT-8042 ISE at KotlinHighlightExitPointsHandlerFactory.createHighlightUsagesHandler() on typing a function name starting with `throw` +// EA-68157 + +fun return \ No newline at end of file diff --git a/idea/testData/exitPoints/invalidThrow.kt b/idea/testData/exitPoints/invalidThrow.kt new file mode 100644 index 00000000000..20527152e1a --- /dev/null +++ b/idea/testData/exitPoints/invalidThrow.kt @@ -0,0 +1,4 @@ +// KT-8042 ISE at KotlinHighlightExitPointsHandlerFactory.createHighlightUsagesHandler() on typing a function name starting with `throw` +// EA-68157 + +fun throw \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/highlighter/AbstractHighlightExitPointsTest.kt b/idea/tests/org/jetbrains/kotlin/idea/highlighter/AbstractHighlightExitPointsTest.kt index 1c1782a5205..882234bccbc 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/highlighter/AbstractHighlightExitPointsTest.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/highlighter/AbstractHighlightExitPointsTest.kt @@ -17,6 +17,8 @@ package org.jetbrains.kotlin.idea.highlighter import com.intellij.codeInsight.highlighting.HighlightUsagesHandler +import com.intellij.openapi.editor.colors.EditorColors +import com.intellij.openapi.editor.colors.EditorColorsManager import com.intellij.testFramework.fixtures.LightCodeInsightFixtureTestCase import org.jetbrains.kotlin.test.InTextDirectivesUtils import kotlin.test.assertEquals @@ -28,7 +30,9 @@ public abstract class AbstractHighlightExitPointsTest : LightCodeInsightFixtureT val text = myFixture.getFile().getText() val expectedToBeHighlighted = InTextDirectivesUtils.findLinesWithPrefixesRemoved(text, "//HIGHLIGHTED:") + val searchResultsTextAttributes = EditorColorsManager.getInstance().getGlobalScheme().getAttributes(EditorColors.SEARCH_RESULT_ATTRIBUTES) val highlighters = myFixture.getEditor().getMarkupModel().getAllHighlighters() + .filter { it.getTextAttributes() == searchResultsTextAttributes } val actual = highlighters.map { text.substring(it.getStartOffset(), it.getEndOffset()) } assertEquals(expectedToBeHighlighted, actual) } diff --git a/idea/tests/org/jetbrains/kotlin/idea/highlighter/HighlightExitPointsTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/highlighter/HighlightExitPointsTestGenerated.java index 9282a1271c7..ee89a4b2290 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/highlighter/HighlightExitPointsTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/highlighter/HighlightExitPointsTestGenerated.java @@ -65,6 +65,18 @@ public class HighlightExitPointsTestGenerated extends AbstractHighlightExitPoint doTest(fileName); } + @TestMetadata("invalidReturn.kt") + public void testInvalidReturn() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/exitPoints/invalidReturn.kt"); + doTest(fileName); + } + + @TestMetadata("invalidThrow.kt") + public void testInvalidThrow() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/exitPoints/invalidThrow.kt"); + doTest(fileName); + } + @TestMetadata("localFunction1.kt") public void testLocalFunction1() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/exitPoints/localFunction1.kt");