[ULC] Skip nullability annotation for backing field of lateinit property
This commit is contained in:
+7
-10
@@ -74,20 +74,17 @@ abstract class KtLightModifierList<out T : KtLightElement<KtModifierListOwner, P
|
||||
|
||||
return annotationsForEntries + filteredNonSourceAnnotations
|
||||
}
|
||||
if ((modifierListOwner is KtLightMember<*> && modifierListOwner !is KtLightFieldImpl.KtLightEnumConstant)
|
||||
|| modifierListOwner is LightParameter
|
||||
) {
|
||||
|
||||
if (fastCheckIsNullabilityApplied(modifierListOwner)) {
|
||||
if (fastCheckIsNullabilityApplied(modifierListOwner)) {
|
||||
|
||||
val nullabilityAnnotation = when (modifierListOwner) {
|
||||
is KtUltraLightElementWithNullabilityAnnotation<*, *> -> KtUltraLightNullabilityAnnotation(modifierListOwner, this)
|
||||
else -> KtLightNullabilityAnnotation(modifierListOwner as KtLightElement<*, PsiModifierListOwner>, this)
|
||||
}
|
||||
|
||||
return annotationsForEntries + listOf(nullabilityAnnotation)
|
||||
val nullabilityAnnotation = when (modifierListOwner) {
|
||||
is KtUltraLightElementWithNullabilityAnnotation<*, *> -> KtUltraLightNullabilityAnnotation(modifierListOwner, this)
|
||||
else -> KtLightNullabilityAnnotation(modifierListOwner as KtLightElement<*, PsiModifierListOwner>, this)
|
||||
}
|
||||
|
||||
return annotationsForEntries + listOf(nullabilityAnnotation)
|
||||
}
|
||||
|
||||
return annotationsForEntries
|
||||
}
|
||||
}
|
||||
|
||||
@@ -26,6 +26,7 @@ import org.jetbrains.kotlin.asJava.elements.PsiElementWithOrigin
|
||||
import org.jetbrains.kotlin.asJava.elements.*
|
||||
import org.jetbrains.kotlin.builtins.jvm.JavaToKotlinClassMap
|
||||
import org.jetbrains.kotlin.codegen.state.KotlinTypeMapper
|
||||
import org.jetbrains.kotlin.lexer.KtTokens
|
||||
import org.jetbrains.kotlin.load.java.JvmAbi
|
||||
import org.jetbrains.kotlin.load.java.propertyNameByGetMethodName
|
||||
import org.jetbrains.kotlin.load.java.propertyNameBySetMethodName
|
||||
@@ -228,12 +229,17 @@ fun KtLightMethod.checkIsMangled(): Boolean {
|
||||
|
||||
fun fastCheckIsNullabilityApplied(lightElement: KtLightElement<*, PsiModifierListOwner>): Boolean {
|
||||
|
||||
val elementIsApplicable =
|
||||
(lightElement is KtLightMember<*> && lightElement !is KtLightFieldImpl.KtLightEnumConstant) || lightElement is LightParameter
|
||||
if (!elementIsApplicable) return false
|
||||
|
||||
val annotatedElement = lightElement.kotlinOrigin ?: return true
|
||||
|
||||
// all data-class generated members are not-null
|
||||
if (annotatedElement is KtClass && annotatedElement.isData()) return true
|
||||
|
||||
if (lightElement is PsiField && lightElement.hasModifierProperty(PsiModifier.PRIVATE)) return false
|
||||
// backing fields for lateinit props are skipped
|
||||
if (lightElement is KtLightField && annotatedElement is KtProperty && annotatedElement.hasModifier(KtTokens.LATEINIT_KEYWORD)) return false
|
||||
|
||||
if (annotatedElement is KtParameter) {
|
||||
val containingClassOrObject = annotatedElement.containingClassOrObject
|
||||
|
||||
Reference in New Issue
Block a user