JVM: Generate object and companion object INSTANCE fields as @NotNull
This commit is contained in:
@@ -10,18 +10,19 @@ import com.intellij.psi.*
|
||||
import com.intellij.psi.impl.light.LightFieldBuilder
|
||||
import com.intellij.psi.util.TypeConversionUtil
|
||||
import org.jetbrains.annotations.NonNls
|
||||
import org.jetbrains.annotations.NotNull
|
||||
import org.jetbrains.kotlin.asJava.LightClassGenerationSupport
|
||||
import org.jetbrains.kotlin.asJava.builder.LightMemberOriginForDeclaration
|
||||
import org.jetbrains.kotlin.asJava.elements.*
|
||||
import org.jetbrains.kotlin.asJava.elements.KtLightElement
|
||||
import org.jetbrains.kotlin.asJava.elements.KtLightField
|
||||
import org.jetbrains.kotlin.asJava.elements.KtLightFieldForSourceDeclarationSupport
|
||||
import org.jetbrains.kotlin.asJava.elements.KtUltraLightSimpleModifierList
|
||||
import org.jetbrains.kotlin.codegen.PropertyCodegen
|
||||
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.PropertyDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.VariableDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget
|
||||
import org.jetbrains.kotlin.idea.KotlinLanguage
|
||||
import org.jetbrains.kotlin.lexer.KtModifierKeywordToken
|
||||
import org.jetbrains.kotlin.lexer.KtTokens
|
||||
import org.jetbrains.kotlin.lexer.KtTokens.VAL_KEYWORD
|
||||
import org.jetbrains.kotlin.load.kotlin.TypeMappingMode
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
import org.jetbrains.kotlin.psi.*
|
||||
@@ -76,7 +77,8 @@ internal open class KtUltraLightFieldImpl protected constructor(
|
||||
KtUltraLightSimpleModifierListField(support, declaration, this, modifiers)
|
||||
}
|
||||
|
||||
override fun isEquivalentTo(another: PsiElement?): Boolean = kotlinOrigin == another || (another as? KtLightField)?.kotlinOrigin == kotlinOrigin
|
||||
override fun isEquivalentTo(another: PsiElement?): Boolean =
|
||||
kotlinOrigin == another || (another as? KtLightField)?.kotlinOrigin == kotlinOrigin
|
||||
|
||||
override fun getModifierList(): PsiModifierList = modifierList
|
||||
|
||||
@@ -105,11 +107,12 @@ internal open class KtUltraLightFieldImpl protected constructor(
|
||||
}
|
||||
|
||||
override val qualifiedNameForNullabilityAnnotation: String?
|
||||
get() {
|
||||
// We don't generate nullability annotations for non-backing fields in backend
|
||||
val typeForAnnotation = kotlinType?.takeUnless { declaration is KtEnumEntry || declaration is KtObjectDeclaration }
|
||||
return computeQualifiedNameForNullabilityAnnotation(typeForAnnotation)
|
||||
}
|
||||
get() =
|
||||
when (declaration) {
|
||||
is KtObjectDeclaration -> NotNull::class.java.name
|
||||
is KtEnumEntry -> null
|
||||
else -> computeQualifiedNameForNullabilityAnnotation(kotlinType)
|
||||
}
|
||||
|
||||
override val psiTypeForNullabilityAnnotation: PsiType?
|
||||
get() = type
|
||||
|
||||
@@ -309,6 +309,9 @@ open class KtLightNullabilityAnnotation<D : KtLightElement<*, PsiModifierListOwn
|
||||
// all data-class generated members are not-null
|
||||
if (annotatedElement is KtClass && annotatedElement.isData()) return NotNull::class.java.name
|
||||
|
||||
// objects and companion objects are not null
|
||||
if (annotatedElement is KtObjectDeclaration) return NotNull::class.java.name
|
||||
|
||||
if (annotatedElement is KtParameter) {
|
||||
if (annotatedElement.containingClassOrObject?.isAnnotation() == true) return null
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user