blob: c912fca2d250956019fb2cd8bae13ee902af28cf (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
|
// Copyright 2000-2021 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package org.jetbrains.uast.kotlin
import com.intellij.psi.JavaPsiFacade
import com.intellij.psi.PsiAnnotation
import com.intellij.psi.PsiClass
import com.intellij.psi.PsiElement
import com.intellij.psi.search.GlobalSearchScope
import org.jetbrains.annotations.ApiStatus
import org.jetbrains.annotations.NotNull
import org.jetbrains.annotations.Nullable
import org.jetbrains.kotlin.types.typeUtil.TypeNullability
import org.jetbrains.uast.*
import org.jetbrains.uast.kotlin.internal.DelegatedMultiResolve
@ApiStatus.Internal
class KotlinNullabilityUAnnotation(
private val baseKotlinUastResolveProviderService: BaseKotlinUastResolveProviderService,
val annotatedElement: PsiElement,
override val uastParent: UElement?
) : UAnnotationEx, UAnchorOwner, DelegatedMultiResolve {
override val uastAnchor: UIdentifier? = null
override val attributeValues: List<UNamedExpression>
get() = emptyList()
override val psi: PsiElement?
get() = null
override val javaPsi: PsiAnnotation?
get() = null
override val sourcePsi: PsiElement?
get() = null
private val nullability : TypeNullability? by lz {
baseKotlinUastResolveProviderService.nullability(annotatedElement)
}
override val qualifiedName: String?
get() = when (nullability) {
TypeNullability.NOT_NULL -> NotNull::class.qualifiedName
TypeNullability.NULLABLE -> Nullable::class.qualifiedName
TypeNullability.FLEXIBLE -> null
null -> null
}
override fun findAttributeValue(name: String?): UExpression? = null
override fun findDeclaredAttributeValue(name: String?): UExpression? = null
private val _resolved: PsiClass? by lz {
qualifiedName?.let {
val project = annotatedElement.project
JavaPsiFacade.getInstance(project).findClass(it, GlobalSearchScope.allScope(project))
}
}
override fun resolve(): PsiClass? = _resolved
}
|