From 9fa58a6aeeedd577e45d47197ed9cc6ac0276735 Mon Sep 17 00:00:00 2001 From: Max Medvedev Date: Mon, 12 Nov 2012 10:01:38 +0400 Subject: [PATCH] fix exit point highlighting --- .../GrHighlightExitPointHandler.java | 11 ++- .../GrReturnPointHighlightingTest.groovy | 82 +++++++++++++++++++ 2 files changed, 90 insertions(+), 3 deletions(-) create mode 100644 plugins/groovy/test/org/jetbrains/plugins/groovy/lang/highlighting/GrReturnPointHighlightingTest.groovy diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/findUsages/GrHighlightExitPointHandler.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/findUsages/GrHighlightExitPointHandler.java index 41f7511bdda8..0324b0aba2fe 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/findUsages/GrHighlightExitPointHandler.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/findUsages/GrHighlightExitPointHandler.java @@ -67,11 +67,16 @@ public class GrHighlightExitPointHandler extends HighlightUsagesHandlerBaseturn closure.returnType + } + } +} +''', 'throw new IOException()', 'return closure.returnType') + } + + void testReturnPoint2() { + doTest('''\ +private static getWorldType(stepFile) { + final worldType //unused + if (som) throw new IOException() + + for (statement in stepFile.statements) { + if (statement instanceof String && isWorldDeclaration(statement)) { + final closure = getClosureArg(statement) + return closure.returnType + } + } + 2 +} +''', 'throw new IOException()', 'return closure.returnType', '2') + } + + private void doTest(final String text, final String... usages) { + myFixture.configureByText('_.groovy', text) + HighlightUsagesHandlerBase handler = HighlightUsagesHandler.createCustomHandler(myFixture.editor, myFixture.file); + assertNotNull(handler); + List targets = handler.targets; + assertEquals(1, targets.size()); + assertEquals("return", targets.get(0).getText()); + + handler.computeUsages(targets); + List readUsages = handler.readUsages; + assertEquals(usages.length, readUsages.size()); + + final List textUsages = readUsages.collect { fileTextOfRange(it) } + assertSameElements(Arrays.asList(usages), textUsages) + } + + protected String fileTextOfRange(TextRange textRange) { + return myFixture.file.text.substring(textRange.startOffset, textRange.endOffset); + } +}