diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/references/KtSimpleNameReference.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/references/KtSimpleNameReference.kt
index bfd5fa01538..5bad39a16f4 100644
--- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/references/KtSimpleNameReference.kt
+++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/references/KtSimpleNameReference.kt
@@ -1,17 +1,6 @@
/*
- * 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.
+ * Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors.
+ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.idea.references
@@ -175,7 +164,15 @@ class KtSimpleNameReference(expression: KtSimpleNameExpression) : KtSimpleRefere
if (expression !is KtNameReferenceExpression) return expression
if (expression.parent is KtThisExpression || expression.parent is KtSuperExpression) return expression // TODO: it's a bad design of PSI tree, we should change it
- val newExpression = expression.changeQualifiedName(fqName.quoteIfNeeded(), targetElement)
+ val newExpression = expression.changeQualifiedName(
+ fqName.quoteIfNeeded().let {
+ if (shorteningMode == ShorteningMode.NO_SHORTENING)
+ it
+ else
+ it.withRootPrefixIfNeeded(expression)
+ },
+ targetElement
+ )
val newQualifiedElement = newExpression.getQualifiedElementOrCallableRef()
if (shorteningMode == ShorteningMode.NO_SHORTENING) return newExpression
diff --git a/idea/testData/copyPaste/imports/ClassResolvedToPackage.expected.kt b/idea/testData/copyPaste/imports/ClassResolvedToPackage.expected.kt
index 4e7356a5f39..e69b77335e3 100644
--- a/idea/testData/copyPaste/imports/ClassResolvedToPackage.expected.kt
+++ b/idea/testData/copyPaste/imports/ClassResolvedToPackage.expected.kt
@@ -1,14 +1,8 @@
-// ERROR: Unresolved reference: a
-// ERROR: Unresolved reference: a
-// ERROR: Unresolved reference: a
package to
import a.a
-fun f(i: a.a) {
- // TODO References shortening doesn't work for package vs class conflicts under the new resolution rules.
- // After importing 'a.a', expression 'a.a' is unresolved (since 'a' becomes a class).
- // 'package' in expression syntax might be required to fix it properly.
- a.a
- a.a()
+fun f(i: a) {
+ a
+ a()
}
\ No newline at end of file
diff --git a/idea/testData/copyPaste/imports/ClassResolvedToPackage.kt b/idea/testData/copyPaste/imports/ClassResolvedToPackage.kt
index 5360bec9bf3..63b8e7e6f02 100644
--- a/idea/testData/copyPaste/imports/ClassResolvedToPackage.kt
+++ b/idea/testData/copyPaste/imports/ClassResolvedToPackage.kt
@@ -6,9 +6,6 @@ class a {
}
fun f(i: a) {
- // TODO References shortening doesn't work for package vs class conflicts under the new resolution rules.
- // After importing 'a.a', expression 'a.a' is unresolved (since 'a' becomes a class).
- // 'package' in expression syntax might be required to fix it properly.
a
a()
}
\ No newline at end of file
diff --git a/idea/testData/quickfix/autoImports/conflictWithClassIdentifier.kt b/idea/testData/quickfix/autoImports/conflictWithClassIdentifier.kt
new file mode 100644
index 00000000000..f5a3d07dc4b
--- /dev/null
+++ b/idea/testData/quickfix/autoImports/conflictWithClassIdentifier.kt
@@ -0,0 +1,7 @@
+// "Import" "true"
+// DISABLE-ERRORS
+class java
+
+fun test() {
+ Arrays
+}
\ No newline at end of file
diff --git a/idea/testData/quickfix/autoImports/conflictWithClassIdentifier.kt.after b/idea/testData/quickfix/autoImports/conflictWithClassIdentifier.kt.after
new file mode 100644
index 00000000000..a729a340f5a
--- /dev/null
+++ b/idea/testData/quickfix/autoImports/conflictWithClassIdentifier.kt.after
@@ -0,0 +1,9 @@
+import java.util.Arrays
+
+// "Import" "true"
+// DISABLE-ERRORS
+class java
+
+fun test() {
+ Arrays
+}
\ No newline at end of file
diff --git a/idea/testData/quickfix/autoImports/conflictWithLocalIdentifier.kt b/idea/testData/quickfix/autoImports/conflictWithLocalIdentifier.kt
new file mode 100644
index 00000000000..63ba0bb7ed6
--- /dev/null
+++ b/idea/testData/quickfix/autoImports/conflictWithLocalIdentifier.kt
@@ -0,0 +1,7 @@
+// "Import" "true"
+// DISABLE-ERRORS
+
+fun test() {
+ val java = 42
+ Arrays
+}
\ No newline at end of file
diff --git a/idea/testData/quickfix/autoImports/conflictWithLocalIdentifier.kt.after b/idea/testData/quickfix/autoImports/conflictWithLocalIdentifier.kt.after
new file mode 100644
index 00000000000..33190d242db
--- /dev/null
+++ b/idea/testData/quickfix/autoImports/conflictWithLocalIdentifier.kt.after
@@ -0,0 +1,9 @@
+import java.util.Arrays
+
+// "Import" "true"
+// DISABLE-ERRORS
+
+fun test() {
+ val java = 42
+ Arrays
+}
\ No newline at end of file
diff --git a/idea/testData/shortenRefs/type/ClassSameNameAsPackage.kt.after b/idea/testData/shortenRefs/type/ClassSameNameAsPackage.kt.after
index db7e8c5b4eb..ec85b599c0a 100644
--- a/idea/testData/shortenRefs/type/ClassSameNameAsPackage.kt.after
+++ b/idea/testData/shortenRefs/type/ClassSameNameAsPackage.kt.after
@@ -1,5 +1,4 @@
import same.same
-// todo must be: s: same
-fun f(s: same.same) {
+fun f(s: same) {
}
\ No newline at end of file
diff --git a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java
index da209e72872..c7f6183c844 100644
--- a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java
+++ b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java
@@ -1738,6 +1738,16 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest {
runTest("idea/testData/quickfix/autoImports/checkNoStackOverflowInImportInnerClassInCurrentFile.kt");
}
+ @TestMetadata("conflictWithClassIdentifier.kt")
+ public void testConflictWithClassIdentifier() throws Exception {
+ runTest("idea/testData/quickfix/autoImports/conflictWithClassIdentifier.kt");
+ }
+
+ @TestMetadata("conflictWithLocalIdentifier.kt")
+ public void testConflictWithLocalIdentifier() throws Exception {
+ runTest("idea/testData/quickfix/autoImports/conflictWithLocalIdentifier.kt");
+ }
+
@TestMetadata("enumEntries.kt")
public void testEnumEntries() throws Exception {
runTest("idea/testData/quickfix/autoImports/enumEntries.kt");