mirror of
https://github.com/mamoe/mirai.git
synced 2025-02-14 12:22:27 +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.editor.Editor
|
||||||
import com.intellij.openapi.project.Project
|
import com.intellij.openapi.project.Project
|
||||||
import com.intellij.psi.PsiFile
|
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.analyze
|
||||||
import org.jetbrains.kotlin.idea.caches.resolve.resolveToCall
|
import org.jetbrains.kotlin.idea.caches.resolve.resolveToCall
|
||||||
import org.jetbrains.kotlin.idea.core.ShortenReferences
|
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.inspections.KotlinUniversalQuickFix
|
||||||
import org.jetbrains.kotlin.idea.quickfix.KotlinCrossLanguageQuickFixAction
|
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.getFactoryForImplicitReceiverWithSubtypeOf
|
||||||
import org.jetbrains.kotlin.idea.util.getResolutionScope
|
import org.jetbrains.kotlin.idea.util.getResolutionScope
|
||||||
import org.jetbrains.kotlin.nj2k.postProcessing.resolve
|
import org.jetbrains.kotlin.nj2k.postProcessing.resolve
|
||||||
import org.jetbrains.kotlin.psi.*
|
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.psi.psiUtil.referenceExpression
|
||||||
import org.jetbrains.kotlin.resolve.BindingContext
|
|
||||||
import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode
|
|
||||||
|
|
||||||
class ConvertToPlainTextFix(
|
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