KT-8042 ISE at KotlinHighlightExitPointsHandlerFactory.createHighlightUsagesHandler() on typing a function name starting with throw
#KT-8042 fixed #EA-68157 fixed
This commit is contained in:
+6
-1
@@ -41,7 +41,12 @@ public class KotlinHighlightExitPointsHandlerFactory: HighlightUsagesHandlerFact
|
|||||||
|
|
||||||
override fun createHighlightUsagesHandler(editor: Editor, file: PsiFile, target: PsiElement): HighlightUsagesHandlerBase<*>? {
|
override fun createHighlightUsagesHandler(editor: Editor, file: PsiFile, target: PsiElement): HighlightUsagesHandlerBase<*>? {
|
||||||
if (target is LeafPsiElement && (target.getElementType() in RETURN_AND_THROW)) {
|
if (target is LeafPsiElement && (target.getElementType() in RETURN_AND_THROW)) {
|
||||||
val returnOrThrow: JetExpression = PsiTreeUtil.getParentOfType(target, javaClass<JetReturnExpression>(), javaClass<JetThrowExpression>())
|
val returnOrThrow = PsiTreeUtil.getParentOfType<JetExpression>(
|
||||||
|
target,
|
||||||
|
javaClass<JetReturnExpression>(),
|
||||||
|
javaClass<JetThrowExpression>()
|
||||||
|
) ?: return null
|
||||||
|
|
||||||
return MyHandler(editor, file, returnOrThrow)
|
return MyHandler(editor, file, returnOrThrow)
|
||||||
}
|
}
|
||||||
return null
|
return null
|
||||||
|
|||||||
+4
@@ -0,0 +1,4 @@
|
|||||||
|
// KT-8042 ISE at KotlinHighlightExitPointsHandlerFactory.createHighlightUsagesHandler() on typing a function name starting with `throw`
|
||||||
|
// EA-68157
|
||||||
|
|
||||||
|
fun return<caret>
|
||||||
+4
@@ -0,0 +1,4 @@
|
|||||||
|
// KT-8042 ISE at KotlinHighlightExitPointsHandlerFactory.createHighlightUsagesHandler() on typing a function name starting with `throw`
|
||||||
|
// EA-68157
|
||||||
|
|
||||||
|
fun throw<caret>
|
||||||
@@ -17,6 +17,8 @@
|
|||||||
package org.jetbrains.kotlin.idea.highlighter
|
package org.jetbrains.kotlin.idea.highlighter
|
||||||
|
|
||||||
import com.intellij.codeInsight.highlighting.HighlightUsagesHandler
|
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 com.intellij.testFramework.fixtures.LightCodeInsightFixtureTestCase
|
||||||
import org.jetbrains.kotlin.test.InTextDirectivesUtils
|
import org.jetbrains.kotlin.test.InTextDirectivesUtils
|
||||||
import kotlin.test.assertEquals
|
import kotlin.test.assertEquals
|
||||||
@@ -28,7 +30,9 @@ public abstract class AbstractHighlightExitPointsTest : LightCodeInsightFixtureT
|
|||||||
|
|
||||||
val text = myFixture.getFile().getText()
|
val text = myFixture.getFile().getText()
|
||||||
val expectedToBeHighlighted = InTextDirectivesUtils.findLinesWithPrefixesRemoved(text, "//HIGHLIGHTED:")
|
val expectedToBeHighlighted = InTextDirectivesUtils.findLinesWithPrefixesRemoved(text, "//HIGHLIGHTED:")
|
||||||
|
val searchResultsTextAttributes = EditorColorsManager.getInstance().getGlobalScheme().getAttributes(EditorColors.SEARCH_RESULT_ATTRIBUTES)
|
||||||
val highlighters = myFixture.getEditor().getMarkupModel().getAllHighlighters()
|
val highlighters = myFixture.getEditor().getMarkupModel().getAllHighlighters()
|
||||||
|
.filter { it.getTextAttributes() == searchResultsTextAttributes }
|
||||||
val actual = highlighters.map { text.substring(it.getStartOffset(), it.getEndOffset()) }
|
val actual = highlighters.map { text.substring(it.getStartOffset(), it.getEndOffset()) }
|
||||||
assertEquals(expectedToBeHighlighted, actual)
|
assertEquals(expectedToBeHighlighted, actual)
|
||||||
}
|
}
|
||||||
|
|||||||
+12
@@ -65,6 +65,18 @@ public class HighlightExitPointsTestGenerated extends AbstractHighlightExitPoint
|
|||||||
doTest(fileName);
|
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")
|
@TestMetadata("localFunction1.kt")
|
||||||
public void testLocalFunction1() throws Exception {
|
public void testLocalFunction1() throws Exception {
|
||||||
String fileName = JetTestUtils.navigationMetadata("idea/testData/exitPoints/localFunction1.kt");
|
String fileName = JetTestUtils.navigationMetadata("idea/testData/exitPoints/localFunction1.kt");
|
||||||
|
|||||||
Reference in New Issue
Block a user