[AA LC] Add @java.lang.Override on override functions

This commit is contained in:
Dmitriy Novozhilov
2022-07-28 12:29:27 +03:00
parent d60f3980b1
commit ab2aa3117b
41 changed files with 426 additions and 49 deletions
@@ -21,6 +21,7 @@ import org.jetbrains.kotlin.analysis.api.symbols.markers.KtAnnotatedSymbol
import org.jetbrains.kotlin.builtins.StandardNames.DEFAULT_VALUE_PARAMETER
import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget
import org.jetbrains.kotlin.light.classes.symbol.NullabilityType
import org.jetbrains.kotlin.light.classes.symbol.methods.SymbolLightMethod
import org.jetbrains.kotlin.load.java.JvmAbi.JVM_FIELD_ANNOTATION_CLASS_ID
import org.jetbrains.kotlin.load.java.JvmAnnotationNames.RETENTION_POLICY_ENUM
import org.jetbrains.kotlin.name.*
@@ -108,6 +109,13 @@ internal fun KtAnnotatedSymbol.computeAnnotations(
val parentIsAnnotation = (parent as? PsiClass)?.isAnnotationType == true
val result = mutableListOf<PsiAnnotation>()
if (parent is SymbolLightMethod) {
if (parent.isDelegated || parent.isOverride()) {
result.add(SymbolLightSimpleAnnotation(java.lang.Override::class.java.name, parent))
}
}
if (annotations.isEmpty()) {
if (parentIsAnnotation) {
result.add(createRetentionRuntimeAnnotation(parent))
@@ -191,4 +191,6 @@ internal class SymbolLightAccessorMethod(
override fun getParameterList(): PsiParameterList = _parametersList
override fun isValid(): Boolean = super.isValid() && propertyAccessorSymbol.isValid()
override fun isOverride(): Boolean = propertyAccessorSymbol.isOverride
}
@@ -73,4 +73,6 @@ internal abstract class SymbolLightMethod(
lightMemberOrigin?.originalElement ?: functionSymbol.psi as? KtDeclaration
override fun isValid(): Boolean = super.isValid() && functionSymbol.isValid()
override fun isOverride(): Boolean = functionSymbol.getDirectlyOverriddenSymbols().isNotEmpty()
}
@@ -108,4 +108,6 @@ internal abstract class SymbolLightMethodBase(
val moduleName = (getKtModule(project) as? KtSourceModule)?.moduleName ?: return defaultName
return mangleInternalName(defaultName, moduleName)
}
}
abstract fun isOverride(): Boolean
}
@@ -66,4 +66,6 @@ internal class SymbolLightNoArgConstructor(
override fun hashCode(): Int = containingClass.hashCode()
override fun isValid(): Boolean = super.isValid() && containingClass.isValid
override fun isOverride(): Boolean = false
}