mirror of
https://gitflic.ru/project/openide/openide.git
synced 2025-12-16 22:51:17 +07:00
KT UAST: shortcut for expression type of null literal
GitOrigin-RevId: 93594824782066b2f9e392c72c7543cba715114d
This commit is contained in:
committed by
intellij-monorepo-bot
parent
abdcd6d940
commit
6618355ed9
@@ -3,6 +3,8 @@
|
||||
package org.jetbrains.uast.kotlin
|
||||
|
||||
import com.intellij.psi.PsiElement
|
||||
import com.intellij.psi.PsiType
|
||||
import com.intellij.psi.PsiTypes
|
||||
import org.jetbrains.annotations.ApiStatus
|
||||
import org.jetbrains.kotlin.KtNodeTypes
|
||||
import org.jetbrains.kotlin.psi.KtConstantExpression
|
||||
@@ -20,6 +22,14 @@ class KotlinULiteralExpression(
|
||||
override val isNull: Boolean
|
||||
get() = sourcePsi.unwrapBlockOrParenthesis().node?.elementType == KtNodeTypes.NULL
|
||||
|
||||
override fun getExpressionType(): PsiType? {
|
||||
// `null` of `kotlin.Nothing?` type would be mapped to `java.lang.Void` without this shortcut.
|
||||
return if (isNull)
|
||||
PsiTypes.nullType()
|
||||
else
|
||||
super<KotlinUElementWithType>.getExpressionType()
|
||||
}
|
||||
|
||||
override val value: Any?
|
||||
get() = valuePart.getOrBuild { evaluate() }
|
||||
|
||||
|
||||
@@ -1153,4 +1153,27 @@ interface UastApiFixtureTestBase : UastPluginSelection {
|
||||
)
|
||||
TestCase.assertEquals(1, count)
|
||||
}
|
||||
|
||||
fun checkNullLiteral(myFixture: JavaCodeInsightTestFixture) {
|
||||
myFixture.configureByText(
|
||||
"main.kt", """
|
||||
fun test() {
|
||||
val foo : Any? = null
|
||||
}
|
||||
""".trimIndent()
|
||||
)
|
||||
val uFile = myFixture.file.toUElementOfType<UFile>()!!
|
||||
var count = 0
|
||||
uFile.accept(
|
||||
object : AbstractUastVisitor() {
|
||||
override fun visitLiteralExpression(node: ULiteralExpression): Boolean {
|
||||
TestCase.assertTrue(node.isNull)
|
||||
TestCase.assertEquals("null", node.getExpressionType()?.canonicalText)
|
||||
count++
|
||||
return super.visitLiteralExpression(node)
|
||||
}
|
||||
}
|
||||
)
|
||||
TestCase.assertEquals(1, count)
|
||||
}
|
||||
}
|
||||
@@ -136,4 +136,8 @@ class FirUastApiFixtureTest : KotlinLightCodeInsightFixtureTestCase(), UastApiFi
|
||||
fun testNameReferenceVisitInConstructorCall() {
|
||||
checkNameReferenceVisitInConstructorCall(myFixture)
|
||||
}
|
||||
|
||||
fun testNullLiteral() {
|
||||
checkNullLiteral(myFixture)
|
||||
}
|
||||
}
|
||||
@@ -55,17 +55,17 @@ UFile (package = ) [public final class AnnotatedExpressionsKt {...]
|
||||
UIdentifier (Identifier (isBlank)) [UIdentifier (Identifier (isBlank))]
|
||||
UExpressionList (when_entry) [{...]
|
||||
UYieldExpression [yield null]
|
||||
ULiteralExpression (value = null) [null] : java.lang.Void
|
||||
ULiteralExpression (value = null) [null] : null
|
||||
USwitchClauseExpressionWithBody [str.isNotEmpty() != null -> {...]
|
||||
UBinaryExpression (operator = !=) [str.isNotEmpty() != null] : boolean
|
||||
UQualifiedReferenceExpression [str.isNotEmpty()] : boolean
|
||||
USimpleNameReferenceExpression (identifier = str) [str] : java.lang.String
|
||||
UCallExpression (kind = UastCallKind(name='method_call'), argCount = 0)) [isNotEmpty()] : boolean
|
||||
UIdentifier (Identifier (isNotEmpty)) [UIdentifier (Identifier (isNotEmpty))]
|
||||
ULiteralExpression (value = null) [null] : java.lang.Void
|
||||
ULiteralExpression (value = null) [null] : null
|
||||
UExpressionList (when_entry) [{...]
|
||||
UYieldExpression [yield null]
|
||||
ULiteralExpression (value = null) [null] : java.lang.Void
|
||||
ULiteralExpression (value = null) [null] : null
|
||||
USwitchClauseExpressionWithBody [ -> {...]
|
||||
UExpressionList (when_entry) [{...]
|
||||
UYieldExpression [yield 1]
|
||||
|
||||
@@ -55,17 +55,17 @@ UFile (package = ) [public final class AnnotatedExpressionsKt {...]
|
||||
UIdentifier (Identifier (isBlank)) [UIdentifier (Identifier (isBlank))]
|
||||
UExpressionList (when_entry) [{...]
|
||||
UYieldExpression [yield null]
|
||||
ULiteralExpression (value = null) [null] : @org.jetbrains.annotations.Nullable() java.lang.Void
|
||||
ULiteralExpression (value = null) [null] : null
|
||||
USwitchClauseExpressionWithBody [str.isNotEmpty() != null -> {...]
|
||||
UBinaryExpression (operator = !=) [str.isNotEmpty() != null] : boolean
|
||||
UQualifiedReferenceExpression [str.isNotEmpty()] : boolean
|
||||
USimpleNameReferenceExpression (identifier = str) [str] : java.lang.String
|
||||
UCallExpression (kind = UastCallKind(name='method_call'), argCount = 0)) [isNotEmpty()] : boolean
|
||||
UIdentifier (Identifier (isNotEmpty)) [UIdentifier (Identifier (isNotEmpty))]
|
||||
ULiteralExpression (value = null) [null] : @org.jetbrains.annotations.Nullable() java.lang.Void
|
||||
ULiteralExpression (value = null) [null] : null
|
||||
UExpressionList (when_entry) [{...]
|
||||
UYieldExpression [yield null]
|
||||
ULiteralExpression (value = null) [null] : @org.jetbrains.annotations.Nullable() java.lang.Void
|
||||
ULiteralExpression (value = null) [null] : null
|
||||
USwitchClauseExpressionWithBody [ -> {...]
|
||||
UExpressionList (when_entry) [{...]
|
||||
UYieldExpression [yield 1]
|
||||
|
||||
@@ -3,7 +3,7 @@ UFile (package = ) [public final class CycleInTypeParametersKt {...]
|
||||
UField (name = a) [@org.jetbrains.annotations.Nullable private static final var a: Device<?> = null as? Device<?>]
|
||||
UAnnotation (fqName = org.jetbrains.annotations.Nullable) [@org.jetbrains.annotations.Nullable]
|
||||
UBinaryExpressionWithType [null as? Device<?>] : Device<?>
|
||||
ULiteralExpression (value = null) [null] : java.lang.Void
|
||||
ULiteralExpression (value = null) [null] : null
|
||||
UTypeReferenceExpression (name = Device<?>) [Device<?>]
|
||||
UMethod (name = getA) [public static final fun getA() : Device<?> = UastEmptyExpression]
|
||||
UClass (name = Device) [public final class Device {...}]
|
||||
|
||||
@@ -3,7 +3,7 @@ UFile (package = ) [public final class CycleInTypeParametersKt {...]
|
||||
UField (name = a) [@org.jetbrains.annotations.Nullable private static final var a: Device<?> = null as? Device<?>]
|
||||
UAnnotation (fqName = org.jetbrains.annotations.Nullable) [@org.jetbrains.annotations.Nullable]
|
||||
UBinaryExpressionWithType [null as? Device<?>] : @org.jetbrains.annotations.Nullable() Device<?>
|
||||
ULiteralExpression (value = null) [null] : @org.jetbrains.annotations.Nullable() java.lang.Void
|
||||
ULiteralExpression (value = null) [null] : null
|
||||
UTypeReferenceExpression (name = Device<?>) [Device<?>]
|
||||
UMethod (name = getA) [public static final fun getA() : Device<?> = UastEmptyExpression]
|
||||
UClass (name = Device) [public final class Device {...}]
|
||||
|
||||
@@ -1,10 +0,0 @@
|
||||
UFile (package = ) [public final class DefaultParameterValuesKt {...]
|
||||
UClass (name = DefaultParameterValuesKt) [public final class DefaultParameterValuesKt {...}]
|
||||
UMethod (name = foo) [public static final fun foo(@org.jetbrains.annotations.NotNull a: int, @org.jetbrains.annotations.Nullable foo: java.lang.String) : void {...}]
|
||||
UParameter (name = a) [@org.jetbrains.annotations.NotNull var a: int = 1]
|
||||
UAnnotation (fqName = org.jetbrains.annotations.NotNull) [@org.jetbrains.annotations.NotNull]
|
||||
ULiteralExpression (value = 1) [1] : int
|
||||
UParameter (name = foo) [@org.jetbrains.annotations.Nullable var foo: java.lang.String = null]
|
||||
UAnnotation (fqName = org.jetbrains.annotations.Nullable) [@org.jetbrains.annotations.Nullable]
|
||||
ULiteralExpression (value = null) [null] : @org.jetbrains.annotations.Nullable() java.lang.Void
|
||||
UBlockExpression [{...}] : void
|
||||
@@ -6,5 +6,5 @@ UFile (package = ) [public final class DefaultParameterValuesKt {...]
|
||||
ULiteralExpression (value = 1) [1] : int
|
||||
UParameter (name = foo) [@org.jetbrains.annotations.Nullable var foo: java.lang.String = null]
|
||||
UAnnotation (fqName = org.jetbrains.annotations.Nullable) [@org.jetbrains.annotations.Nullable]
|
||||
ULiteralExpression (value = null) [null] : java.lang.Void
|
||||
ULiteralExpression (value = null) [null] : null
|
||||
UBlockExpression [{...}] : void
|
||||
@@ -5,7 +5,7 @@ UFile (package = ) [public final class ElvisKt {...]
|
||||
UAnnotation (fqName = org.jetbrains.annotations.NotNull) [@org.jetbrains.annotations.NotNull]
|
||||
UBlockExpression [{...}]
|
||||
UReturnExpression [return null]
|
||||
ULiteralExpression (value = null) [null] : java.lang.Void
|
||||
ULiteralExpression (value = null) [null] : null
|
||||
UMethod (name = bar) [public static final fun bar() : int {...}]
|
||||
UBlockExpression [{...}]
|
||||
UReturnExpression [return 42]
|
||||
|
||||
@@ -5,7 +5,7 @@ UFile (package = ) [public final class ElvisKt {...]
|
||||
UAnnotation (fqName = org.jetbrains.annotations.NotNull) [@org.jetbrains.annotations.NotNull]
|
||||
UBlockExpression [{...}]
|
||||
UReturnExpression [return null]
|
||||
ULiteralExpression (value = null) [null] : @org.jetbrains.annotations.Nullable() java.lang.Void
|
||||
ULiteralExpression (value = null) [null] : null
|
||||
UMethod (name = bar) [public static final fun bar() : int {...}]
|
||||
UBlockExpression [{...}]
|
||||
UReturnExpression [return 42]
|
||||
|
||||
@@ -20,7 +20,7 @@ UFile (package = ) [public final enum Style {...]
|
||||
UEnumConstant (name = UNKNOWN) [@null UNKNOWN(null)]
|
||||
UAnnotation (fqName = null) [@null]
|
||||
USimpleNameReferenceExpression (identifier = Style) [Style]
|
||||
ULiteralExpression (value = null) [null] : java.lang.Void
|
||||
ULiteralExpression (value = null) [null] : null
|
||||
UMethod (name = getValue) [public final fun getValue() : java.lang.String = UastEmptyExpression]
|
||||
UMethod (name = Style) [private fun Style(@org.jetbrains.annotations.Nullable value: java.lang.String) = UastEmptyExpression]
|
||||
UParameter (name = value) [@org.jetbrains.annotations.Nullable var value: java.lang.String]
|
||||
|
||||
@@ -20,7 +20,7 @@ UFile (package = ) [public final enum Style {...]
|
||||
UEnumConstant (name = UNKNOWN) [@null UNKNOWN(null)]
|
||||
UAnnotation (fqName = null) [@null]
|
||||
USimpleNameReferenceExpression (identifier = Style) [Style]
|
||||
ULiteralExpression (value = null) [null] : @org.jetbrains.annotations.Nullable() java.lang.Void
|
||||
ULiteralExpression (value = null) [null] : null
|
||||
UMethod (name = values) [public static fun values() : Style[] = UastEmptyExpression]
|
||||
UMethod (name = valueOf) [public static fun valueOf(value: java.lang.String) : Style = UastEmptyExpression]
|
||||
UParameter (name = value) [var value: java.lang.String]
|
||||
|
||||
@@ -1,18 +0,0 @@
|
||||
UFile (package = ) [public final class TypeAliasExpansionWithOtherAliasInArgumentKt {...]
|
||||
UClass (name = TypeAliasExpansionWithOtherAliasInArgumentKt) [public final class TypeAliasExpansionWithOtherAliasInArgumentKt {...}]
|
||||
UMethod (name = foo) [public static final fun foo(@org.jetbrains.annotations.NotNull $this$foo: kotlin.jvm.functions.Function1<? super java.util.Map<java.lang.String,java.lang.Integer>,kotlin.Unit>, @org.jetbrains.annotations.NotNull x: kotlin.jvm.functions.Function1<? super java.util.Map<java.lang.String,java.lang.Integer>,kotlin.Unit>) : kotlin.jvm.functions.Function1<java.util.Map<java.lang.String,java.lang.Integer>,kotlin.Unit> {...}]
|
||||
UParameter (name = $this$foo) [@org.jetbrains.annotations.NotNull var $this$foo: kotlin.jvm.functions.Function1<? super java.util.Map<java.lang.String,java.lang.Integer>,kotlin.Unit>]
|
||||
UAnnotation (fqName = org.jetbrains.annotations.NotNull) [@org.jetbrains.annotations.NotNull]
|
||||
UParameter (name = x) [@org.jetbrains.annotations.NotNull var x: kotlin.jvm.functions.Function1<? super java.util.Map<java.lang.String,java.lang.Integer>,kotlin.Unit>]
|
||||
UAnnotation (fqName = org.jetbrains.annotations.NotNull) [@org.jetbrains.annotations.NotNull]
|
||||
UBlockExpression [{...}]
|
||||
UReturnExpression [return null]
|
||||
ULiteralExpression (value = null) [null] : @org.jetbrains.annotations.Nullable() java.lang.Void
|
||||
UMethod (name = bar) [public static final fun bar(@org.jetbrains.annotations.NotNull $this$bar: java.util.Map<java.lang.String,java.lang.Integer>, @org.jetbrains.annotations.NotNull x: java.util.Map<java.lang.String,java.lang.Integer>) : java.util.Map<java.lang.String,java.lang.Integer> {...}]
|
||||
UParameter (name = $this$bar) [@org.jetbrains.annotations.NotNull var $this$bar: java.util.Map<java.lang.String,java.lang.Integer>]
|
||||
UAnnotation (fqName = org.jetbrains.annotations.NotNull) [@org.jetbrains.annotations.NotNull]
|
||||
UParameter (name = x) [@org.jetbrains.annotations.NotNull var x: java.util.Map<java.lang.String,java.lang.Integer>]
|
||||
UAnnotation (fqName = org.jetbrains.annotations.NotNull) [@org.jetbrains.annotations.NotNull]
|
||||
UBlockExpression [{...}]
|
||||
UReturnExpression [return null]
|
||||
ULiteralExpression (value = null) [null] : @org.jetbrains.annotations.Nullable() java.lang.Void
|
||||
@@ -7,7 +7,7 @@ UFile (package = ) [public final class TypeAliasExpansionWithOtherAliasInArgumen
|
||||
UAnnotation (fqName = org.jetbrains.annotations.NotNull) [@org.jetbrains.annotations.NotNull]
|
||||
UBlockExpression [{...}]
|
||||
UReturnExpression [return null]
|
||||
ULiteralExpression (value = null) [null] : java.lang.Void
|
||||
ULiteralExpression (value = null) [null] : null
|
||||
UMethod (name = bar) [public static final fun bar(@org.jetbrains.annotations.NotNull $this$bar: java.util.Map<java.lang.String,java.lang.Integer>, @org.jetbrains.annotations.NotNull x: java.util.Map<java.lang.String,java.lang.Integer>) : java.util.Map<java.lang.String,java.lang.Integer> {...}]
|
||||
UParameter (name = $this$bar) [@org.jetbrains.annotations.NotNull var $this$bar: java.util.Map<java.lang.String,java.lang.Integer>]
|
||||
UAnnotation (fqName = org.jetbrains.annotations.NotNull) [@org.jetbrains.annotations.NotNull]
|
||||
@@ -15,4 +15,4 @@ UFile (package = ) [public final class TypeAliasExpansionWithOtherAliasInArgumen
|
||||
UAnnotation (fqName = org.jetbrains.annotations.NotNull) [@org.jetbrains.annotations.NotNull]
|
||||
UBlockExpression [{...}]
|
||||
UReturnExpression [return null]
|
||||
ULiteralExpression (value = null) [null] : java.lang.Void
|
||||
ULiteralExpression (value = null) [null] : null
|
||||
@@ -34,7 +34,7 @@ UFile (package = ) [public final class ClassLiteralKt {...]
|
||||
UIfExpression [if (other == null) return false] : kotlin.Unit
|
||||
UBinaryExpression (operator = ==) [other == null] : boolean
|
||||
USimpleNameReferenceExpression (identifier = other) [other] : java.lang.Object
|
||||
ULiteralExpression (value = null) [null] : java.lang.Void
|
||||
ULiteralExpression (value = null) [null] : null
|
||||
UReturnExpression [return false] : java.lang.Void
|
||||
ULiteralExpression (value = false) [false] : boolean
|
||||
UIfExpression [if (java.lang.Object != Foo) return false] : kotlin.Unit
|
||||
|
||||
@@ -34,7 +34,7 @@ UFile (package = ) [public final class ClassLiteralKt {...]
|
||||
UIfExpression [if (other == null) return false] : @org.jetbrains.annotations.NotNull() kotlin.Unit
|
||||
UBinaryExpression (operator = ==) [other == null] : boolean
|
||||
USimpleNameReferenceExpression (identifier = other) [other] : @org.jetbrains.annotations.Nullable() java.lang.Object
|
||||
ULiteralExpression (value = null) [null] : @org.jetbrains.annotations.Nullable() java.lang.Void
|
||||
ULiteralExpression (value = null) [null] : null
|
||||
UReturnExpression [return false] : @org.jetbrains.annotations.NotNull() java.lang.Void
|
||||
ULiteralExpression (value = false) [false] : boolean
|
||||
UIfExpression [if (java.lang.Object != Foo) return false] : @org.jetbrains.annotations.NotNull() kotlin.Unit
|
||||
|
||||
@@ -37,7 +37,7 @@ UFile (package = test.pkg) [package test.pkg...]
|
||||
UAnnotation (fqName = org.jetbrains.annotations.Nullable) [@org.jetbrains.annotations.Nullable]
|
||||
UBlockExpression [{...}] : java.lang.Void
|
||||
UReturnExpression [return null] : java.lang.Void
|
||||
ULiteralExpression (value = null) [null] : java.lang.Void
|
||||
ULiteralExpression (value = null) [null] : null
|
||||
UClass (name = ArrayMap) [public final class ArrayMap : java.util.HashMap<K,V> {...}]
|
||||
UMethod (name = ArrayMap) [public fun ArrayMap() {...}]
|
||||
UBlockExpression [{...}]
|
||||
|
||||
@@ -37,7 +37,7 @@ UFile (package = test.pkg) [package test.pkg...]
|
||||
UAnnotation (fqName = org.jetbrains.annotations.Nullable) [@org.jetbrains.annotations.Nullable]
|
||||
UBlockExpression [{...}] : @org.jetbrains.annotations.NotNull() java.lang.Void
|
||||
UReturnExpression [return null] : @org.jetbrains.annotations.NotNull() java.lang.Void
|
||||
ULiteralExpression (value = null) [null] : @org.jetbrains.annotations.Nullable() java.lang.Void
|
||||
ULiteralExpression (value = null) [null] : null
|
||||
UClass (name = ArrayMap) [public final class ArrayMap : java.util.HashMap<K,V> {...}]
|
||||
UMethod (name = ArrayMap) [public fun ArrayMap() {...}]
|
||||
UBlockExpression [{...}]
|
||||
|
||||
@@ -4,13 +4,13 @@ UFile (package = ) [public final class WithGenericKt {...]
|
||||
UBlockExpression [{...}]
|
||||
UReturnExpression [return null as T]
|
||||
UBinaryExpressionWithType [null as T] : T
|
||||
ULiteralExpression (value = null) [null] : java.lang.Void
|
||||
ULiteralExpression (value = null) [null] : null
|
||||
UTypeReferenceExpression (name = T) [T]
|
||||
UMethod (name = test2) [public static final fun test2() : T {...}]
|
||||
UBlockExpression [{...}] : java.lang.Void
|
||||
UDeclarationsExpression [var a: java.lang.Object = null]
|
||||
ULocalVariable (name = a) [var a: java.lang.Object = null]
|
||||
ULiteralExpression (value = null) [null] : java.lang.Void
|
||||
ULiteralExpression (value = null) [null] : null
|
||||
UReturnExpression [return a as T] : java.lang.Void
|
||||
UBinaryExpressionWithType [a as T] : T
|
||||
USimpleNameReferenceExpression (identifier = a) [a] : java.lang.Object
|
||||
@@ -19,7 +19,7 @@ UFile (package = ) [public final class WithGenericKt {...]
|
||||
UBlockExpression [{...}]
|
||||
UReturnExpression [return null as T]
|
||||
UBinaryExpressionWithType [null as T] : T
|
||||
ULiteralExpression (value = null) [null] : java.lang.Void
|
||||
ULiteralExpression (value = null) [null] : null
|
||||
UTypeReferenceExpression (name = T) [T]
|
||||
UMethod (name = castToString) [public static final fun castToString(t: T) : void {...}]
|
||||
UParameter (name = t) [var t: T]
|
||||
@@ -33,7 +33,7 @@ UFile (package = ) [public final class WithGenericKt {...]
|
||||
UBinaryExpression (operator = !=) [test1() != null] : boolean
|
||||
UCallExpression (kind = UastCallKind(name='method_call'), argCount = 0)) [test1()] : int
|
||||
UIdentifier (Identifier (test1)) [UIdentifier (Identifier (test1))]
|
||||
ULiteralExpression (value = null) [null] : java.lang.Void
|
||||
ULiteralExpression (value = null) [null] : null
|
||||
UReturnExpression [return "fail: test1"] : java.lang.Void
|
||||
UPolyadicExpression (operator = +) ["fail: test1"] : java.lang.String
|
||||
ULiteralExpression (value = "fail: test1") ["fail: test1"] : java.lang.String
|
||||
@@ -41,7 +41,7 @@ UFile (package = ) [public final class WithGenericKt {...]
|
||||
UBinaryExpression (operator = !=) [test2() != null] : boolean
|
||||
UCallExpression (kind = UastCallKind(name='method_call'), argCount = 0)) [test2()] : int
|
||||
UIdentifier (Identifier (test2)) [UIdentifier (Identifier (test2))]
|
||||
ULiteralExpression (value = null) [null] : java.lang.Void
|
||||
ULiteralExpression (value = null) [null] : null
|
||||
UReturnExpression [return "fail: test2"] : java.lang.Void
|
||||
UPolyadicExpression (operator = +) ["fail: test2"] : java.lang.String
|
||||
ULiteralExpression (value = "fail: test2") ["fail: test2"] : java.lang.String
|
||||
@@ -73,7 +73,7 @@ UFile (package = ) [public final class WithGenericKt {...]
|
||||
UBlockExpression [{...}] : kotlin.Unit
|
||||
UCallExpression (kind = UastCallKind(name='method_call'), argCount = 1)) [castToString(null)] : kotlin.Unit
|
||||
UIdentifier (Identifier (castToString)) [UIdentifier (Identifier (castToString))]
|
||||
ULiteralExpression (value = null) [null] : java.lang.Void
|
||||
ULiteralExpression (value = null) [null] : null
|
||||
UCatchClause (e) [catch (@org.jetbrains.annotations.NotNull var e: java.lang.Exception) {...}]
|
||||
UParameter (name = e) [@org.jetbrains.annotations.NotNull var e: java.lang.Exception]
|
||||
UAnnotation (fqName = org.jetbrains.annotations.NotNull) [@org.jetbrains.annotations.NotNull]
|
||||
|
||||
@@ -4,13 +4,13 @@ UFile (package = ) [public final class WithGenericKt {...]
|
||||
UBlockExpression [{...}]
|
||||
UReturnExpression [return null as T]
|
||||
UBinaryExpressionWithType [null as T] : T
|
||||
ULiteralExpression (value = null) [null] : @org.jetbrains.annotations.Nullable() java.lang.Void
|
||||
ULiteralExpression (value = null) [null] : null
|
||||
UTypeReferenceExpression (name = T) [T]
|
||||
UMethod (name = test2) [public static final fun test2() : T {...}]
|
||||
UBlockExpression [{...}] : @org.jetbrains.annotations.NotNull() java.lang.Void
|
||||
UDeclarationsExpression [var a: java.lang.Object = null]
|
||||
ULocalVariable (name = a) [var a: java.lang.Object = null]
|
||||
ULiteralExpression (value = null) [null] : @org.jetbrains.annotations.Nullable() java.lang.Void
|
||||
ULiteralExpression (value = null) [null] : null
|
||||
UReturnExpression [return a as T] : @org.jetbrains.annotations.NotNull() java.lang.Void
|
||||
UBinaryExpressionWithType [a as T] : T
|
||||
USimpleNameReferenceExpression (identifier = a) [a] : @org.jetbrains.annotations.Nullable() java.lang.Object
|
||||
@@ -19,7 +19,7 @@ UFile (package = ) [public final class WithGenericKt {...]
|
||||
UBlockExpression [{...}]
|
||||
UReturnExpression [return null as T]
|
||||
UBinaryExpressionWithType [null as T] : @org.jetbrains.annotations.NotNull() T
|
||||
ULiteralExpression (value = null) [null] : @org.jetbrains.annotations.Nullable() java.lang.Void
|
||||
ULiteralExpression (value = null) [null] : null
|
||||
UTypeReferenceExpression (name = T) [T]
|
||||
UMethod (name = castToString) [public static final fun castToString(t: T) : void {...}]
|
||||
UParameter (name = t) [var t: T]
|
||||
@@ -33,7 +33,7 @@ UFile (package = ) [public final class WithGenericKt {...]
|
||||
UBinaryExpression (operator = !=) [test1() != null] : boolean
|
||||
UCallExpression (kind = UastCallKind(name='method_call'), argCount = 0)) [test1()] : int
|
||||
UIdentifier (Identifier (test1)) [UIdentifier (Identifier (test1))]
|
||||
ULiteralExpression (value = null) [null] : @org.jetbrains.annotations.Nullable() java.lang.Void
|
||||
ULiteralExpression (value = null) [null] : null
|
||||
UReturnExpression [return "fail: test1"] : @org.jetbrains.annotations.NotNull() java.lang.Void
|
||||
UPolyadicExpression (operator = +) ["fail: test1"] : java.lang.String
|
||||
ULiteralExpression (value = "fail: test1") ["fail: test1"] : java.lang.String
|
||||
@@ -41,7 +41,7 @@ UFile (package = ) [public final class WithGenericKt {...]
|
||||
UBinaryExpression (operator = !=) [test2() != null] : boolean
|
||||
UCallExpression (kind = UastCallKind(name='method_call'), argCount = 0)) [test2()] : int
|
||||
UIdentifier (Identifier (test2)) [UIdentifier (Identifier (test2))]
|
||||
ULiteralExpression (value = null) [null] : @org.jetbrains.annotations.Nullable() java.lang.Void
|
||||
ULiteralExpression (value = null) [null] : null
|
||||
UReturnExpression [return "fail: test2"] : @org.jetbrains.annotations.NotNull() java.lang.Void
|
||||
UPolyadicExpression (operator = +) ["fail: test2"] : java.lang.String
|
||||
ULiteralExpression (value = "fail: test2") ["fail: test2"] : java.lang.String
|
||||
@@ -73,7 +73,7 @@ UFile (package = ) [public final class WithGenericKt {...]
|
||||
UBlockExpression [{...}] : @org.jetbrains.annotations.NotNull() kotlin.Unit
|
||||
UCallExpression (kind = UastCallKind(name='method_call'), argCount = 1)) [castToString(null)] : @org.jetbrains.annotations.NotNull() kotlin.Unit
|
||||
UIdentifier (Identifier (castToString)) [UIdentifier (Identifier (castToString))]
|
||||
ULiteralExpression (value = null) [null] : @org.jetbrains.annotations.Nullable() java.lang.Void
|
||||
ULiteralExpression (value = null) [null] : null
|
||||
UCatchClause (e) [catch (@org.jetbrains.annotations.NotNull var e: java.lang.Exception) {...}]
|
||||
UParameter (name = e) [@org.jetbrains.annotations.NotNull var e: java.lang.Exception]
|
||||
UAnnotation (fqName = org.jetbrains.annotations.NotNull) [@org.jetbrains.annotations.NotNull]
|
||||
|
||||
@@ -134,4 +134,8 @@ class FE1UastApiFixtureTest : KotlinLightCodeInsightFixtureTestCase(), UastApiFi
|
||||
fun testNameReferenceVisitInConstructorCall() {
|
||||
checkNameReferenceVisitInConstructorCall(myFixture)
|
||||
}
|
||||
|
||||
fun testNullLiteral() {
|
||||
checkNullLiteral(myFixture)
|
||||
}
|
||||
}
|
||||
@@ -3,7 +3,7 @@ UFile (package = ) [public final class CycleInTypeParametersKt {...]
|
||||
UField (name = a) [@org.jetbrains.annotations.Nullable private static final var a: Device<?> = null as? Device<?>]
|
||||
UAnnotation (fqName = org.jetbrains.annotations.Nullable) [@org.jetbrains.annotations.Nullable]
|
||||
UBinaryExpressionWithType [null as? Device<?>] : PsiType:Device<?>
|
||||
ULiteralExpression (value = null) [null] : PsiType:Void
|
||||
ULiteralExpression (value = null) [null] : PsiType:null
|
||||
UTypeReferenceExpression (name = Device<?>) [Device<?>]
|
||||
UMethod (name = getA) [public static final fun getA() : Device<?> = UastEmptyExpression]
|
||||
UClass (name = Device) [public final class Device {...}]
|
||||
|
||||
@@ -276,4 +276,31 @@ class JavaUastApiTest : AbstractJavaUastTest() {
|
||||
)
|
||||
TestCase.assertEquals(1, count)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testNullLiteral() {
|
||||
val file = myFixture.configureByText(
|
||||
"Test.java",
|
||||
"""
|
||||
class Test {
|
||||
static void test() {
|
||||
Object foo = null;
|
||||
}
|
||||
}
|
||||
""".trimIndent()
|
||||
)
|
||||
val uFile = file.toUElementOfType<UFile>()!!
|
||||
var count = 0
|
||||
uFile.accept(
|
||||
object : AbstractUastVisitor() {
|
||||
override fun visitLiteralExpression(node: ULiteralExpression): Boolean {
|
||||
TestCase.assertTrue(node.isNull)
|
||||
TestCase.assertEquals("null", node.getExpressionType()?.canonicalText)
|
||||
count++
|
||||
return super.visitLiteralExpression(node)
|
||||
}
|
||||
}
|
||||
)
|
||||
TestCase.assertEquals(1, count)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user