mirror of
https://github.com/mamoe/mirai.git
synced 2025-02-10 12:57:03 +08:00
Code cleanup
This commit is contained in:
parent
1160ff2ad2
commit
7af1821fa6
@ -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<KtDotQualifiedExpression> { qualifiedExpression ->
|
||||
val selector = qualifiedExpression.getQualifiedElementSelector() as? KtNameReferenceExpression
|
||||
selector?.getReferencedNameAsName() == fqName.shortName() && target(qualifiedExpression)?.importableFqName == fqName
|
||||
}
|
||||
val userTypes = file.collectDescendantsOfType<KtUserType> { 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()
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user