From c9d10cfcd3145c0c7ded2f77f6efed2a8cb769b0 Mon Sep 17 00:00:00 2001 From: Alexey Sedunov Date: Thu, 6 Mar 2014 13:48:11 +0400 Subject: [PATCH] Do not postpone reference lengthening Do not shorten references located in import/package directives --- ...otlinShortenReferencesRefactoringHelper.kt | 34 +++++-------------- .../references/JetSimpleNameReference.java | 33 ++++++++++-------- 2 files changed, 28 insertions(+), 39 deletions(-) diff --git a/idea/src/org/jetbrains/jet/plugin/codeInsight/KotlinShortenReferencesRefactoringHelper.kt b/idea/src/org/jetbrains/jet/plugin/codeInsight/KotlinShortenReferencesRefactoringHelper.kt index 006d37e2c1f..4a5760fc0a8 100644 --- a/idea/src/org/jetbrains/jet/plugin/codeInsight/KotlinShortenReferencesRefactoringHelper.kt +++ b/idea/src/org/jetbrains/jet/plugin/codeInsight/KotlinShortenReferencesRefactoringHelper.kt @@ -29,11 +29,12 @@ import org.jetbrains.jet.plugin.refactoring.changeQualifiedName import org.jetbrains.jet.lang.psi.psiUtil.getQualifiedElementSelector import org.jetbrains.jet.lang.psi.psiUtil.getOutermostNonInterleavingQualifiedElement import com.intellij.openapi.diagnostic.Logger +import com.intellij.psi.SmartPointerManager -public class KotlinShortenReferencesRefactoringHelper: RefactoringHelper> { +public class KotlinShortenReferencesRefactoringHelper: RefactoringHelper>> { private val LOG = Logger.getInstance(javaClass().getCanonicalName())!! - override fun prepareOperation(usages: Array?): Set? { + override fun prepareOperation(usages: Array?): Set>? { if (usages != null && usages.isNotEmpty()) { val project = usages[0].getProject() val elementsToShorten = project.getElementsToShorten(false) @@ -45,13 +46,13 @@ public class KotlinShortenReferencesRefactoringHelper: RefactoringHelper?) { + override fun performOperation(project: Project, operationData: Set>?) { ApplicationManager.getApplication()!!.runWriteAction { project.getElementsToShorten(false)?.let { bindRequests -> project.clearElementsToShorten() ShortenReferences.process( bindRequests - .map() { req -> req.process()?.getOutermostNonInterleavingQualifiedElement() } + .map() { it.getElement()?.getOutermostNonInterleavingQualifiedElement() } .filterNotNull() ) } @@ -59,26 +60,9 @@ public class KotlinShortenReferencesRefactoringHelper: RefactoringHelper, val fqName: FqName) { - fun process(): JetSimpleNameExpression? { - fun bindToFqName(expression: JetSimpleNameExpression, fqName: FqName): JetSimpleNameExpression { - val qualifier = expression.changeQualifiedName(fqName) - val newExpression = qualifier.getQualifiedElementSelector() as JetSimpleNameExpression? - assert(newExpression != null) { "No selector in qualified element" } +private val ELEMENTS_TO_SHORTEN_KEY = Key.create>>("ELEMENTS_TO_SHORTEN_KEY") - return newExpression!! - } - - val originalExpression = refExpression.getElement() - if (originalExpression == null) return null - - return bindToFqName(originalExpression, fqName) - } -} - -private val ELEMENTS_TO_SHORTEN_KEY = Key.create>("ELEMENTS_TO_SHORTEN_KEY") - -private fun Project.getElementsToShorten(createIfNeeded: Boolean): MutableSet? { +private fun Project.getElementsToShorten(createIfNeeded: Boolean): MutableSet>? { var elementsToShorten = getUserData(ELEMENTS_TO_SHORTEN_KEY) if (createIfNeeded && elementsToShorten == null) { elementsToShorten = HashSet() @@ -92,7 +76,7 @@ private fun Project.clearElementsToShorten() { putUserData(ELEMENTS_TO_SHORTEN_KEY, null) } -public fun Project.addReferenceBindRequest(request: ReferenceBindRequest) { +public fun Project.addElementToShorteningWaitSet(expression: JetSimpleNameExpression) { assert (ApplicationManager.getApplication()!!.isWriteAccessAllowed(), "Write access needed") - getElementsToShorten(true)!!.add(request) + getElementsToShorten(true)!!.add(SmartPointerManager.getInstance(expression.getProject())!!.createSmartPsiElementPointer(expression)) } diff --git a/idea/src/org/jetbrains/jet/plugin/references/JetSimpleNameReference.java b/idea/src/org/jetbrains/jet/plugin/references/JetSimpleNameReference.java index 6260494786d..e24a61c5a14 100644 --- a/idea/src/org/jetbrains/jet/plugin/references/JetSimpleNameReference.java +++ b/idea/src/org/jetbrains/jet/plugin/references/JetSimpleNameReference.java @@ -19,17 +19,17 @@ package org.jetbrains.jet.plugin.references; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.TextRange; import com.intellij.psi.PsiElement; -import com.intellij.psi.SmartPointerManager; import com.intellij.psi.tree.IElementType; +import com.intellij.psi.util.PsiTreeUtil; import com.intellij.util.IncorrectOperationException; import org.jetbrains.annotations.NotNull; -import org.jetbrains.jet.lang.psi.JetPsiFactory; -import org.jetbrains.jet.lang.psi.JetSimpleNameExpression; +import org.jetbrains.jet.lang.psi.*; import org.jetbrains.jet.lang.psi.psiUtil.PsiUtilPackage; import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.lexer.JetTokens; import org.jetbrains.jet.plugin.codeInsight.CodeInsightPackage; -import org.jetbrains.jet.plugin.codeInsight.ReferenceBindRequest; +import org.jetbrains.jet.plugin.codeInsight.ShortenReferences; +import org.jetbrains.jet.plugin.refactoring.RefactoringPackage; public class JetSimpleNameReference extends JetSimpleReference { public JetSimpleNameReference(@NotNull JetSimpleNameExpression jetSimpleNameExpression) { @@ -73,21 +73,26 @@ public class JetSimpleNameReference extends JetSimpleReference