Used KtReference.resolvesByNames instead of own code

This commit is contained in:
Valentin Kipyatkov
2016-10-06 19:48:32 +03:00
parent 5734f2ba9b
commit 326db55835
2 changed files with 3 additions and 52 deletions
@@ -285,28 +285,6 @@ public class KtPsiUtil {
return entries.size() > 1 && entries.get(entries.size() - 1) == declaration;
}
@Nullable
public static Name getConventionName(@NotNull KtSimpleNameExpression simpleNameExpression) {
if (simpleNameExpression.getIdentifier() != null) {
return simpleNameExpression.getReferencedNameAsName();
}
PsiElement firstChild = simpleNameExpression.getFirstChild();
if (firstChild != null) {
IElementType elementType = firstChild.getNode().getElementType();
if (elementType instanceof KtToken) {
KtToken jetToken = (KtToken) elementType;
boolean isPrefixExpression = simpleNameExpression.getParent() instanceof KtPrefixExpression;
if (isPrefixExpression) {
return OperatorConventions.getNameForOperationSymbol(jetToken, true, false);
}
return OperatorConventions.getNameForOperationSymbol(jetToken);
}
}
return null;
}
@Nullable
@Contract("null, _ -> null")
public static PsiElement getTopmostParentOfTypes(
@@ -50,12 +50,12 @@ import org.jetbrains.kotlin.idea.core.KotlinIndicesHelper
import org.jetbrains.kotlin.idea.core.isVisible
import org.jetbrains.kotlin.idea.imports.canBeReferencedViaImport
import org.jetbrains.kotlin.idea.project.ProjectStructureUtil
import org.jetbrains.kotlin.idea.references.mainReference
import org.jetbrains.kotlin.idea.util.CallTypeAndReceiver
import org.jetbrains.kotlin.idea.util.getResolutionScope
import org.jetbrains.kotlin.incremental.components.NoLookupLocation
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.psi.*
import org.jetbrains.kotlin.psi.KtPsiUtil.getConventionName
import org.jetbrains.kotlin.psi.KtPsiUtil.isSelectorInQualified
import org.jetbrains.kotlin.psi.psiUtil.anyDescendantOfType
import org.jetbrains.kotlin.psi.psiUtil.getQualifiedExpressionForSelectorOrThis
@@ -70,7 +70,6 @@ import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode
import org.jetbrains.kotlin.resolve.scopes.ExplicitImportsScope
import org.jetbrains.kotlin.resolve.scopes.utils.addImportingScope
import org.jetbrains.kotlin.resolve.scopes.utils.collectFunctions
import org.jetbrains.kotlin.types.expressions.OperatorConventions
import org.jetbrains.kotlin.util.OperatorNameConventions
import org.jetbrains.kotlin.utils.CachedValueProperty
import org.jetbrains.kotlin.utils.addToStdlib.singletonList
@@ -243,7 +242,7 @@ internal abstract class OrdinaryImportFixBase<T : KtExpression>(expression: T) :
internal class ImportFix(expression: KtSimpleNameExpression) : OrdinaryImportFixBase<KtSimpleNameExpression>(expression) {
override fun getCallTypeAndReceiver() = CallTypeAndReceiver.detect(element)
override val importNames = element.extractImportNames()
override val importNames = element.mainReference.resolvesByNames
override fun getSupportedErrors() = ERRORS
@@ -257,32 +256,6 @@ internal class ImportFix(expression: KtSimpleNameExpression) : OrdinaryImportFix
}
}
private fun KtSimpleNameExpression.extractImportNames(): Collection<Name> {
if (getIdentifier() == null) {
val conventionName = getConventionName(this)
if (conventionName != null) {
if (this is KtOperationReferenceExpression) {
val elementType = firstChild.node.elementType
if (elementType in OperatorConventions.ASSIGNMENT_OPERATIONS) {
val counterpart = OperatorConventions.ASSIGNMENT_OPERATION_COUNTERPARTS[elementType]
val counterpartName = OperatorConventions.BINARY_OPERATION_NAMES[counterpart]
if (counterpartName != null) {
return listOf(conventionName, counterpartName)
}
}
}
return conventionName.singletonOrEmptyList()
}
}
else if (Name.isValidIdentifier(getReferencedName())) {
return Name.identifier(getReferencedName()).singletonOrEmptyList()
}
return emptyList()
}
internal class InvokeImportFix(expression: KtExpression) : OrdinaryImportFixBase<KtExpression>(expression) {
override val importNames = OperatorNameConventions.INVOKE.singletonList()
@@ -474,7 +447,7 @@ internal class ImportMemberFix(expression: KtSimpleNameExpression) : ImportFixBa
internal class ImportForMismatchingArgumentsFix(expression: KtSimpleNameExpression) : ImportFixBase<KtSimpleNameExpression>(expression) {
override fun getCallTypeAndReceiver() = CallTypeAndReceiver.detect(element)
override val importNames = element.extractImportNames()
override val importNames = element.mainReference.resolvesByNames
override fun getSupportedErrors() = ERRORS