Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
小 白蛋
Intellij Community
Commits
ac16a36a
Commit
ac16a36a
authored
1 year ago
by
Jinseong Jeon
Browse files
Options
Download
Email Patches
Plain Diff
KT UAST: do not add nullability annotation to generic reified type
^KTIJ-28879 fixed
parent
1d6f6cd0
Branches unavailable
Tags unavailable
No related merge requests found
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
plugins/kotlin/uast/uast-kotlin-base/src/org/jetbrains/uast/kotlin/psi/UastFakeSourceLightMethodBase.kt
+4
-0
...etbrains/uast/kotlin/psi/UastFakeSourceLightMethodBase.kt
plugins/kotlin/uast/uast-kotlin-base/src/org/jetbrains/uast/kotlin/psi/UastKotlinPsiParameter.kt
+8
-6
...c/org/jetbrains/uast/kotlin/psi/UastKotlinPsiParameter.kt
plugins/kotlin/uast/uast-kotlin-base/tests/test/org/jetbrains/uast/test/common/kotlin/UastApiFixtureTestBase.kt
+54
-0
...tbrains/uast/test/common/kotlin/UastApiFixtureTestBase.kt
plugins/kotlin/uast/uast-kotlin-fir/src/org/jetbrains/uast/kotlin/psi/UastFakeDeserializedSymbolLightMethod.kt
+11
-0
.../uast/kotlin/psi/UastFakeDeserializedSymbolLightMethod.kt
plugins/kotlin/uast/uast-kotlin-fir/tests/test/org/jetbrains/fir/uast/test/FirUastApiFixtureTest.kt
+8
-0
...test/org/jetbrains/fir/uast/test/FirUastApiFixtureTest.kt
plugins/kotlin/uast/uast-kotlin/tests/test/org/jetbrains/uast/test/kotlin/comparison/FE1UastApiFixtureTest.kt
+8
-0
...ains/uast/test/kotlin/comparison/FE1UastApiFixtureTest.kt
with
93 additions
and
6 deletions
+93
-6
plugins/kotlin/uast/uast-kotlin-base/src/org/jetbrains/uast/kotlin/psi/UastFakeSourceLightMethodBase.kt
+
4
-
0
View file @
ac16a36a
...
...
@@ -79,6 +79,10 @@ abstract class UastFakeSourceLightMethodBase<T : KtDeclaration>(
}
override
fun
computeNullability
():
KtTypeNullability
?
{
if
(
baseResolveProviderService
.
hasInheritedGenericType
(
original
))
{
// Inherited generic type: nullity will be determined at use-site
return
null
}
if
(
isSuspendFunction
())
{
// suspend fun returns Any?, which is mapped to @Nullable java.lang.Object
return
KtTypeNullability
.
NULLABLE
...
...
This diff is collapsed.
Click to expand it.
plugins/kotlin/uast/uast-kotlin-base/src/org/jetbrains/uast/kotlin/psi/UastKotlinPsiParameter.kt
+
8
-
6
View file @
ac16a36a
...
...
@@ -35,13 +35,15 @@ class UastKotlinPsiParameter internal constructor(
get
()
=
annotationsPart
.
getOrBuild
{
val
annotations
=
SmartList
<
PsiAnnotation
>()
val
nullability
=
baseResolveProviderService
.
nullability
(
ktParameter
)
if
(
nullability
!=
null
&&
nullability
!=
KtTypeNullability
.
UNKNOWN
)
{
annotations
.
add
(
UastFakeLightNullabilityAnnotation
(
nullability
,
this
)
)
val
hasInheritedGenericType
=
baseResolveProviderService
.
hasInheritedGenericType
(
ktParameter
)
if
(!
hasInheritedGenericType
)
{
val
nullability
=
baseResolveProviderService
.
nullability
(
ktParameter
)
if
(
nullability
!=
null
&&
nullability
!=
KtTypeNullability
.
UNKNOWN
)
{
annotations
.
add
(
UastFakeLightNullabilityAnnotation
(
nullability
,
this
)
)
}
}
ktParameter
.
annotationEntries
.
mapTo
(
annotations
)
{
entry
->
KtLightAnnotationForSourceEntry
(
name
=
entry
.
shortName
?.
identifier
,
...
...
This diff is collapsed.
Click to expand it.
plugins/kotlin/uast/uast-kotlin-base/tests/test/org/jetbrains/uast/test/common/kotlin/UastApiFixtureTestBase.kt
+
54
-
0
View file @
ac16a36a
...
...
@@ -15,6 +15,7 @@ import org.jetbrains.kotlin.util.OperatorNameConventions
import
org.jetbrains.uast.*
import
com.intellij.platform.uast.testFramework.env.findElementByTextFromPsi
import
com.intellij.psi.PsiAnnotation
import
com.intellij.psi.PsiParameter
import
com.intellij.psi.PsiTypes
import
org.jetbrains.kotlin.psi.KtDestructuringDeclaration
import
org.jetbrains.kotlin.psi.psiUtil.getParentOfType
...
...
@@ -383,6 +384,31 @@ interface UastApiFixtureTestBase : UastPluginSelection {
})
}
fun
checkReifiedTypeNullability_generic
(
myFixture
:
JavaCodeInsightTestFixture
)
{
myFixture
.
configureByText
(
"main.kt"
,
"""
inline fun <reified T> inlineReified(t: T): T { return t }
inline fun <reified T> T.inlineReifiedExtension(t: T): T { return this }
"""
.
trimIndent
()
)
val
uFile
=
myFixture
.
file
.
toUElement
()
!!
uFile
.
accept
(
object
:
AbstractUastVisitor
()
{
override
fun
visitMethod
(
node
:
UMethod
):
Boolean
{
val
annotations
=
node
.
javaPsi
.
annotations
TestCase
.
assertTrue
(
annotations
.
isEmpty
())
return
super
.
visitMethod
(
node
)
}
override
fun
visitParameter
(
node
:
UParameter
):
Boolean
{
val
annotations
=
(
node
.
javaPsi
as
?
PsiParameter
)
?.
annotations
TestCase
.
assertTrue
(
annotations
?.
isEmpty
()
==
true
)
return
super
.
visitParameter
(
node
)
}
})
}
fun
checkInheritedGenericTypeNullability
(
myFixture
:
JavaCodeInsightTestFixture
)
{
myFixture
.
configureByText
(
"main.kt"
,
"""
...
...
@@ -523,6 +549,34 @@ interface UastApiFixtureTestBase : UastPluginSelection {
})
}
fun
checkGenericTypeNullability_reified
(
myFixture
:
JavaCodeInsightTestFixture
)
{
myFixture
.
configureByText
(
"main.kt"
,
"""
inline fun <reified T> inlineReified(t: T): T { return t }
inline fun <reified T> T.inlineReifiedExtension(t: T) { this }
"""
.
trimIndent
()
)
val
uFile
=
myFixture
.
file
.
toUElement
()
!!
val
service
=
ApplicationManager
.
getApplication
().
getService
(
BaseKotlinUastResolveProviderService
::
class
.
java
)
uFile
.
accept
(
object
:
AbstractUastVisitor
()
{
override
fun
visitMethod
(
node
:
UMethod
):
Boolean
{
TestCase
.
assertTrue
(
node
.
uAnnotations
.
isEmpty
())
TestCase
.
assertTrue
(
node
.
returnType
==
PsiTypes
.
voidType
()
||
service
.
hasInheritedGenericType
(
node
.
sourcePsi
!!
)
)
return
super
.
visitMethod
(
node
)
}
override
fun
visitParameter
(
node
:
UParameter
):
Boolean
{
TestCase
.
assertTrue
(
node
.
uAnnotations
.
isEmpty
())
TestCase
.
assertTrue
(
service
.
hasInheritedGenericType
(
node
.
sourcePsi
!!
))
return
super
.
visitParameter
(
node
)
}
})
}
fun
checkImplicitReceiverType
(
myFixture
:
JavaCodeInsightTestFixture
)
{
myFixture
.
addClass
(
"""
...
...
This diff is collapsed.
Click to expand it.
plugins/kotlin/uast/uast-kotlin-fir/src/org/jetbrains/uast/kotlin/psi/UastFakeDeserializedSymbolLightMethod.kt
+
11
-
0
View file @
ac16a36a
...
...
@@ -61,6 +61,17 @@ internal class UastFakeDeserializedSymbolLightMethod(
override
fun
computeNullability
():
KtTypeNullability
?
{
return
analyzeForUast
(
context
)
{
val
functionSymbol
=
original
.
restoreSymbol
()
?:
return
@analyzeForUast
null
functionSymbol
.
psi
?.
let
{
psi
->
val
hasInheritedGenericType
=
baseResolveProviderService
.
hasInheritedGenericType
(
psi
)
if
(
hasInheritedGenericType
)
{
// Inherited generic type: nullity will be determined at use-site
return
@analyzeForUast
null
}
}
if
(
functionSymbol
.
isSuspend
)
{
// suspend fun returns Any?, which is mapped to @Nullable java.lang.Object
return
@analyzeForUast
KtTypeNullability
.
NULLABLE
}
functionSymbol
.
returnType
.
nullability
}
}
...
...
This diff is collapsed.
Click to expand it.
plugins/kotlin/uast/uast-kotlin-fir/tests/test/org/jetbrains/fir/uast/test/FirUastApiFixtureTest.kt
+
8
-
0
View file @
ac16a36a
...
...
@@ -61,6 +61,10 @@ class FirUastApiFixtureTest : KotlinLightCodeInsightFixtureTestCase(), UastApiFi
checkReifiedTypeNullability
(
myFixture
)
}
fun
testReifiedTypeNullability_generic
()
{
checkReifiedTypeNullability_generic
(
myFixture
)
}
fun
testInheritedGenericTypeNullability
()
{
checkInheritedGenericTypeNullability
(
myFixture
)
}
...
...
@@ -69,6 +73,10 @@ class FirUastApiFixtureTest : KotlinLightCodeInsightFixtureTestCase(), UastApiFi
checkInheritedGenericTypeNullability_propertyAndAccessor
(
myFixture
)
}
fun
testGenericTypeNullability_reified
()
{
checkGenericTypeNullability_reified
(
myFixture
)
}
fun
testImplicitReceiverType
()
{
checkImplicitReceiverType
(
myFixture
)
}
...
...
This diff is collapsed.
Click to expand it.
plugins/kotlin/uast/uast-kotlin/tests/test/org/jetbrains/uast/test/kotlin/comparison/FE1UastApiFixtureTest.kt
+
8
-
0
View file @
ac16a36a
...
...
@@ -59,6 +59,10 @@ class FE1UastApiFixtureTest : KotlinLightCodeInsightFixtureTestCase(), UastApiFi
checkReifiedTypeNullability
(
myFixture
)
}
fun
testReifiedTypeNullability_generic
()
{
checkReifiedTypeNullability_generic
(
myFixture
)
}
fun
testInheritedGenericTypeNullability
()
{
checkInheritedGenericTypeNullability
(
myFixture
)
}
...
...
@@ -67,6 +71,10 @@ class FE1UastApiFixtureTest : KotlinLightCodeInsightFixtureTestCase(), UastApiFi
checkInheritedGenericTypeNullability_propertyAndAccessor
(
myFixture
)
}
fun
testGenericTypeNullability_reified
()
{
checkGenericTypeNullability_reified
(
myFixture
)
}
fun
testImplicitReceiverType
()
{
checkImplicitReceiverType
(
myFixture
)
}
...
...
This diff is collapsed.
Click to expand it.
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment
Menu
Projects
Groups
Snippets
Help