Reformat: unused symbol inspection
This commit is contained in:
@@ -113,8 +113,7 @@ class UnusedSymbolInspection : AbstractKotlinInspection() {
|
|||||||
for (pattern in annotationPatterns) {
|
for (pattern in annotationPatterns) {
|
||||||
val hasAnnotation = if (pattern.endsWith(".*")) {
|
val hasAnnotation = if (pattern.endsWith(".*")) {
|
||||||
annotationsPresent.any { it.startsWith(pattern.dropLast(1)) }
|
annotationsPresent.any { it.startsWith(pattern.dropLast(1)) }
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
pattern in annotationsPresent
|
pattern in annotationsPresent
|
||||||
}
|
}
|
||||||
if (hasAnnotation) return true
|
if (hasAnnotation) return true
|
||||||
@@ -195,7 +194,8 @@ class UnusedSymbolInspection : AbstractKotlinInspection() {
|
|||||||
for (name in listOf(declaration.name) + declaration.getAccessorNames() + listOfNotNull(declaration.getClassNameForCompanionObject())) {
|
for (name in listOf(declaration.name) + declaration.getAccessorNames() + listOfNotNull(declaration.getClassNameForCompanionObject())) {
|
||||||
if (name == null) continue
|
if (name == null) continue
|
||||||
when (psiSearchHelper.isCheapEnoughToSearchConsideringOperators(name, useScope, null, null)) {
|
when (psiSearchHelper.isCheapEnoughToSearchConsideringOperators(name, useScope, null, null)) {
|
||||||
ZERO_OCCURRENCES -> {} // go on, check other names
|
ZERO_OCCURRENCES -> {
|
||||||
|
} // go on, check other names
|
||||||
FEW_OCCURRENCES -> zeroOccurrences = false
|
FEW_OCCURRENCES -> zeroOccurrences = false
|
||||||
TOO_MANY_OCCURRENCES -> return true // searching usages is too expensive; behave like it is used
|
TOO_MANY_OCCURRENCES -> return true // searching usages is too expensive; behave like it is used
|
||||||
}
|
}
|
||||||
@@ -204,14 +204,12 @@ class UnusedSymbolInspection : AbstractKotlinInspection() {
|
|||||||
if (zeroOccurrences) {
|
if (zeroOccurrences) {
|
||||||
if (declaration is KtObjectDeclaration && declaration.isCompanion()) {
|
if (declaration is KtObjectDeclaration && declaration.isCompanion()) {
|
||||||
// go on: companion object can be used only in containing class
|
// go on: companion object can be used only in containing class
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
KotlinSourceFilterScope.projectSources(useScope, declaration.project)
|
KotlinSourceFilterScope.projectSources(useScope, declaration.project)
|
||||||
}
|
} else useScope
|
||||||
else useScope
|
|
||||||
|
|
||||||
return (declaration is KtObjectDeclaration && declaration.isCompanion() &&
|
return (declaration is KtObjectDeclaration && declaration.isCompanion() &&
|
||||||
declaration.getBody()?.declarations?.isNotEmpty() == true) ||
|
declaration.getBody()?.declarations?.isNotEmpty() == true) ||
|
||||||
@@ -244,15 +242,15 @@ class UnusedSymbolInspection : AbstractKotlinInspection() {
|
|||||||
val importedFrom = import.importedReference?.getQualifiedElementSelector()?.mainReference?.resolve()
|
val importedFrom = import.importedReference?.getQualifiedElementSelector()?.mainReference?.resolve()
|
||||||
as? KtClassOrObject ?: return true
|
as? KtClassOrObject ?: return true
|
||||||
return importedFrom.declarations.none { it is KtNamedDeclaration && hasNonTrivialUsages(it) }
|
return importedFrom.declarations.none { it is KtNamedDeclaration && hasNonTrivialUsages(it) }
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
if (import.importedFqName != declaration.fqName) {
|
if (import.importedFqName != declaration.fqName) {
|
||||||
val importedDeclaration =
|
val importedDeclaration =
|
||||||
import.importedReference?.getQualifiedElementSelector()?.mainReference?.resolve() as? KtNamedDeclaration
|
import.importedReference?.getQualifiedElementSelector()?.mainReference?.resolve() as? KtNamedDeclaration
|
||||||
?: return true
|
?: return true
|
||||||
if (declaration is KtObjectDeclaration ||
|
if (declaration is KtObjectDeclaration ||
|
||||||
(declaration is KtClass && declaration.isEnum()) ||
|
(declaration is KtClass && declaration.isEnum()) ||
|
||||||
importedDeclaration.containingClassOrObject is KtObjectDeclaration) {
|
importedDeclaration.containingClassOrObject is KtObjectDeclaration
|
||||||
|
) {
|
||||||
return declaration !in importedDeclaration.parentsWithSelf && !hasNonTrivialUsages(importedDeclaration)
|
return declaration !in importedDeclaration.parentsWithSelf && !hasNonTrivialUsages(importedDeclaration)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -267,7 +265,8 @@ class UnusedSymbolInspection : AbstractKotlinInspection() {
|
|||||||
val referenceUsed: Boolean by lazy { !ReferencesSearch.search(declaration, useScope).forEach(::checkReference) }
|
val referenceUsed: Boolean by lazy { !ReferencesSearch.search(declaration, useScope).forEach(::checkReference) }
|
||||||
|
|
||||||
if (descriptor is FunctionDescriptor &&
|
if (descriptor is FunctionDescriptor &&
|
||||||
DescriptorUtils.getAnnotationByFqName(descriptor.annotations, JvmFileClassUtil.JVM_NAME) != null) {
|
DescriptorUtils.getAnnotationByFqName(descriptor.annotations, JvmFileClassUtil.JVM_NAME) != null
|
||||||
|
) {
|
||||||
if (referenceUsed) return true
|
if (referenceUsed) return true
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -292,8 +291,7 @@ class UnusedSymbolInspection : AbstractKotlinInspection() {
|
|||||||
val descriptor = declaration.toDescriptor() as? CallableMemberDescriptor ?: return false
|
val descriptor = declaration.toDescriptor() as? CallableMemberDescriptor ?: return false
|
||||||
if (descriptor.modality == Modality.ABSTRACT) return false
|
if (descriptor.modality == Modality.ABSTRACT) return false
|
||||||
val lightMethods = declaration.toLightMethods()
|
val lightMethods = declaration.toLightMethods()
|
||||||
return DefinitionsScopedSearch.search(ownerClass, useScope).any {
|
return DefinitionsScopedSearch.search(ownerClass, useScope).any { element: PsiElement ->
|
||||||
element: PsiElement ->
|
|
||||||
|
|
||||||
when (element) {
|
when (element) {
|
||||||
is KtLightClass -> {
|
is KtLightClass -> {
|
||||||
@@ -304,8 +302,7 @@ class UnusedSymbolInspection : AbstractKotlinInspection() {
|
|||||||
memberBySignature.overriddenDescriptors.any { it != descriptor }
|
memberBySignature.overriddenDescriptors.any { it != descriptor }
|
||||||
}
|
}
|
||||||
is PsiClass ->
|
is PsiClass ->
|
||||||
lightMethods.any {
|
lightMethods.any { lightMethod ->
|
||||||
lightMethod ->
|
|
||||||
|
|
||||||
val sameMethods = element.findMethodsBySignature(lightMethod, true)
|
val sameMethods = element.findMethodsBySignature(lightMethod, true)
|
||||||
sameMethods.all { it.containingClass != element } &&
|
sameMethods.all { it.containingClass != element } &&
|
||||||
@@ -353,10 +350,12 @@ class UnusedSymbolInspection : AbstractKotlinInspection() {
|
|||||||
if (fqName.startsWith("kotlin.")
|
if (fqName.startsWith("kotlin.")
|
||||||
|| fqName.startsWith("java.")
|
|| fqName.startsWith("java.")
|
||||||
|| fqName.startsWith("javax.")
|
|| fqName.startsWith("javax.")
|
||||||
|| fqName.startsWith("org.jetbrains.") && AnnotationUtil.isJetbrainsAnnotation(StringUtil.getShortName(fqName)))
|
|| fqName.startsWith("org.jetbrains.") && AnnotationUtil.isJetbrainsAnnotation(StringUtil.getShortName(fqName))
|
||||||
|
)
|
||||||
continue
|
continue
|
||||||
|
|
||||||
val intentionAction = QuickFixFactory.getInstance().createAddToDependencyInjectionAnnotationsFix(declaration.project, fqName, "declarations")
|
val intentionAction =
|
||||||
|
QuickFixFactory.getInstance().createAddToDependencyInjectionAnnotationsFix(declaration.project, fqName, "declarations")
|
||||||
list.add(IntentionWrapper(intentionAction, declaration.containingFile))
|
list.add(IntentionWrapper(intentionAction, declaration.containingFile))
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -380,8 +379,7 @@ class SafeDeleteFix(declaration: KtDeclaration) : LocalQuickFix {
|
|||||||
if (!FileModificationService.getInstance().prepareFileForWrite(declaration.containingFile)) return
|
if (!FileModificationService.getInstance().prepareFileForWrite(declaration.containingFile)) return
|
||||||
if (declaration is KtParameter && declaration.parent is KtParameterList && declaration.parent?.parent is KtFunction) {
|
if (declaration is KtParameter && declaration.parent is KtParameterList && declaration.parent?.parent is KtFunction) {
|
||||||
RemoveUnusedFunctionParameterFix(declaration).invoke(project, declaration.findExistingEditor(), declaration.containingKtFile)
|
RemoveUnusedFunctionParameterFix(declaration).invoke(project, declaration.findExistingEditor(), declaration.containingKtFile)
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
ApplicationManager.getApplication().invokeLater(
|
ApplicationManager.getApplication().invokeLater(
|
||||||
{ SafeDeleteHandler.invoke(project, arrayOf(declaration), false) },
|
{ SafeDeleteHandler.invoke(project, arrayOf(declaration), false) },
|
||||||
ModalityState.NON_MODAL
|
ModalityState.NON_MODAL
|
||||||
|
|||||||
Reference in New Issue
Block a user