diff --git a/idea/src/org/jetbrains/jet/plugin/codeInsight/KotlinShortenReferencesRefactoringHelper.kt b/idea/src/org/jetbrains/jet/plugin/codeInsight/KotlinShortenReferencesRefactoringHelper.kt index 1c43d65d402..006d37e2c1f 100644 --- a/idea/src/org/jetbrains/jet/plugin/codeInsight/KotlinShortenReferencesRefactoringHelper.kt +++ b/idea/src/org/jetbrains/jet/plugin/codeInsight/KotlinShortenReferencesRefactoringHelper.kt @@ -28,11 +28,19 @@ import org.jetbrains.jet.lang.resolve.name.FqName 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 public class KotlinShortenReferencesRefactoringHelper: RefactoringHelper> { + private val LOG = Logger.getInstance(javaClass().getCanonicalName())!! + override fun prepareOperation(usages: Array?): Set? { if (usages != null && usages.isNotEmpty()) { - ApplicationManager.getApplication()!!.runWriteAction { usages[0].getProject().getElementsToShorten(true)!!.clear() } + val project = usages[0].getProject() + val elementsToShorten = project.getElementsToShorten(false) + if (elementsToShorten != null && !elementsToShorten.isEmpty()) { + LOG.warn("Waiting set for reference shortening is not empty") + project.clearElementsToShorten() + } } return null } @@ -40,7 +48,7 @@ public class KotlinShortenReferencesRefactoringHelper: RefactoringHelper?) { ApplicationManager.getApplication()!!.runWriteAction { project.getElementsToShorten(false)?.let { bindRequests -> - project.putUserData(ELEMENTS_TO_SHORTEN_KEY, null) + project.clearElementsToShorten() ShortenReferences.process( bindRequests .map() { req -> req.process()?.getOutermostNonInterleavingQualifiedElement() } @@ -51,8 +59,6 @@ public class KotlinShortenReferencesRefactoringHelper: RefactoringHelper>("ELEMENTS_TO_SHORTEN_KEY") - class ReferenceBindRequest(val refExpression: SmartPsiElementPointer, val fqName: FqName) { fun process(): JetSimpleNameExpression? { fun bindToFqName(expression: JetSimpleNameExpression, fqName: FqName): JetSimpleNameExpression { @@ -68,9 +74,10 @@ class ReferenceBindRequest(val refExpression: SmartPsiElementPointer>("ELEMENTS_TO_SHORTEN_KEY") + private fun Project.getElementsToShorten(createIfNeeded: Boolean): MutableSet? { var elementsToShorten = getUserData(ELEMENTS_TO_SHORTEN_KEY) if (createIfNeeded && elementsToShorten == null) { @@ -81,7 +88,11 @@ private fun Project.getElementsToShorten(createIfNeeded: Boolean): MutableSet