(UnusedSymbolInspection) optimized path for data-classes
This commit is contained in:
@@ -49,7 +49,6 @@ import org.jetbrains.kotlin.idea.core.script.configuration.DefaultScriptingSuppo
|
|||||||
import org.jetbrains.kotlin.idea.core.toDescriptor
|
import org.jetbrains.kotlin.idea.core.toDescriptor
|
||||||
import org.jetbrains.kotlin.idea.findUsages.KotlinFindUsagesHandlerFactory
|
import org.jetbrains.kotlin.idea.findUsages.KotlinFindUsagesHandlerFactory
|
||||||
import org.jetbrains.kotlin.idea.findUsages.handlers.KotlinFindClassUsagesHandler
|
import org.jetbrains.kotlin.idea.findUsages.handlers.KotlinFindClassUsagesHandler
|
||||||
import org.jetbrains.kotlin.idea.imports.importableFqName
|
|
||||||
import org.jetbrains.kotlin.idea.inspections.collections.isCalling
|
import org.jetbrains.kotlin.idea.inspections.collections.isCalling
|
||||||
import org.jetbrains.kotlin.idea.intentions.callExpression
|
import org.jetbrains.kotlin.idea.intentions.callExpression
|
||||||
import org.jetbrains.kotlin.idea.intentions.isFinalizeMethod
|
import org.jetbrains.kotlin.idea.intentions.isFinalizeMethod
|
||||||
@@ -63,9 +62,9 @@ import org.jetbrains.kotlin.idea.search.ideaExtensions.KotlinReferencesSearchOpt
|
|||||||
import org.jetbrains.kotlin.idea.search.ideaExtensions.KotlinReferencesSearchParameters
|
import org.jetbrains.kotlin.idea.search.ideaExtensions.KotlinReferencesSearchParameters
|
||||||
import org.jetbrains.kotlin.idea.search.isCheapEnoughToSearchConsideringOperators
|
import org.jetbrains.kotlin.idea.search.isCheapEnoughToSearchConsideringOperators
|
||||||
import org.jetbrains.kotlin.idea.search.projectScope
|
import org.jetbrains.kotlin.idea.search.projectScope
|
||||||
import org.jetbrains.kotlin.idea.search.usagesSearch.dataClassComponentFunction
|
|
||||||
import org.jetbrains.kotlin.idea.search.usagesSearch.getAccessorNames
|
import org.jetbrains.kotlin.idea.search.usagesSearch.getAccessorNames
|
||||||
import org.jetbrains.kotlin.idea.search.usagesSearch.getClassNameForCompanionObject
|
import org.jetbrains.kotlin.idea.search.usagesSearch.getClassNameForCompanionObject
|
||||||
|
import org.jetbrains.kotlin.idea.search.usagesSearch.isDataClassProperty
|
||||||
import org.jetbrains.kotlin.idea.stubindex.KotlinSourceFilterScope
|
import org.jetbrains.kotlin.idea.stubindex.KotlinSourceFilterScope
|
||||||
import org.jetbrains.kotlin.idea.util.ProjectRootsUtil
|
import org.jetbrains.kotlin.idea.util.ProjectRootsUtil
|
||||||
import org.jetbrains.kotlin.idea.util.application.isUnitTestMode
|
import org.jetbrains.kotlin.idea.util.application.isUnitTestMode
|
||||||
@@ -284,7 +283,7 @@ class UnusedSymbolInspection : AbstractKotlinInspection() {
|
|||||||
if (declaration is KtProperty && declaration.isSerializationImplicitlyUsedField()) return
|
if (declaration is KtProperty && declaration.isSerializationImplicitlyUsedField()) return
|
||||||
if (declaration is KtNamedFunction && declaration.isSerializationImplicitlyUsedMethod()) return
|
if (declaration is KtNamedFunction && declaration.isSerializationImplicitlyUsedMethod()) return
|
||||||
// properties can be referred by component1/component2, which is too expensive to search, don't mark them as unused
|
// properties can be referred by component1/component2, which is too expensive to search, don't mark them as unused
|
||||||
if (declaration is KtParameter && declaration.dataClassComponentFunction() != null) return
|
if (declaration is KtParameter && declaration.isDataClassProperty()) return
|
||||||
// experimental annotations
|
// experimental annotations
|
||||||
if (descriptor is ClassDescriptor && descriptor.kind == ClassKind.ANNOTATION_CLASS) {
|
if (descriptor is ClassDescriptor && descriptor.kind == ClassKind.ANNOTATION_CLASS) {
|
||||||
val fqName = descriptor.fqNameSafe.asString()
|
val fqName = descriptor.fqNameSafe.asString()
|
||||||
@@ -592,9 +591,8 @@ class UnusedSymbolInspection : AbstractKotlinInspection() {
|
|||||||
list.add(SafeDeleteFix(declaration))
|
list.add(SafeDeleteFix(declaration))
|
||||||
|
|
||||||
for (annotationEntry in declaration.annotationEntries) {
|
for (annotationEntry in declaration.annotationEntries) {
|
||||||
val typeElement = annotationEntry.typeReference?.typeElement as? KtUserType ?: continue
|
val resolvedName = annotationEntry.resolveToDescriptorIfAny() ?: continue
|
||||||
val target = typeElement.referenceExpression?.resolveMainReferenceToDescriptors()?.singleOrNull() ?: continue
|
val fqName = resolvedName.fqName?.asString() ?: continue
|
||||||
val fqName = target.importableFqName?.asString() ?: continue
|
|
||||||
|
|
||||||
// checks taken from com.intellij.codeInspection.util.SpecialAnnotationsUtilBase.createAddToSpecialAnnotationFixes
|
// checks taken from com.intellij.codeInspection.util.SpecialAnnotationsUtilBase.createAddToSpecialAnnotationFixes
|
||||||
if (fqName.startsWith("kotlin.")
|
if (fqName.startsWith("kotlin.")
|
||||||
|
|||||||
Reference in New Issue
Block a user