From 64ecbd1418de86d9f379325d967d3e13d9d9866f Mon Sep 17 00:00:00 2001 From: Ilya Kirillov Date: Mon, 26 Aug 2019 17:50:42 +0300 Subject: [PATCH] New J2K: use internal getStrictParentOfType instead of custom one --- .../common/ConstraintsCollectorAggregator.kt | 3 +- ...rtGettersAndSettersToPropertyProcessing.kt | 9 +++--- .../processings/inspeсtionLikeProcessings.kt | 9 +++--- .../jetbrains/kotlin/nj2k/BaseConversion.kt | 20 ++++++++++++ .../jetbrains/kotlin/nj2k/NewCodeBuilder.kt | 1 - .../kotlin/nj2k/conversions/BaseConversion.kt | 32 ------------------- .../nj2k/conversions/BlockToRunConversion.kt | 1 + .../nj2k/conversions/ConstructorConversion.kt | 1 + .../conversions/EnumFieldAccessConversion.kt | 1 + .../ImplicitInitializerConversion.kt | 1 + .../InternalDeclarationConversion.kt | 1 + .../nj2k/conversions/MatchBasedConversion.kt | 1 + .../nj2k/conversions/ModalityConversion.kt | 1 + ...raModifiersForSingleFunctionsConversion.kt | 1 + ...rnStatementInLambdaExpressionConversion.kt | 1 + .../StaticMemberAccessConversion.kt | 4 ++- .../jetbrains/kotlin/nj2k/symbols/JKSymbol.kt | 6 ++-- 17 files changed, 45 insertions(+), 48 deletions(-) create mode 100644 nj2k/src/org/jetbrains/kotlin/nj2k/BaseConversion.kt delete mode 100644 nj2k/src/org/jetbrains/kotlin/nj2k/conversions/BaseConversion.kt diff --git a/nj2k/nj2k-services/src/org/jetbrains/kotlin/nj2k/inference/common/ConstraintsCollectorAggregator.kt b/nj2k/nj2k-services/src/org/jetbrains/kotlin/nj2k/inference/common/ConstraintsCollectorAggregator.kt index 98009dab033..9c04b83453b 100644 --- a/nj2k/nj2k-services/src/org/jetbrains/kotlin/nj2k/inference/common/ConstraintsCollectorAggregator.kt +++ b/nj2k/nj2k-services/src/org/jetbrains/kotlin/nj2k/inference/common/ConstraintsCollectorAggregator.kt @@ -11,6 +11,7 @@ import org.jetbrains.kotlin.nj2k.parentOfType import org.jetbrains.kotlin.psi.KtElement import org.jetbrains.kotlin.psi.KtImportDirective import org.jetbrains.kotlin.psi.psiUtil.forEachDescendantOfType +import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType class ConstraintsCollectorAggregator( private val resolutionFacade: ResolutionFacade, @@ -24,7 +25,7 @@ class ConstraintsCollectorAggregator( val constraintsBuilder = ConstraintBuilder(inferenceContext, boundTypeCalculator) for (element in elements) { element.forEachDescendantOfType { innerElement -> - if (innerElement.parentOfType() != null) return@forEachDescendantOfType + if (innerElement.getStrictParentOfType() != null) return@forEachDescendantOfType for (collector in collectors) { with(collector) { constraintsBuilder.collectConstraints( diff --git a/nj2k/nj2k-services/src/org/jetbrains/kotlin/nj2k/postProcessing/processings/ConvertGettersAndSettersToPropertyProcessing.kt b/nj2k/nj2k-services/src/org/jetbrains/kotlin/nj2k/postProcessing/processings/ConvertGettersAndSettersToPropertyProcessing.kt index 6f81a646b9e..2b755ea647d 100644 --- a/nj2k/nj2k-services/src/org/jetbrains/kotlin/nj2k/postProcessing/processings/ConvertGettersAndSettersToPropertyProcessing.kt +++ b/nj2k/nj2k-services/src/org/jetbrains/kotlin/nj2k/postProcessing/processings/ConvertGettersAndSettersToPropertyProcessing.kt @@ -28,7 +28,6 @@ import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.nj2k.NewJ2kConverterContext import org.jetbrains.kotlin.nj2k.asGetterName import org.jetbrains.kotlin.nj2k.asSetterName -import org.jetbrains.kotlin.nj2k.parentOfType import org.jetbrains.kotlin.nj2k.postProcessing.* import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.* @@ -133,7 +132,7 @@ class ConvertGettersAndSettersToPropertyProcessing : ElementsBasedPostProcessing return property.add(ktGetter).cast().let { if (getter is RealGetter) { getter.function.forAllUsages { usage -> - usage.parentOfType()!!.replace(factory.createExpression(getter.name)) + usage.getStrictParentOfType()!!.replace(factory.createExpression(getter.name)) } } it @@ -183,7 +182,7 @@ class ConvertGettersAndSettersToPropertyProcessing : ElementsBasedPostProcessing ktSetter.filterModifiers() if (setter is RealSetter) { setter.function.forAllUsages { usage -> - val callExpression = usage.parentOfType()!! + val callExpression = usage.getStrictParentOfType()!! val qualifier = callExpression.getQualifiedExpressionForSelector() val newValue = callExpression.valueArguments.single() if (qualifier != null) { @@ -206,8 +205,8 @@ class ConvertGettersAndSettersToPropertyProcessing : ElementsBasedPostProcessing private fun KtExpression.isReferenceToThis() = when (this) { - is KtThisExpression -> instanceReference.resolve() == parentOfType() - is KtReferenceExpression -> resolve() == parentOfType() + is KtThisExpression -> instanceReference.resolve() == getStrictParentOfType() + is KtReferenceExpression -> resolve() == getStrictParentOfType() else -> false } diff --git a/nj2k/nj2k-services/src/org/jetbrains/kotlin/nj2k/postProcessing/processings/inspeсtionLikeProcessings.kt b/nj2k/nj2k-services/src/org/jetbrains/kotlin/nj2k/postProcessing/processings/inspeсtionLikeProcessings.kt index 4bf99661b4e..f2bb893afbe 100644 --- a/nj2k/nj2k-services/src/org/jetbrains/kotlin/nj2k/postProcessing/processings/inspeсtionLikeProcessings.kt +++ b/nj2k/nj2k-services/src/org/jetbrains/kotlin/nj2k/postProcessing/processings/inspeсtionLikeProcessings.kt @@ -33,7 +33,6 @@ import org.jetbrains.kotlin.idea.util.getResolutionScope import org.jetbrains.kotlin.j2k.ConverterSettings import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.name.FqName -import org.jetbrains.kotlin.nj2k.parentOfType import org.jetbrains.kotlin.nj2k.postProcessing.ApplicabilityBasedInspectionLikeProcessing import org.jetbrains.kotlin.nj2k.postProcessing.InspectionLikeProcessing import org.jetbrains.kotlin.nj2k.postProcessing.generalInspectionBasedProcessing @@ -219,7 +218,7 @@ class UninitializedVariableReferenceFromInitializerToThisReferenceProcessing : override fun createAction(element: PsiElement, settings: ConverterSettings?): (() -> Unit)? { if (element !is KtSimpleNameExpression) return null - val anonymousObject = element.getParentOfType(true)?.takeIf { it.name == null } ?: return null + val anonymousObject = element.getStrictParentOfType()?.takeIf { it.name == null } ?: return null val resolved = element.mainReference.resolve() ?: return null if (resolved.isAncestor(element, strict = true)) { @@ -241,9 +240,9 @@ class UnresolvedVariableReferenceFromInitializerToThisReferenceProcessing : override fun createAction(element: PsiElement, settings: ConverterSettings?): (() -> Unit)? { if (element !is KtSimpleNameExpression || element.mainReference.resolve() != null) return null - val anonymousObject = element.getParentOfType(true) ?: return null + val anonymousObject = element.getStrictParentOfType() ?: return null - val variable = anonymousObject.getParentOfType(true) ?: return null + val variable = anonymousObject.getStrictParentOfType() ?: return null if (variable.nameAsName == element.getReferencedNameAsName() && variable.initializer?.getChildOfType() == anonymousObject @@ -260,7 +259,7 @@ class VarToValProcessing : ApplicabilityBasedInspectionLikeProcessing (usage as? KtSimpleNameReference)?.element?.let { nameReference -> val receiver = nameReference.parent?.safeAs()?.receiverExpression - if (nameReference.parentOfType() != null + if (nameReference.getStrictParentOfType() != null && (receiver == null || receiver is KtThisExpression) ) return@let false nameReference.readWriteAccess(useResolveForReadWrite = true).isWrite diff --git a/nj2k/src/org/jetbrains/kotlin/nj2k/BaseConversion.kt b/nj2k/src/org/jetbrains/kotlin/nj2k/BaseConversion.kt new file mode 100644 index 00000000000..103f156783a --- /dev/null +++ b/nj2k/src/org/jetbrains/kotlin/nj2k/BaseConversion.kt @@ -0,0 +1,20 @@ +/* + * Copyright 2010-2019 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.kotlin.nj2k + +import org.jetbrains.kotlin.nj2k.tree.JKTreeElement + +interface BatchBaseConversion { + fun runConversion(treeRoots: List, context: NewJ2kConverterContext): Boolean +} + +interface SequentialBaseConversion : BatchBaseConversion { + fun runConversion(treeRoot: JKTreeElement, context: NewJ2kConverterContext): Boolean + + override fun runConversion(treeRoots: List, context: NewJ2kConverterContext): Boolean { + return treeRoots.asSequence().map { runConversion(it, context) }.max() ?: false + } +} \ No newline at end of file diff --git a/nj2k/src/org/jetbrains/kotlin/nj2k/NewCodeBuilder.kt b/nj2k/src/org/jetbrains/kotlin/nj2k/NewCodeBuilder.kt index 5b533d17077..3e12be0e564 100644 --- a/nj2k/src/org/jetbrains/kotlin/nj2k/NewCodeBuilder.kt +++ b/nj2k/src/org/jetbrains/kotlin/nj2k/NewCodeBuilder.kt @@ -7,7 +7,6 @@ package org.jetbrains.kotlin.nj2k import org.jetbrains.kotlin.j2k.ast.Nullability import org.jetbrains.kotlin.name.FqName -import org.jetbrains.kotlin.nj2k.conversions.parentOfType import org.jetbrains.kotlin.nj2k.symbols.JKClassSymbol import org.jetbrains.kotlin.nj2k.symbols.getDisplayName import org.jetbrains.kotlin.nj2k.tree.* diff --git a/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/BaseConversion.kt b/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/BaseConversion.kt deleted file mode 100644 index 807a3606265..00000000000 --- a/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/BaseConversion.kt +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Copyright 2010-2017 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. - */ - -package org.jetbrains.kotlin.nj2k.conversions - -import org.jetbrains.kotlin.nj2k.NewJ2kConverterContext -import org.jetbrains.kotlin.nj2k.tree.JKTreeElement - -interface BatchBaseConversion { - fun runConversion(treeRoots: List, context: NewJ2kConverterContext): Boolean -} - -interface SequentialBaseConversion : BatchBaseConversion { - fun runConversion(treeRoot: JKTreeElement, context: NewJ2kConverterContext): Boolean - - override fun runConversion(treeRoots: List, context: NewJ2kConverterContext): Boolean { - return treeRoots.asSequence().map { runConversion(it, context) }.max() ?: false - } -} \ No newline at end of file diff --git a/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/BlockToRunConversion.kt b/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/BlockToRunConversion.kt index 9d01171fc70..811ebf0c460 100644 --- a/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/BlockToRunConversion.kt +++ b/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/BlockToRunConversion.kt @@ -6,6 +6,7 @@ package org.jetbrains.kotlin.nj2k.conversions import org.jetbrains.kotlin.nj2k.NewJ2kConverterContext +import org.jetbrains.kotlin.nj2k.parentOfType import org.jetbrains.kotlin.nj2k.tree.* import org.jetbrains.kotlin.nj2k.tree.impl.* diff --git a/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/ConstructorConversion.kt b/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/ConstructorConversion.kt index ee3ee939b11..911d2ecdf2e 100644 --- a/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/ConstructorConversion.kt +++ b/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/ConstructorConversion.kt @@ -6,6 +6,7 @@ package org.jetbrains.kotlin.nj2k.conversions import org.jetbrains.kotlin.nj2k.NewJ2kConverterContext +import org.jetbrains.kotlin.nj2k.parentOfType import org.jetbrains.kotlin.nj2k.tree.* import org.jetbrains.kotlin.nj2k.tree.impl.JKKtConstructorImpl import org.jetbrains.kotlin.nj2k.tree.impl.JKStubExpressionImpl diff --git a/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/EnumFieldAccessConversion.kt b/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/EnumFieldAccessConversion.kt index 263c0e7783b..6b0b7fcdf71 100644 --- a/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/EnumFieldAccessConversion.kt +++ b/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/EnumFieldAccessConversion.kt @@ -7,6 +7,7 @@ package org.jetbrains.kotlin.nj2k.conversions import com.intellij.psi.PsiEnumConstant import org.jetbrains.kotlin.nj2k.NewJ2kConverterContext +import org.jetbrains.kotlin.nj2k.parentOfType import org.jetbrains.kotlin.nj2k.symbols.* import org.jetbrains.kotlin.nj2k.tree.* import org.jetbrains.kotlin.nj2k.tree.impl.JKClassAccessExpressionImpl diff --git a/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/ImplicitInitializerConversion.kt b/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/ImplicitInitializerConversion.kt index 5344615e7cb..b7ac8500890 100644 --- a/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/ImplicitInitializerConversion.kt +++ b/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/ImplicitInitializerConversion.kt @@ -7,6 +7,7 @@ package org.jetbrains.kotlin.nj2k.conversions import org.jetbrains.kotlin.nj2k.NewJ2kConverterContext import org.jetbrains.kotlin.nj2k.findUsages +import org.jetbrains.kotlin.nj2k.parentOfType import org.jetbrains.kotlin.nj2k.symbols.JKMethodSymbol import org.jetbrains.kotlin.nj2k.tree.* import org.jetbrains.kotlin.nj2k.tree.impl.JKBooleanLiteral diff --git a/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/InternalDeclarationConversion.kt b/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/InternalDeclarationConversion.kt index 5a9999a5ca1..f8aa0285be2 100644 --- a/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/InternalDeclarationConversion.kt +++ b/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/InternalDeclarationConversion.kt @@ -7,6 +7,7 @@ package org.jetbrains.kotlin.nj2k.conversions import com.intellij.psi.PsiMember import org.jetbrains.kotlin.nj2k.NewJ2kConverterContext +import org.jetbrains.kotlin.nj2k.parentOfType import org.jetbrains.kotlin.nj2k.tree.* import org.jetbrains.kotlin.nj2k.tree.impl.psi import org.jetbrains.kotlin.nj2k.visibility diff --git a/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/MatchBasedConversion.kt b/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/MatchBasedConversion.kt index e5d910d861a..1ebdefa46f3 100644 --- a/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/MatchBasedConversion.kt +++ b/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/MatchBasedConversion.kt @@ -5,6 +5,7 @@ package org.jetbrains.kotlin.nj2k.conversions +import org.jetbrains.kotlin.nj2k.SequentialBaseConversion import org.jetbrains.kotlin.nj2k.tree.JKTreeElement abstract class MatchBasedConversion : SequentialBaseConversion { diff --git a/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/ModalityConversion.kt b/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/ModalityConversion.kt index d42b2482be3..654c71b0891 100644 --- a/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/ModalityConversion.kt +++ b/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/ModalityConversion.kt @@ -8,6 +8,7 @@ package org.jetbrains.kotlin.nj2k.conversions import com.intellij.psi.PsiClass import com.intellij.psi.PsiMethod import org.jetbrains.kotlin.nj2k.NewJ2kConverterContext +import org.jetbrains.kotlin.nj2k.parentOfType import org.jetbrains.kotlin.nj2k.tree.* import org.jetbrains.kotlin.nj2k.tree.impl.JKOtherModifierElementImpl import org.jetbrains.kotlin.nj2k.tree.impl.psi diff --git a/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/RemoveWrongExtraModifiersForSingleFunctionsConversion.kt b/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/RemoveWrongExtraModifiersForSingleFunctionsConversion.kt index a697772d11f..5b5f8b90057 100644 --- a/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/RemoveWrongExtraModifiersForSingleFunctionsConversion.kt +++ b/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/RemoveWrongExtraModifiersForSingleFunctionsConversion.kt @@ -5,6 +5,7 @@ package org.jetbrains.kotlin.nj2k.conversions +import org.jetbrains.kotlin.nj2k.parentOfType import org.jetbrains.kotlin.nj2k.tree.* class RemoveWrongExtraModifiersForSingleFunctionsConversion : RecursiveApplicableConversionBase() { diff --git a/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/ReturnStatementInLambdaExpressionConversion.kt b/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/ReturnStatementInLambdaExpressionConversion.kt index c294710325e..6fa918aea2a 100644 --- a/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/ReturnStatementInLambdaExpressionConversion.kt +++ b/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/ReturnStatementInLambdaExpressionConversion.kt @@ -7,6 +7,7 @@ package org.jetbrains.kotlin.nj2k.conversions import org.jetbrains.kotlin.nj2k.asStatement import org.jetbrains.kotlin.nj2k.copyTreeAndDetach +import org.jetbrains.kotlin.nj2k.parentOfType import org.jetbrains.kotlin.nj2k.tree.* import org.jetbrains.kotlin.nj2k.tree.impl.JKLabelTextImpl import org.jetbrains.kotlin.nj2k.tree.impl.JKLabeledStatementImpl diff --git a/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/StaticMemberAccessConversion.kt b/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/StaticMemberAccessConversion.kt index 6c645a9baae..87f9d300183 100644 --- a/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/StaticMemberAccessConversion.kt +++ b/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/StaticMemberAccessConversion.kt @@ -8,6 +8,7 @@ package org.jetbrains.kotlin.nj2k.conversions import com.intellij.lang.jvm.JvmModifier import com.intellij.psi.PsiElement import com.intellij.psi.PsiModifierListOwner +import com.intellij.psi.util.parentOfType import org.jetbrains.kotlin.j2k.getContainingClass import org.jetbrains.kotlin.nj2k.NewJ2kConverterContext import org.jetbrains.kotlin.nj2k.asQualifierWithThisAsSelector @@ -23,6 +24,7 @@ import org.jetbrains.kotlin.psi.KtClassOrObject import org.jetbrains.kotlin.psi.KtElement import org.jetbrains.kotlin.psi.KtObjectDeclaration import org.jetbrains.kotlin.psi.psiUtil.containingClass +import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType import org.jetbrains.kotlin.utils.addToStdlib.safeAs @@ -67,7 +69,7 @@ class StaticMemberAccessConversion(private val context: NewJ2kConverterContext) val target = target return when (target) { is KtElement -> - target.parentOfType()?.let { klass -> + target.getStrictParentOfType()?.let { klass -> if (klass is KtObjectDeclaration && klass.isCompanion()) klass.containingClass() else klass }?.let { context.symbolProvider.provideDirectSymbol(it) } diff --git a/nj2k/src/org/jetbrains/kotlin/nj2k/symbols/JKSymbol.kt b/nj2k/src/org/jetbrains/kotlin/nj2k/symbols/JKSymbol.kt index 87b33ead678..2b4f463ce10 100644 --- a/nj2k/src/org/jetbrains/kotlin/nj2k/symbols/JKSymbol.kt +++ b/nj2k/src/org/jetbrains/kotlin/nj2k/symbols/JKSymbol.kt @@ -10,12 +10,12 @@ import com.intellij.psi.PsiMember import com.intellij.psi.PsiNamedElement import org.jetbrains.kotlin.idea.refactoring.fqName.getKotlinFqName import org.jetbrains.kotlin.nj2k.JKSymbolProvider -import org.jetbrains.kotlin.nj2k.conversions.parentOfType import org.jetbrains.kotlin.nj2k.parentOfType import org.jetbrains.kotlin.nj2k.tree.JKDeclaration import org.jetbrains.kotlin.nj2k.tree.JKFile import org.jetbrains.kotlin.psi.KtDeclaration import org.jetbrains.kotlin.psi.KtNamedDeclaration +import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType interface JKSymbol { val target: Any @@ -51,7 +51,7 @@ interface JKMultiverseSymbol : JKSymbol where T : PsiNamedElement, T : PsiEle override val target: T override val declaredIn: JKSymbol? - get() = target.parentOfType()?.let { symbolProvider.provideDirectSymbol(it) } + get() = target.getStrictParentOfType()?.let { symbolProvider.provideDirectSymbol(it) } override val fqName: String get() = target.getKotlinFqName()?.asString() ?: name override val name: String @@ -65,7 +65,7 @@ interface JKMultiverseKtSymbol : JKSymbol { override val name: String get() = target.name!! override val declaredIn: JKSymbol? - get() = target.parentOfType()?.let { symbolProvider.provideDirectSymbol(it) } + get() = target.getStrictParentOfType()?.let { symbolProvider.provideDirectSymbol(it) } override val fqName: String get() = target.fqName?.asString() ?: name }