don't abort refactoring in case of exceptions in AutomaticVariableRenamer

This commit is contained in:
Dmitry Jemerov
2015-10-19 18:57:14 +02:00
parent 30cbec3fc8
commit ac55c9134c
@@ -16,6 +16,7 @@
package org.jetbrains.kotlin.idea.refactoring.rename package org.jetbrains.kotlin.idea.refactoring.rename
import com.intellij.openapi.diagnostic.Logger
import com.intellij.openapi.util.text.StringUtil import com.intellij.openapi.util.text.StringUtil
import com.intellij.psi.PsiClass import com.intellij.psi.PsiClass
import com.intellij.psi.PsiElement import com.intellij.psi.PsiElement
@@ -26,7 +27,6 @@ import com.intellij.refactoring.RefactoringBundle
import com.intellij.refactoring.rename.naming.AutomaticRenamer import com.intellij.refactoring.rename.naming.AutomaticRenamer
import com.intellij.refactoring.rename.naming.AutomaticRenamerFactory import com.intellij.refactoring.rename.naming.AutomaticRenamerFactory
import com.intellij.usageView.UsageInfo import com.intellij.usageView.UsageInfo
import org.jetbrains.kotlin.asJava.LightClassUtil
import org.jetbrains.kotlin.asJava.toLightClass import org.jetbrains.kotlin.asJava.toLightClass
import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.builtins.KotlinBuiltIns
import org.jetbrains.kotlin.descriptors.ClassDescriptor import org.jetbrains.kotlin.descriptors.ClassDescriptor
@@ -39,10 +39,10 @@ import org.jetbrains.kotlin.psi.JetVariableDeclaration
import org.jetbrains.kotlin.psi.psiUtil.isAncestor import org.jetbrains.kotlin.psi.psiUtil.isAncestor
import org.jetbrains.kotlin.resolve.DescriptorUtils import org.jetbrains.kotlin.resolve.DescriptorUtils
import org.jetbrains.kotlin.resolve.descriptorUtil.builtIns import org.jetbrains.kotlin.resolve.descriptorUtil.builtIns
import org.jetbrains.kotlin.resolve.lazy.NoDescriptorForDeclarationException
import org.jetbrains.kotlin.resolve.source.PsiSourceElement import org.jetbrains.kotlin.resolve.source.PsiSourceElement
import org.jetbrains.kotlin.types.JetType import org.jetbrains.kotlin.types.JetType
import java.util.ArrayList import java.util.*
import java.util.LinkedHashMap
public class AutomaticVariableRenamer( public class AutomaticVariableRenamer(
klass: PsiNamedElement, // PsiClass or JetClass klass: PsiNamedElement, // PsiClass or JetClass
@@ -62,7 +62,15 @@ public class AutomaticVariableRenamer(
) ?: continue ) ?: continue
if (parameterOrVariable.getTypeReference()?.isAncestor(usageElement) != true) continue if (parameterOrVariable.getTypeReference()?.isAncestor(usageElement) != true) continue
val type = (parameterOrVariable.resolveToDescriptor() as VariableDescriptor).getType()
val descriptor = try {
parameterOrVariable.resolveToDescriptor()
} catch(e: NoDescriptorForDeclarationException) {
LOG.error(e)
continue
}
val type = (descriptor as VariableDescriptor).getType()
if (type.isCollectionLikeOf(klass)) { if (type.isCollectionLikeOf(klass)) {
toUnpluralize.add(parameterOrVariable) toUnpluralize.add(parameterOrVariable)
} }
@@ -94,6 +102,10 @@ public class AutomaticVariableRenamer(
else else
canonicalName canonicalName
} }
companion object {
val LOG = Logger.getInstance(AutomaticVariableRenamer::class.java)
}
} }
private fun JetType.isCollectionLikeOf(classPsiElement: PsiNamedElement): Boolean { private fun JetType.isCollectionLikeOf(classPsiElement: PsiNamedElement): Boolean {