From fa613a32b2d05752254d0dba984b99b8616f4370 Mon Sep 17 00:00:00 2001 From: Jinseong Jeon Date: Tue, 8 Jun 2021 23:40:20 -0700 Subject: [PATCH] FIR/UAST: commonize safe qualified expression --- .../KotlinUSafeQualifiedExpression.kt | 19 ++++--------------- .../uast/kotlin/FirKotlinConverter.kt | 1 + .../testData/type/unresolved.kt | 3 ++- .../testData/type/unresolved.types.fe10.txt | 11 +++++++---- .../testData/type/unresolved.types.fir.txt | 5 ++++- 5 files changed, 18 insertions(+), 21 deletions(-) rename plugins/{uast-kotlin => uast-kotlin-base}/src/org/jetbrains/uast/kotlin/expressions/KotlinUSafeQualifiedExpression.kt (58%) diff --git a/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/expressions/KotlinUSafeQualifiedExpression.kt b/plugins/uast-kotlin-base/src/org/jetbrains/uast/kotlin/expressions/KotlinUSafeQualifiedExpression.kt similarity index 58% rename from plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/expressions/KotlinUSafeQualifiedExpression.kt rename to plugins/uast-kotlin-base/src/org/jetbrains/uast/kotlin/expressions/KotlinUSafeQualifiedExpression.kt index dbf6d187634..867bdb302cb 100644 --- a/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/expressions/KotlinUSafeQualifiedExpression.kt +++ b/plugins/uast-kotlin-base/src/org/jetbrains/uast/kotlin/expressions/KotlinUSafeQualifiedExpression.kt @@ -1,17 +1,6 @@ /* - * Copyright 2010-2016 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ package org.jetbrains.uast.kotlin @@ -30,8 +19,8 @@ class KotlinUSafeQualifiedExpression( givenParent: UElement? ) : KotlinAbstractUExpression(givenParent), UQualifiedReferenceExpression, UMultiResolvable, KotlinUElementWithType, KotlinEvaluatableUElement { - override val receiver by lz { KotlinConverter.convertOrEmpty(sourcePsi.receiverExpression, this) } - override val selector by lz { KotlinConverter.convertOrEmpty(sourcePsi.selectorExpression, this) } + override val receiver by lz { baseResolveProviderService.baseKotlinConverter.convertOrEmpty(sourcePsi.receiverExpression, this) } + override val selector by lz { baseResolveProviderService.baseKotlinConverter.convertOrEmpty(sourcePsi.selectorExpression, this) } override val accessType = KotlinQualifiedExpressionAccessTypes.SAFE override val resolvedName: String? diff --git a/plugins/uast-kotlin-fir/src/org/jetbrains/uast/kotlin/FirKotlinConverter.kt b/plugins/uast-kotlin-fir/src/org/jetbrains/uast/kotlin/FirKotlinConverter.kt index 918df967dda..225b25fd1be 100644 --- a/plugins/uast-kotlin-fir/src/org/jetbrains/uast/kotlin/FirKotlinConverter.kt +++ b/plugins/uast-kotlin-fir/src/org/jetbrains/uast/kotlin/FirKotlinConverter.kt @@ -312,6 +312,7 @@ internal object FirKotlinConverter : BaseKotlinConverter { is KtCallableReferenceExpression -> expr(build(::KotlinUCallableReferenceExpression)) is KtClassLiteralExpression -> expr(build(::KotlinUClassLiteralExpression)) is KtDotQualifiedExpression -> expr(build(::KotlinUQualifiedReferenceExpression)) + is KtSafeQualifiedExpression -> expr(build(::KotlinUSafeQualifiedExpression)) is KtSimpleNameExpression -> expr(build(::FirKotlinUSimpleReferenceExpression)) else -> expr(build(::UnknownKotlinExpression)) diff --git a/plugins/uast-kotlin-fir/testData/type/unresolved.kt b/plugins/uast-kotlin-fir/testData/type/unresolved.kt index aefbb3afc8b..2915018d72a 100644 --- a/plugins/uast-kotlin-fir/testData/type/unresolved.kt +++ b/plugins/uast-kotlin-fir/testData/type/unresolved.kt @@ -1,4 +1,5 @@ -fun foo(x: Unresolved) { +fun foo(x: Unresolved?) { + x?.prop } class A( diff --git a/plugins/uast-kotlin-fir/testData/type/unresolved.types.fe10.txt b/plugins/uast-kotlin-fir/testData/type/unresolved.types.fe10.txt index cffb9557688..4af2eda08b3 100644 --- a/plugins/uast-kotlin-fir/testData/type/unresolved.types.fe10.txt +++ b/plugins/uast-kotlin-fir/testData/type/unresolved.types.fe10.txt @@ -1,9 +1,12 @@ UFile (package = ) [public final class UnresolvedKt {...] UClass (name = UnresolvedKt) [public final class UnresolvedKt {...}] - UMethod (name = foo) [public static final fun foo(@org.jetbrains.annotations.NotNull x: error.NonExistentClass) : void {...}] - UParameter (name = x) [@org.jetbrains.annotations.NotNull var x: error.NonExistentClass] - UAnnotation (fqName = org.jetbrains.annotations.NotNull) [@org.jetbrains.annotations.NotNull] - UBlockExpression [{...}] : PsiType:void + UMethod (name = foo) [public static final fun foo(@org.jetbrains.annotations.Nullable x: error.NonExistentClass) : void {...}] + UParameter (name = x) [@org.jetbrains.annotations.Nullable var x: error.NonExistentClass] + UAnnotation (fqName = org.jetbrains.annotations.Nullable) [@org.jetbrains.annotations.Nullable] + UBlockExpression [{...}] : PsiType: + UQualifiedReferenceExpression [x?.prop] : PsiType: + USimpleNameReferenceExpression (identifier = x) [x] : PsiType: + USimpleNameReferenceExpression (identifier = prop) [prop] : PsiType: UClass (name = A) [public final class A : {...}] UField (name = prop) [@org.jetbrains.annotations.NotNull private final var prop: error.NonExistentClass] UAnnotation (fqName = org.jetbrains.annotations.NotNull) [@org.jetbrains.annotations.NotNull] diff --git a/plugins/uast-kotlin-fir/testData/type/unresolved.types.fir.txt b/plugins/uast-kotlin-fir/testData/type/unresolved.types.fir.txt index 49fee842d20..4095ece99ae 100644 --- a/plugins/uast-kotlin-fir/testData/type/unresolved.types.fir.txt +++ b/plugins/uast-kotlin-fir/testData/type/unresolved.types.fir.txt @@ -2,7 +2,10 @@ UFile (package = ) [public final class UnresolvedKt {...] UClass (name = UnresolvedKt) [public final class UnresolvedKt {...}] UMethod (name = foo) [public static final fun foo(x: error.NonExistentClass) : void {...}] UParameter (name = x) [var x: error.NonExistentClass] - UBlockExpression [{...}] : PsiType:Unit + UBlockExpression [{...}] : PsiType:NonExistentClass + UQualifiedReferenceExpression [x?.prop] : PsiType:NonExistentClass + USimpleNameReferenceExpression (identifier = x) [x] : PsiType:NonExistentClass + USimpleNameReferenceExpression (identifier = prop) [prop] : PsiType:NonExistentClass UClass (name = A) [public final class A : error.NonExistentClass {...}] UField (name = prop) [private final var prop: error.NonExistentClass] UMethod (name = A) [public fun A(prop: error.NonExistentClass) {...}]