diff --git a/tools/intellij-plugin/src/diagnostics/fix/ConvertToPlainTextFix.kt b/tools/intellij-plugin/src/diagnostics/fix/ConvertToPlainTextFix.kt index 1b0c8c634..dc314655f 100644 --- a/tools/intellij-plugin/src/diagnostics/fix/ConvertToPlainTextFix.kt +++ b/tools/intellij-plugin/src/diagnostics/fix/ConvertToPlainTextFix.kt @@ -12,29 +12,16 @@ package net.mamoe.mirai.console.intellij.diagnostics.fix import com.intellij.openapi.editor.Editor import com.intellij.openapi.project.Project import com.intellij.psi.PsiFile -import org.jetbrains.kotlin.descriptors.DeclarationDescriptor import org.jetbrains.kotlin.idea.caches.resolve.analyze import org.jetbrains.kotlin.idea.caches.resolve.resolveToCall import org.jetbrains.kotlin.idea.core.ShortenReferences -import org.jetbrains.kotlin.idea.imports.canBeAddedToImport -import org.jetbrains.kotlin.idea.imports.importableFqName import org.jetbrains.kotlin.idea.inspections.KotlinUniversalQuickFix import org.jetbrains.kotlin.idea.quickfix.KotlinCrossLanguageQuickFixAction -import org.jetbrains.kotlin.idea.references.mainReference -import org.jetbrains.kotlin.idea.references.resolveMainReferenceToDescriptors -import org.jetbrains.kotlin.idea.references.resolveToDescriptors -import org.jetbrains.kotlin.idea.util.ImportDescriptorResult -import org.jetbrains.kotlin.idea.util.ImportInsertHelper import org.jetbrains.kotlin.idea.util.getFactoryForImplicitReceiverWithSubtypeOf import org.jetbrains.kotlin.idea.util.getResolutionScope import org.jetbrains.kotlin.nj2k.postProcessing.resolve import org.jetbrains.kotlin.psi.* -import org.jetbrains.kotlin.psi.psiUtil.collectDescendantsOfType -import org.jetbrains.kotlin.psi.psiUtil.getQualifiedElementSelector -import org.jetbrains.kotlin.psi.psiUtil.getReceiverExpression import org.jetbrains.kotlin.psi.psiUtil.referenceExpression -import org.jetbrains.kotlin.resolve.BindingContext -import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode class ConvertToPlainTextFix( /** @@ -102,39 +89,4 @@ class ConvertToPlainTextFix( } } - - fun applyImport(targetElement: KtElement) { - val targets = targetElement.resolveMainReferenceToDescriptors() - if (targets.isEmpty()) return - - val fqName = targets.map { it.importableFqName!! }.single() - - val file = targetElement.containingKtFile - val helper = ImportInsertHelper.getInstance(targetElement.project) - if (helper.importDescriptor(file, targets.first()) == ImportDescriptorResult.FAIL) return - - val qualifiedExpressions = file.collectDescendantsOfType { qualifiedExpression -> - val selector = qualifiedExpression.getQualifiedElementSelector() as? KtNameReferenceExpression - selector?.getReferencedNameAsName() == fqName.shortName() && target(qualifiedExpression)?.importableFqName == fqName - } - val userTypes = file.collectDescendantsOfType { userType -> - val selector = userType.getQualifiedElementSelector() as? KtNameReferenceExpression - selector?.getReferencedNameAsName() == fqName.shortName() && target(userType)?.importableFqName == fqName - } - - //TODO: not deep - ShortenReferences.DEFAULT.process(qualifiedExpressions + userTypes) - } - - private fun target(qualifiedElement: KtElement): DeclarationDescriptor? { - val nameExpression = qualifiedElement.getQualifiedElementSelector() as? KtNameReferenceExpression ?: return null - val receiver = nameExpression.getReceiverExpression() ?: return null - val bindingContext = qualifiedElement.analyze(BodyResolveMode.PARTIAL) - if (bindingContext[BindingContext.QUALIFIER, receiver] == null) return null - - val targets = nameExpression.mainReference.resolveToDescriptors(bindingContext) - if (targets.isEmpty()) return null - if (!targets.all { it.canBeAddedToImport() }) return null - return targets.singleOrNull() - } }