diff --git a/idea/src/org/jetbrains/jet/plugin/codeInsight/ShortenReferences.kt b/idea/src/org/jetbrains/jet/plugin/codeInsight/ShortenReferences.kt index 9e69e6701f5..6d1aa4df7fc 100644 --- a/idea/src/org/jetbrains/jet/plugin/codeInsight/ShortenReferences.kt +++ b/idea/src/org/jetbrains/jet/plugin/codeInsight/ShortenReferences.kt @@ -61,19 +61,24 @@ public object ShortenReferences { if (rangeMarker.isValid()) { val range = TextRange(rangeMarker.getStartOffset(), rangeMarker.getEndOffset()) - var elementRange = element.getTextRange()!! - - // for qualified call expression take only the part without parenthesis - val calleeExpression = ((element as? JetDotQualifiedExpression) - ?.getSelectorExpression() as? JetCallExpression) - ?.getCalleeExpression() - if (calleeExpression != null) { - elementRange = TextRange(elementRange.getStartOffset(), calleeExpression.getTextRange()!!.getEndOffset()) - } - + val elementRange = element.getTextRange()!! when { range.contains(elementRange) -> FilterResult.PROCESS - range.intersects(elementRange) -> FilterResult.GO_INSIDE + + range.intersects(elementRange) -> { + // for qualified call expression allow to shorten only the part without parenthesis + val calleeExpression = ((element as? JetDotQualifiedExpression) + ?.getSelectorExpression() as? JetCallExpression) + ?.getCalleeExpression() + if (calleeExpression != null) { + val rangeWithoutParenthesis = TextRange(elementRange.getStartOffset(), calleeExpression.getTextRange()!!.getEndOffset()) + if (range.contains(rangeWithoutParenthesis)) FilterResult.PROCESS else FilterResult.GO_INSIDE + } + else { + FilterResult.GO_INSIDE + } + } + else -> FilterResult.SKIP } } diff --git a/idea/testData/completion/handlers/ClassCompletionInLambda.kt b/idea/testData/completion/handlers/ClassCompletionInLambda.kt new file mode 100644 index 00000000000..7202bd3a140 --- /dev/null +++ b/idea/testData/completion/handlers/ClassCompletionInLambda.kt @@ -0,0 +1,3 @@ +fun foo(list: List) { + list.map { Stri } +} \ No newline at end of file diff --git a/idea/testData/completion/handlers/ClassCompletionInLambda.kt.after b/idea/testData/completion/handlers/ClassCompletionInLambda.kt.after new file mode 100644 index 00000000000..f0b978a52e0 --- /dev/null +++ b/idea/testData/completion/handlers/ClassCompletionInLambda.kt.after @@ -0,0 +1,3 @@ +fun foo(list: List) { + list.map { String } +} \ No newline at end of file diff --git a/idea/testData/shortenRefs/type/ClassNameInsideArguments.kt b/idea/testData/shortenRefs/type/ClassNameInsideArguments.kt new file mode 100644 index 00000000000..6bef44fa647 --- /dev/null +++ b/idea/testData/shortenRefs/type/ClassNameInsideArguments.kt @@ -0,0 +1,3 @@ +fun foo(list: List) { + list.contains(java.util.TimeZone) +} \ No newline at end of file diff --git a/idea/testData/shortenRefs/type/ClassNameInsideArguments.kt.after b/idea/testData/shortenRefs/type/ClassNameInsideArguments.kt.after new file mode 100644 index 00000000000..72bc8542c0e --- /dev/null +++ b/idea/testData/shortenRefs/type/ClassNameInsideArguments.kt.after @@ -0,0 +1,5 @@ +import java.util.TimeZone + +fun foo(list: List) { + list.contains(TimeZone) +} \ No newline at end of file diff --git a/idea/testData/shortenRefs/type/ClassNameInsideLambda.kt b/idea/testData/shortenRefs/type/ClassNameInsideLambda.kt new file mode 100644 index 00000000000..a4e50006594 --- /dev/null +++ b/idea/testData/shortenRefs/type/ClassNameInsideLambda.kt @@ -0,0 +1,3 @@ +fun foo(list: List) { + list.map { java.util.TimeZone } +} \ No newline at end of file diff --git a/idea/testData/shortenRefs/type/ClassNameInsideLambda.kt.after b/idea/testData/shortenRefs/type/ClassNameInsideLambda.kt.after new file mode 100644 index 00000000000..fa8fb246032 --- /dev/null +++ b/idea/testData/shortenRefs/type/ClassNameInsideLambda.kt.after @@ -0,0 +1,5 @@ +import java.util.TimeZone + +fun foo(list: List) { + list.map { TimeZone } +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/jet/completion/handlers/BasicCompletionHandlerTest.kt b/idea/tests/org/jetbrains/jet/completion/handlers/BasicCompletionHandlerTest.kt index d26c8093b4d..84175b8d3db 100644 --- a/idea/tests/org/jetbrains/jet/completion/handlers/BasicCompletionHandlerTest.kt +++ b/idea/tests/org/jetbrains/jet/completion/handlers/BasicCompletionHandlerTest.kt @@ -30,6 +30,8 @@ public class BasicCompletionHandlerTest : CompletionHandlerTestBase(){ fun testClassCompletionInImport() = doTest(1, "TimeZone", " (java.util)", '\t') + fun testClassCompletionInLambda() = doTest(1, "String", " (kotlin)", '\n') + fun testDoNotInsertImportForAlreadyImported() = doTest() fun testDoNotInsertDefaultJsImports() = doTest() diff --git a/idea/tests/org/jetbrains/jet/shortenRefs/ShortenRefsTestGenerated.java b/idea/tests/org/jetbrains/jet/shortenRefs/ShortenRefsTestGenerated.java index d1dde3e6cfa..27fad679ecc 100644 --- a/idea/tests/org/jetbrains/jet/shortenRefs/ShortenRefsTestGenerated.java +++ b/idea/tests/org/jetbrains/jet/shortenRefs/ShortenRefsTestGenerated.java @@ -179,6 +179,16 @@ public class ShortenRefsTestGenerated extends AbstractShortenRefsTest { JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.TestsPackage", new File("idea/testData/shortenRefs/type"), Pattern.compile("^([^\\.]+)\\.kt$"), true); } + @TestMetadata("ClassNameInsideArguments.kt") + public void testClassNameInsideArguments() throws Exception { + doTest("idea/testData/shortenRefs/type/ClassNameInsideArguments.kt"); + } + + @TestMetadata("ClassNameInsideLambda.kt") + public void testClassNameInsideLambda() throws Exception { + doTest("idea/testData/shortenRefs/type/ClassNameInsideLambda.kt"); + } + @TestMetadata("ClassSameNameAsPackage.kt") public void testClassSameNameAsPackage() throws Exception { doTest("idea/testData/shortenRefs/type/ClassSameNameAsPackage.kt");