From 39010ab847b68b0ba615bbdbef221d897a35ae05 Mon Sep 17 00:00:00 2001 From: Vyacheslav Gerasimov Date: Mon, 6 Feb 2017 17:16:34 +0300 Subject: [PATCH] Fix broken isReferenceTo checking code for Android extensions #KT-16132 Fixed --- .../idea/references/KtSimpleNameReference.kt | 8 ++--- .../SimpleNameReferenceExtension.kt | 1 - .../AndroidSimpleNameReferenceExtension.kt | 7 +---- .../rename/commonElementId/commonElementId.kt | 20 +++++++++++++ .../expected/commonElementId.kt | 20 +++++++++++++ .../expected/res/layout/layout.xml | 17 +++++++++++ .../commonElementId/res/layout/layout.xml | 17 +++++++++++ .../fqNameInAttr/expected/fqNameInAttr.kt | 9 ++++++ .../expected/res/layout/layout.xml | 15 ++++++++++ .../expected/fqNameInAttrFragment.kt | 9 ++++++ .../expected/res/layout/layout.xml | 15 ++++++++++ .../fqNameInTag/expected/fqNameInTag.kt | 9 ++++++ .../expected/res/layout/layout.xml | 14 +++++++++ .../expected/fqNameInTagFragment.kt | 9 ++++++ .../expected/res/layout/layout.xml | 14 +++++++++ .../rename/multiFile/expected/multiFile.kt | 10 +++++++ .../multiFile/expected/res/layout/layout.xml | 29 +++++++++++++++++++ .../multiFile/expected/res/layout/layout1.xml | 29 +++++++++++++++++++ .../expected/multiFileFragment.kt | 10 +++++++ .../expected/res/layout/layout.xml | 29 +++++++++++++++++++ .../expected/res/layout/layout1.xml | 29 +++++++++++++++++++ .../simple/expected/res/layout/layout.xml | 17 +++++++++++ .../android/rename/simple/expected/simple.kt | 12 ++++++++ .../expected/res/layout/layout.xml | 17 +++++++++++ .../simpleFragment/expected/simpleFragment.kt | 11 +++++++ .../simpleView/expected/res/layout/layout.xml | 17 +++++++++++ .../rename/simpleView/expected/simpleView.kt | 9 ++++++ .../android/AbstractAndroidRenameTest.kt | 27 +++++++++-------- .../android/AndroidRenameTestGenerated.java | 6 ++++ 29 files changed, 409 insertions(+), 27 deletions(-) create mode 100644 plugins/android-extensions/android-extensions-idea/testData/android/rename/commonElementId/commonElementId.kt create mode 100644 plugins/android-extensions/android-extensions-idea/testData/android/rename/commonElementId/expected/commonElementId.kt create mode 100644 plugins/android-extensions/android-extensions-idea/testData/android/rename/commonElementId/expected/res/layout/layout.xml create mode 100644 plugins/android-extensions/android-extensions-idea/testData/android/rename/commonElementId/res/layout/layout.xml create mode 100644 plugins/android-extensions/android-extensions-idea/testData/android/rename/fqNameInAttr/expected/fqNameInAttr.kt create mode 100644 plugins/android-extensions/android-extensions-idea/testData/android/rename/fqNameInAttr/expected/res/layout/layout.xml create mode 100644 plugins/android-extensions/android-extensions-idea/testData/android/rename/fqNameInAttrFragment/expected/fqNameInAttrFragment.kt create mode 100644 plugins/android-extensions/android-extensions-idea/testData/android/rename/fqNameInAttrFragment/expected/res/layout/layout.xml create mode 100644 plugins/android-extensions/android-extensions-idea/testData/android/rename/fqNameInTag/expected/fqNameInTag.kt create mode 100644 plugins/android-extensions/android-extensions-idea/testData/android/rename/fqNameInTag/expected/res/layout/layout.xml create mode 100644 plugins/android-extensions/android-extensions-idea/testData/android/rename/fqNameInTagFragment/expected/fqNameInTagFragment.kt create mode 100644 plugins/android-extensions/android-extensions-idea/testData/android/rename/fqNameInTagFragment/expected/res/layout/layout.xml create mode 100644 plugins/android-extensions/android-extensions-idea/testData/android/rename/multiFile/expected/multiFile.kt create mode 100644 plugins/android-extensions/android-extensions-idea/testData/android/rename/multiFile/expected/res/layout/layout.xml create mode 100644 plugins/android-extensions/android-extensions-idea/testData/android/rename/multiFile/expected/res/layout/layout1.xml create mode 100644 plugins/android-extensions/android-extensions-idea/testData/android/rename/multiFileFragment/expected/multiFileFragment.kt create mode 100644 plugins/android-extensions/android-extensions-idea/testData/android/rename/multiFileFragment/expected/res/layout/layout.xml create mode 100644 plugins/android-extensions/android-extensions-idea/testData/android/rename/multiFileFragment/expected/res/layout/layout1.xml create mode 100644 plugins/android-extensions/android-extensions-idea/testData/android/rename/simple/expected/res/layout/layout.xml create mode 100644 plugins/android-extensions/android-extensions-idea/testData/android/rename/simple/expected/simple.kt create mode 100644 plugins/android-extensions/android-extensions-idea/testData/android/rename/simpleFragment/expected/res/layout/layout.xml create mode 100644 plugins/android-extensions/android-extensions-idea/testData/android/rename/simpleFragment/expected/simpleFragment.kt create mode 100644 plugins/android-extensions/android-extensions-idea/testData/android/rename/simpleView/expected/res/layout/layout.xml create mode 100644 plugins/android-extensions/android-extensions-idea/testData/android/rename/simpleView/expected/simpleView.kt 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 62d83187d45..6d0d0637858 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 @@ -72,12 +72,8 @@ class KtSimpleNameReference(expression: KtSimpleNameExpression) : KtSimpleRefere } override fun isReferenceTo(element: PsiElement?): Boolean { - if (element != null) { - if (!canBeReferenceTo(element)) return false - - for (extension in Extensions.getArea(element.project).getExtensionPoint(SimpleNameReferenceExtension.EP_NAME).extensions) { - if (extension.isReferenceTo(this, element)) return true - } + if (element != null && !canBeReferenceTo(element)) { + return false } return super.isReferenceTo(element) diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/plugin/references/SimpleNameReferenceExtension.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/plugin/references/SimpleNameReferenceExtension.kt index e5bde18c4dc..5084cd1f44b 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/plugin/references/SimpleNameReferenceExtension.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/plugin/references/SimpleNameReferenceExtension.kt @@ -27,6 +27,5 @@ interface SimpleNameReferenceExtension { ExtensionPointName.create("org.jetbrains.kotlin.simpleNameReferenceExtension") } - fun isReferenceTo(reference: KtSimpleNameReference, element: PsiElement): Boolean fun handleElementRename(reference: KtSimpleNameReference, psiFactory: KtPsiFactory, newElementName: String): PsiElement? } \ No newline at end of file diff --git a/plugins/android-extensions/android-extensions-idea/src/org/jetbrains/kotlin/android/synthetic/idea/AndroidSimpleNameReferenceExtension.kt b/plugins/android-extensions/android-extensions-idea/src/org/jetbrains/kotlin/android/synthetic/idea/AndroidSimpleNameReferenceExtension.kt index bb9fb4081a4..2522b06bbfa 100644 --- a/plugins/android-extensions/android-extensions-idea/src/org/jetbrains/kotlin/android/synthetic/idea/AndroidSimpleNameReferenceExtension.kt +++ b/plugins/android-extensions/android-extensions-idea/src/org/jetbrains/kotlin/android/synthetic/idea/AndroidSimpleNameReferenceExtension.kt @@ -25,16 +25,11 @@ import org.jetbrains.kotlin.android.synthetic.androidIdToName import org.jetbrains.kotlin.idea.references.KtSimpleNameReference import org.jetbrains.kotlin.plugin.references.SimpleNameReferenceExtension import org.jetbrains.kotlin.psi.KtDotQualifiedExpression +import org.jetbrains.kotlin.psi.KtProperty import org.jetbrains.kotlin.psi.KtPsiFactory class AndroidSimpleNameReferenceExtension : SimpleNameReferenceExtension { - override fun isReferenceTo(reference: KtSimpleNameReference, element: PsiElement) = when { - element is ValueResourceElementWrapper && AndroidResourceUtil.isIdDeclaration(element) -> true - isLayoutPackageIdentifier(reference) -> true - else -> false - } - private fun isLayoutPackageIdentifier(reference: KtSimpleNameReference): Boolean { val probablyVariant = reference.element?.parent as? KtDotQualifiedExpression ?: return false val probablyKAS = probablyVariant.receiverExpression as? KtDotQualifiedExpression ?: return false diff --git a/plugins/android-extensions/android-extensions-idea/testData/android/rename/commonElementId/commonElementId.kt b/plugins/android-extensions/android-extensions-idea/testData/android/rename/commonElementId/commonElementId.kt new file mode 100644 index 00000000000..7edff23d868 --- /dev/null +++ b/plugins/android-extensions/android-extensions-idea/testData/android/rename/commonElementId/commonElementId.kt @@ -0,0 +1,20 @@ +package com.myapp + +import android.app.Activity +import android.os.Bundle +import java.io.File +import kotlinx.android.synthetic.main.layout.* + +// KT-16132 Renaming property provided by kotlinx leads to renaming another members + +object Loginer { + fun login() { } +} + +public class MyActivity : Activity() { + override fun onCreate(savedInstanceState: Bundle?) { + login.setOnClickListener { + Loginer.login() + } + } +} diff --git a/plugins/android-extensions/android-extensions-idea/testData/android/rename/commonElementId/expected/commonElementId.kt b/plugins/android-extensions/android-extensions-idea/testData/android/rename/commonElementId/expected/commonElementId.kt new file mode 100644 index 00000000000..f387ae77593 --- /dev/null +++ b/plugins/android-extensions/android-extensions-idea/testData/android/rename/commonElementId/expected/commonElementId.kt @@ -0,0 +1,20 @@ +package com.myapp + +import android.app.Activity +import android.os.Bundle +import java.io.File +import kotlinx.android.synthetic.main.layout.* + +// KT-16132 Renaming property provided by kotlinx leads to renaming another members + +object Loginer { + fun login() { } +} + +public class MyActivity : Activity() { + override fun onCreate(savedInstanceState: Bundle?) { + NEWNAME.setOnClickListener { + Loginer.login() + } + } +} diff --git a/plugins/android-extensions/android-extensions-idea/testData/android/rename/commonElementId/expected/res/layout/layout.xml b/plugins/android-extensions/android-extensions-idea/testData/android/rename/commonElementId/expected/res/layout/layout.xml new file mode 100644 index 00000000000..8cf28d45f8a --- /dev/null +++ b/plugins/android-extensions/android-extensions-idea/testData/android/rename/commonElementId/expected/res/layout/layout.xml @@ -0,0 +1,17 @@ + + + + +