KT-8273 Don't mark serialVersionUID as unused
#KT-8273 fixed
This commit is contained in:
@@ -18,6 +18,7 @@ package org.jetbrains.kotlin.idea.inspections
|
||||
|
||||
import com.intellij.codeInsight.FileModificationService
|
||||
import com.intellij.codeInsight.daemon.QuickFixBundle
|
||||
import com.intellij.codeInsight.daemon.impl.analysis.HighlightUtil
|
||||
import com.intellij.codeInspection.*
|
||||
import com.intellij.codeInspection.deadCode.UnusedDeclarationInspection
|
||||
import com.intellij.codeInspection.ex.EntryPointsManager
|
||||
@@ -45,6 +46,7 @@ import org.jetbrains.kotlin.idea.util.ProjectRootsUtil
|
||||
import org.jetbrains.kotlin.lexer.JetTokens
|
||||
import org.jetbrains.kotlin.psi.*
|
||||
import org.jetbrains.kotlin.psi.psiUtil.getElementTextWithContext
|
||||
import org.jetbrains.kotlin.psi.psiUtil.getNonStrictParentOfType
|
||||
import org.jetbrains.kotlin.psi.psiUtil.isAncestor
|
||||
import org.jetbrains.kotlin.resolve.DescriptorUtils
|
||||
import org.jetbrains.kotlin.types.expressions.OperatorConventions
|
||||
@@ -77,6 +79,19 @@ public class UnusedSymbolInspection : AbstractKotlinInspection() {
|
||||
return lightElement != null && javaInspection.isEntryPoint(lightElement)
|
||||
}
|
||||
|
||||
private fun JetProperty.isSerializationImplicitlyUsedField(): Boolean {
|
||||
val ownerObject = getNonStrictParentOfType<JetClassOrObject>()
|
||||
if (ownerObject is JetObjectDeclaration && ownerObject.isCompanion()) {
|
||||
val lightClass = ownerObject.getNonStrictParentOfType<JetClass>()?.toLightClass() ?: return false
|
||||
return lightClass.getFields().any { it.getName() == getName() && HighlightUtil.isSerializationImplicitlyUsedField(it) }
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
private fun JetObjectDeclaration.hasSerializationImplicitlyUsedField(): Boolean {
|
||||
return getDeclarations().any { it is JetProperty && it.isSerializationImplicitlyUsedField() }
|
||||
}
|
||||
|
||||
// variation of IDEA's AnnotationUtil.checkAnnotatedUsingPatterns()
|
||||
private fun checkAnnotatedUsingPatterns(annotated: Annotated, annotationPatterns: Collection<String>): Boolean {
|
||||
val annotationsPresent = annotated.getAnnotations()
|
||||
@@ -141,6 +156,8 @@ public class UnusedSymbolInspection : AbstractKotlinInspection() {
|
||||
|
||||
// More expensive, resolve-based checks
|
||||
if (isEntryPoint(declaration)) return
|
||||
if (declaration is JetProperty && declaration.isSerializationImplicitlyUsedField()) return
|
||||
if (isCompanionObject && (declaration as JetObjectDeclaration).hasSerializationImplicitlyUsedField()) return
|
||||
// properties can be referred by component1/component2, which is too expensive to search, don't mark them as unused
|
||||
if (declaration is JetParameter && declaration.dataClassComponentFunctionName() != null) return
|
||||
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
// FULL_JDK
|
||||
|
||||
import kotlin.platform.platformStatic
|
||||
|
||||
class Klass : java.io.Serializable {
|
||||
companion object {
|
||||
private platformStatic val serialVersionUID: Long = 239
|
||||
}
|
||||
}
|
||||
|
||||
fun main(args: Array<String>) {
|
||||
Klass()
|
||||
}
|
||||
Reference in New Issue
Block a user