[FIR IDE] Always provide accessors from property symbols in AAPI/FE10
This commit is contained in:
+99
@@ -0,0 +1,99 @@
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
/*
|
||||
* 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.kotlin.analysis.api.descriptors.symbols.descriptorBased
|
||||
|
||||
import com.intellij.psi.PsiElement
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.base.KtFe10Symbol
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.*
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.isExplicitOverride
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.ktVisibility
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.toKtType
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.toKtTypeAndAnnotations
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.pointers.KtFe10NeverRestoringSymbolPointer
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.KtPropertyGetterSymbol
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.KtSymbolOrigin
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.KtValueParameterSymbol
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.markers.KtAnnotationCall
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.markers.KtTypeAndAnnotations
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer
|
||||
import org.jetbrains.kotlin.analysis.api.types.KtType
|
||||
import org.jetbrains.kotlin.analysis.api.withValidityAssertion
|
||||
import org.jetbrains.kotlin.descriptors.Modality
|
||||
import org.jetbrains.kotlin.descriptors.PropertyDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.Visibility
|
||||
import org.jetbrains.kotlin.name.CallableId
|
||||
import org.jetbrains.kotlin.name.ClassId
|
||||
|
||||
class KtFe10DescDefaultPropertyGetterSymbol(
|
||||
private val propertyDescriptor: PropertyDescriptor,
|
||||
override val analysisContext: Fe10AnalysisContext
|
||||
) : KtPropertyGetterSymbol(), KtFe10Symbol {
|
||||
override val isDefault: Boolean
|
||||
get() = withValidityAssertion { true }
|
||||
|
||||
override val isInline: Boolean
|
||||
get() = withValidityAssertion { false }
|
||||
|
||||
override val isOverride: Boolean
|
||||
get() = withValidityAssertion { propertyDescriptor.isExplicitOverride }
|
||||
|
||||
override val hasBody: Boolean
|
||||
get() = withValidityAssertion { false }
|
||||
|
||||
override val valueParameters: List<KtValueParameterSymbol>
|
||||
get() = withValidityAssertion { emptyList() }
|
||||
|
||||
override val hasStableParameterNames: Boolean
|
||||
get() = withValidityAssertion { true }
|
||||
|
||||
override val callableIdIfNonLocal: CallableId?
|
||||
get() = withValidityAssertion { null }
|
||||
|
||||
override val annotatedType: KtTypeAndAnnotations
|
||||
get() = withValidityAssertion { propertyDescriptor.type.toKtTypeAndAnnotations(analysisContext) }
|
||||
|
||||
override val origin: KtSymbolOrigin
|
||||
get() = withValidityAssertion { propertyDescriptor.getSymbolOrigin(analysisContext) }
|
||||
|
||||
override val psi: PsiElement?
|
||||
get() = withValidityAssertion { null }
|
||||
|
||||
override val receiverType: KtTypeAndAnnotations?
|
||||
get() = withValidityAssertion { propertyDescriptor.extensionReceiverParameter?.type?.toKtTypeAndAnnotations(analysisContext) }
|
||||
|
||||
override val dispatchType: KtType?
|
||||
get() = withValidityAssertion { propertyDescriptor.dispatchReceiverParameter?.type?.toKtType(analysisContext) }
|
||||
|
||||
override val modality: Modality
|
||||
get() = withValidityAssertion { propertyDescriptor.modality }
|
||||
|
||||
override val visibility: Visibility
|
||||
get() = withValidityAssertion { propertyDescriptor.ktVisibility }
|
||||
|
||||
override val annotations: List<KtAnnotationCall>
|
||||
get() = withValidityAssertion { emptyList() }
|
||||
|
||||
override fun containsAnnotation(classId: ClassId): Boolean {
|
||||
withValidityAssertion {
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
override val annotationClassIds: Collection<ClassId>
|
||||
get() = withValidityAssertion { emptyList() }
|
||||
|
||||
override fun createPointer(): KtSymbolPointer<KtPropertyGetterSymbol> {
|
||||
withValidityAssertion {
|
||||
return KtFe10NeverRestoringSymbolPointer()
|
||||
}
|
||||
}
|
||||
}
|
||||
+138
@@ -0,0 +1,138 @@
|
||||
/*
|
||||
* 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.kotlin.analysis.api.descriptors.symbols.descriptorBased
|
||||
|
||||
import com.intellij.psi.PsiElement
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.base.KtFe10Symbol
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.*
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.pointers.KtFe10NeverRestoringSymbolPointer
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.utils.cached
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.KtPropertySetterSymbol
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.KtSymbolOrigin
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.KtValueParameterSymbol
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.markers.KtAnnotationCall
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.markers.KtTypeAndAnnotations
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer
|
||||
import org.jetbrains.kotlin.analysis.api.types.KtType
|
||||
import org.jetbrains.kotlin.analysis.api.withValidityAssertion
|
||||
import org.jetbrains.kotlin.descriptors.Modality
|
||||
import org.jetbrains.kotlin.descriptors.PropertyDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.Visibility
|
||||
import org.jetbrains.kotlin.name.CallableId
|
||||
import org.jetbrains.kotlin.name.ClassId
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.resolve.descriptorUtil.builtIns
|
||||
|
||||
class KtFe10DescDefaultPropertySetterSymbol(
|
||||
private val propertyDescriptor: PropertyDescriptor,
|
||||
override val analysisContext: Fe10AnalysisContext
|
||||
) : KtPropertySetterSymbol(), KtFe10Symbol {
|
||||
override val parameter: KtValueParameterSymbol by cached {
|
||||
DefaultKtValueParameterSymbol(propertyDescriptor, analysisContext)
|
||||
}
|
||||
|
||||
override val isDefault: Boolean
|
||||
get() = withValidityAssertion { true }
|
||||
|
||||
override val isInline: Boolean
|
||||
get() = withValidityAssertion { false }
|
||||
|
||||
override val isOverride: Boolean
|
||||
get() = withValidityAssertion { propertyDescriptor.isExplicitOverride }
|
||||
|
||||
override val hasBody: Boolean
|
||||
get() = withValidityAssertion { false }
|
||||
|
||||
override val valueParameters: List<KtValueParameterSymbol>
|
||||
get() = withValidityAssertion { listOf(parameter) }
|
||||
|
||||
override val hasStableParameterNames: Boolean
|
||||
get() = withValidityAssertion { true }
|
||||
|
||||
override val callableIdIfNonLocal: CallableId?
|
||||
get() = withValidityAssertion { null }
|
||||
|
||||
override val annotatedType: KtTypeAndAnnotations
|
||||
get() = withValidityAssertion { propertyDescriptor.builtIns.unitType.toKtTypeAndAnnotations(analysisContext) }
|
||||
|
||||
override val origin: KtSymbolOrigin
|
||||
get() = withValidityAssertion { propertyDescriptor.getSymbolOrigin(analysisContext) }
|
||||
|
||||
override val psi: PsiElement?
|
||||
get() = withValidityAssertion { null }
|
||||
|
||||
override val receiverType: KtTypeAndAnnotations?
|
||||
get() = withValidityAssertion { propertyDescriptor.extensionReceiverParameter?.type?.toKtTypeAndAnnotations(analysisContext) }
|
||||
|
||||
override val dispatchType: KtType?
|
||||
get() = withValidityAssertion { propertyDescriptor.dispatchReceiverParameter?.type?.toKtType(analysisContext) }
|
||||
|
||||
override val modality: Modality
|
||||
get() = withValidityAssertion { propertyDescriptor.modality }
|
||||
|
||||
override val visibility: Visibility
|
||||
get() = withValidityAssertion { propertyDescriptor.ktVisibility }
|
||||
|
||||
override val annotations: List<KtAnnotationCall>
|
||||
get() = withValidityAssertion { emptyList() }
|
||||
|
||||
override fun containsAnnotation(classId: ClassId): Boolean {
|
||||
withValidityAssertion {
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
override val annotationClassIds: Collection<ClassId>
|
||||
get() = withValidityAssertion { emptyList() }
|
||||
|
||||
override fun createPointer(): KtSymbolPointer<KtPropertySetterSymbol> {
|
||||
withValidityAssertion {
|
||||
return KtFe10NeverRestoringSymbolPointer()
|
||||
}
|
||||
}
|
||||
|
||||
private class DefaultKtValueParameterSymbol(
|
||||
private val propertyDescriptor: PropertyDescriptor,
|
||||
override val analysisContext: Fe10AnalysisContext
|
||||
) : KtValueParameterSymbol(), KtFe10Symbol {
|
||||
override val hasDefaultValue: Boolean
|
||||
get() = withValidityAssertion { false }
|
||||
|
||||
override val isVararg: Boolean
|
||||
get() = withValidityAssertion { false }
|
||||
|
||||
override val name: Name
|
||||
get() = withValidityAssertion { Name.identifier("value") }
|
||||
|
||||
override val annotatedType: KtTypeAndAnnotations
|
||||
get() = withValidityAssertion { propertyDescriptor.type.toKtTypeAndAnnotations(analysisContext) }
|
||||
|
||||
override val origin: KtSymbolOrigin
|
||||
get() = withValidityAssertion { propertyDescriptor.getSymbolOrigin(analysisContext) }
|
||||
|
||||
override val psi: PsiElement?
|
||||
get() = withValidityAssertion { null }
|
||||
|
||||
override val annotations: List<KtAnnotationCall>
|
||||
get() = withValidityAssertion { emptyList() }
|
||||
|
||||
override fun containsAnnotation(classId: ClassId): Boolean {
|
||||
withValidityAssertion {
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
override val annotationClassIds: Collection<ClassId>
|
||||
get() = withValidityAssertion { emptyList() }
|
||||
|
||||
override fun createPointer(): KtSymbolPointer<KtValueParameterSymbol> {
|
||||
withValidityAssertion {
|
||||
return KtFe10NeverRestoringSymbolPointer()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+9
-5
@@ -58,10 +58,10 @@ internal class KtFe10DescKotlinPropertySymbol(
|
||||
get() = withValidityAssertion { descriptor.isExplicitOverride }
|
||||
|
||||
override val hasGetter: Boolean
|
||||
get() = withValidityAssertion { descriptor.getter != null }
|
||||
get() = withValidityAssertion { true }
|
||||
|
||||
override val hasSetter: Boolean
|
||||
get() = withValidityAssertion { descriptor.setter != null }
|
||||
get() = withValidityAssertion { descriptor.isVar }
|
||||
|
||||
override val callableIdIfNonLocal: CallableId?
|
||||
get() = withValidityAssertion { descriptor.callableIdIfNotLocal }
|
||||
@@ -69,15 +69,19 @@ internal class KtFe10DescKotlinPropertySymbol(
|
||||
override val initializer: KtConstantValue?
|
||||
get() = withValidityAssertion { descriptor.compileTimeInitializer?.toKtConstantValue() }
|
||||
|
||||
override val getter: KtPropertyGetterSymbol?
|
||||
override val getter: KtPropertyGetterSymbol
|
||||
get() = withValidityAssertion {
|
||||
val getter = descriptor.getter ?: return null
|
||||
val getter = descriptor.getter ?: return KtFe10DescDefaultPropertyGetterSymbol(descriptor, analysisContext)
|
||||
return KtFe10DescPropertyGetterSymbol(getter, analysisContext)
|
||||
}
|
||||
|
||||
override val setter: KtPropertySetterSymbol?
|
||||
get() = withValidityAssertion {
|
||||
val setter = descriptor.setter ?: return null
|
||||
if (!descriptor.isVar) {
|
||||
return null
|
||||
}
|
||||
|
||||
val setter = descriptor.setter ?: return KtFe10DescDefaultPropertySetterSymbol(descriptor, analysisContext)
|
||||
return KtFe10DescPropertySetterSymbol(setter, analysisContext)
|
||||
}
|
||||
|
||||
|
||||
+2
-2
@@ -19,14 +19,14 @@ import org.jetbrains.kotlin.descriptors.PropertySetterDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.SyntheticPropertyDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.hasBody
|
||||
import org.jetbrains.kotlin.name.CallableId
|
||||
import org.jetbrains.kotlin.resolve.calls.inference.returnTypeOrNothing
|
||||
import org.jetbrains.kotlin.resolve.descriptorUtil.builtIns
|
||||
|
||||
internal class KtFe10DescPropertySetterSymbol(
|
||||
override val descriptor: PropertySetterDescriptor,
|
||||
override val analysisContext: Fe10AnalysisContext
|
||||
) : KtPropertySetterSymbol(), KtFe10DescMemberSymbol<PropertySetterDescriptor> {
|
||||
override val annotatedType: KtTypeAndAnnotations
|
||||
get() = withValidityAssertion { descriptor.returnTypeOrNothing.toKtTypeAndAnnotations(analysisContext) }
|
||||
get() = withValidityAssertion { descriptor.builtIns.unitType.toKtTypeAndAnnotations(analysisContext) }
|
||||
|
||||
override val isDefault: Boolean
|
||||
get() = withValidityAssertion { descriptor.isDefault }
|
||||
|
||||
+11
-75
@@ -5,14 +5,13 @@
|
||||
|
||||
package org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased
|
||||
|
||||
import com.intellij.psi.PsiElement
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.KtFe10AnalysisSession
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.base.KtFe10Symbol
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.*
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.pointers.KtFe10NeverRestoringSymbolPointer
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.*
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.markers.KtAnnotationCall
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.KtFunctionSymbol
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.KtPropertyGetterSymbol
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.KtPropertySetterSymbol
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.KtSyntheticJavaPropertySymbol
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.markers.KtConstantValue
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.markers.KtTypeAndAnnotations
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtPsiBasedSymbolPointer
|
||||
@@ -20,10 +19,7 @@ import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer
|
||||
import org.jetbrains.kotlin.analysis.api.types.KtType
|
||||
import org.jetbrains.kotlin.analysis.api.withValidityAssertion
|
||||
import org.jetbrains.kotlin.descriptors.ConstructorDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.Modality
|
||||
import org.jetbrains.kotlin.descriptors.Visibility
|
||||
import org.jetbrains.kotlin.name.CallableId
|
||||
import org.jetbrains.kotlin.name.ClassId
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.resolve.DescriptorUtils
|
||||
import org.jetbrains.kotlin.resolve.descriptorUtil.isExtension
|
||||
@@ -53,9 +49,10 @@ internal class KtFe10DescSyntheticJavaPropertySymbol(
|
||||
|
||||
override val getter: KtPropertyGetterSymbol
|
||||
get() = withValidityAssertion {
|
||||
val getter = descriptor.getter ?: return EmptyGetterSymbol(descriptor, analysisContext)
|
||||
val getter = descriptor.getter ?: return KtFe10DescDefaultPropertyGetterSymbol(descriptor, analysisContext)
|
||||
return KtFe10DescPropertyGetterSymbol(getter, analysisContext)
|
||||
}
|
||||
|
||||
override val javaGetterSymbol: KtFunctionSymbol
|
||||
get() = withValidityAssertion { KtFe10DescFunctionSymbol(descriptor.getMethod, analysisContext) }
|
||||
|
||||
@@ -70,7 +67,11 @@ internal class KtFe10DescSyntheticJavaPropertySymbol(
|
||||
|
||||
override val setter: KtPropertySetterSymbol?
|
||||
get() = withValidityAssertion {
|
||||
val setter = descriptor.setter ?: return null
|
||||
if (!descriptor.isVar) {
|
||||
return null
|
||||
}
|
||||
|
||||
val setter = descriptor.setter ?: return KtFe10DescDefaultPropertySetterSymbol(descriptor, analysisContext)
|
||||
KtFe10DescPropertySetterSymbol(setter, analysisContext)
|
||||
}
|
||||
|
||||
@@ -92,69 +93,4 @@ internal class KtFe10DescSyntheticJavaPropertySymbol(
|
||||
override fun createPointer(): KtSymbolPointer<KtSyntheticJavaPropertySymbol> = withValidityAssertion {
|
||||
return KtPsiBasedSymbolPointer.createForSymbolFromSource(this) ?: KtFe10NeverRestoringSymbolPointer()
|
||||
}
|
||||
|
||||
private class EmptyGetterSymbol(
|
||||
private val descriptor: SyntheticJavaPropertyDescriptor,
|
||||
override val analysisContext: Fe10AnalysisContext
|
||||
) : KtPropertyGetterSymbol(), KtFe10Symbol {
|
||||
override val isDefault: Boolean
|
||||
get() = withValidityAssertion { false }
|
||||
|
||||
override val isInline: Boolean
|
||||
get() = withValidityAssertion { false }
|
||||
|
||||
override val isOverride: Boolean
|
||||
get() = withValidityAssertion { descriptor.isExplicitOverride }
|
||||
|
||||
override val hasBody: Boolean
|
||||
get() = withValidityAssertion { false }
|
||||
|
||||
override val valueParameters: List<KtValueParameterSymbol>
|
||||
get() = withValidityAssertion { emptyList() }
|
||||
|
||||
override val hasStableParameterNames: Boolean
|
||||
get() = withValidityAssertion { true }
|
||||
|
||||
override val callableIdIfNonLocal: CallableId?
|
||||
get() = withValidityAssertion { null }
|
||||
|
||||
override val annotatedType: KtTypeAndAnnotations
|
||||
get() = withValidityAssertion { descriptor.type.toKtTypeAndAnnotations(analysisContext) }
|
||||
|
||||
override val origin: KtSymbolOrigin
|
||||
get() = withValidityAssertion { KtSymbolOrigin.JAVA }
|
||||
|
||||
override val psi: PsiElement?
|
||||
get() = withValidityAssertion { null }
|
||||
|
||||
override val receiverType: KtTypeAndAnnotations?
|
||||
get() = withValidityAssertion { descriptor.extensionReceiverParameter?.type?.toKtTypeAndAnnotations(analysisContext) }
|
||||
|
||||
override val dispatchType: KtType?
|
||||
get() = withValidityAssertion { descriptor.dispatchReceiverParameter?.type?.toKtType(analysisContext) }
|
||||
|
||||
override val modality: Modality
|
||||
get() = withValidityAssertion { Modality.FINAL }
|
||||
|
||||
override val visibility: Visibility
|
||||
get() = withValidityAssertion { descriptor.ktVisibility }
|
||||
|
||||
override val annotations: List<KtAnnotationCall>
|
||||
get() = withValidityAssertion { emptyList() }
|
||||
|
||||
override fun containsAnnotation(classId: ClassId): Boolean {
|
||||
withValidityAssertion {
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
override val annotationClassIds: Collection<ClassId>
|
||||
get() = withValidityAssertion { emptyList() }
|
||||
|
||||
override fun createPointer(): KtSymbolPointer<KtPropertyGetterSymbol> {
|
||||
withValidityAssertion {
|
||||
return KtFe10NeverRestoringSymbolPointer()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+7
-74
@@ -5,14 +5,10 @@
|
||||
|
||||
package org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased
|
||||
|
||||
import com.intellij.psi.PsiElement
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.KtFe10AnalysisSession
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.base.KtFe10Symbol
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.*
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.pointers.KtFe10NeverRestoringSymbolPointer
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.*
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.markers.KtAnnotationCall
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.markers.KtConstantValue
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.markers.KtTypeAndAnnotations
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtPsiBasedSymbolPointer
|
||||
@@ -20,11 +16,8 @@ import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer
|
||||
import org.jetbrains.kotlin.analysis.api.types.KtType
|
||||
import org.jetbrains.kotlin.analysis.api.withValidityAssertion
|
||||
import org.jetbrains.kotlin.descriptors.ConstructorDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.Modality
|
||||
import org.jetbrains.kotlin.descriptors.Visibility
|
||||
import org.jetbrains.kotlin.load.java.descriptors.JavaForKotlinOverridePropertyDescriptor
|
||||
import org.jetbrains.kotlin.name.CallableId
|
||||
import org.jetbrains.kotlin.name.ClassId
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.resolve.DescriptorUtils
|
||||
import org.jetbrains.kotlin.resolve.descriptorUtil.isExtension
|
||||
@@ -53,9 +46,10 @@ internal class KtFe10DescSyntheticJavaPropertySymbolForOverride(
|
||||
|
||||
override val getter: KtPropertyGetterSymbol
|
||||
get() = withValidityAssertion {
|
||||
val getter = descriptor.getter ?: return EmptyGetterSymbol(descriptor, analysisContext)
|
||||
val getter = descriptor.getter ?: return KtFe10DescDefaultPropertyGetterSymbol(descriptor, analysisContext)
|
||||
return KtFe10DescPropertyGetterSymbol(getter, analysisContext)
|
||||
}
|
||||
|
||||
override val javaGetterSymbol: KtFunctionSymbol
|
||||
get() = withValidityAssertion { KtFe10DescFunctionSymbol(descriptor.getterMethod, analysisContext) }
|
||||
|
||||
@@ -70,7 +64,11 @@ internal class KtFe10DescSyntheticJavaPropertySymbolForOverride(
|
||||
|
||||
override val setter: KtPropertySetterSymbol?
|
||||
get() = withValidityAssertion {
|
||||
val setter = descriptor.setter ?: return null
|
||||
if (!descriptor.isVar) {
|
||||
return null
|
||||
}
|
||||
|
||||
val setter = descriptor.setter ?: return KtFe10DescDefaultPropertySetterSymbol(descriptor, analysisContext)
|
||||
KtFe10DescPropertySetterSymbol(setter, analysisContext)
|
||||
}
|
||||
|
||||
@@ -92,69 +90,4 @@ internal class KtFe10DescSyntheticJavaPropertySymbolForOverride(
|
||||
override fun createPointer(): KtSymbolPointer<KtSyntheticJavaPropertySymbol> = withValidityAssertion {
|
||||
return KtPsiBasedSymbolPointer.createForSymbolFromSource(this) ?: KtFe10NeverRestoringSymbolPointer()
|
||||
}
|
||||
|
||||
private class EmptyGetterSymbol(
|
||||
private val descriptor: JavaForKotlinOverridePropertyDescriptor,
|
||||
override val analysisContext: Fe10AnalysisContext
|
||||
) : KtPropertyGetterSymbol(), KtFe10Symbol {
|
||||
override val isDefault: Boolean
|
||||
get() = withValidityAssertion { false }
|
||||
|
||||
override val isInline: Boolean
|
||||
get() = withValidityAssertion { false }
|
||||
|
||||
override val isOverride: Boolean
|
||||
get() = withValidityAssertion { descriptor.isExplicitOverride }
|
||||
|
||||
override val hasBody: Boolean
|
||||
get() = withValidityAssertion { false }
|
||||
|
||||
override val valueParameters: List<KtValueParameterSymbol>
|
||||
get() = withValidityAssertion { emptyList() }
|
||||
|
||||
override val hasStableParameterNames: Boolean
|
||||
get() = withValidityAssertion { true }
|
||||
|
||||
override val callableIdIfNonLocal: CallableId?
|
||||
get() = withValidityAssertion { null }
|
||||
|
||||
override val annotatedType: KtTypeAndAnnotations
|
||||
get() = withValidityAssertion { descriptor.type.toKtTypeAndAnnotations(analysisContext) }
|
||||
|
||||
override val origin: KtSymbolOrigin
|
||||
get() = withValidityAssertion { KtSymbolOrigin.JAVA }
|
||||
|
||||
override val psi: PsiElement?
|
||||
get() = withValidityAssertion { null }
|
||||
|
||||
override val receiverType: KtTypeAndAnnotations?
|
||||
get() = withValidityAssertion { descriptor.extensionReceiverParameter?.type?.toKtTypeAndAnnotations(analysisContext) }
|
||||
|
||||
override val dispatchType: KtType?
|
||||
get() = withValidityAssertion { descriptor.dispatchReceiverParameter?.type?.toKtType(analysisContext) }
|
||||
|
||||
override val modality: Modality
|
||||
get() = withValidityAssertion { Modality.FINAL }
|
||||
|
||||
override val visibility: Visibility
|
||||
get() = withValidityAssertion { descriptor.ktVisibility }
|
||||
|
||||
override val annotations: List<KtAnnotationCall>
|
||||
get() = withValidityAssertion { emptyList() }
|
||||
|
||||
override fun containsAnnotation(classId: ClassId): Boolean {
|
||||
withValidityAssertion {
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
override val annotationClassIds: Collection<ClassId>
|
||||
get() = withValidityAssertion { emptyList() }
|
||||
|
||||
override fun createPointer(): KtSymbolPointer<KtPropertyGetterSymbol> {
|
||||
withValidityAssertion {
|
||||
return KtFe10NeverRestoringSymbolPointer()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+119
@@ -0,0 +1,119 @@
|
||||
/*
|
||||
* 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.kotlin.analysis.api.descriptors.symbols.psiBased
|
||||
|
||||
import com.intellij.psi.PsiElement
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisFacade
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.base.KtFe10Symbol
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.ktVisibility
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.toKtType
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.toKtTypeAndAnnotations
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.pointers.KtFe10NeverRestoringSymbolPointer
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.psiBased.base.*
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.psiBased.base.createErrorTypeAndAnnotations
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.psiBased.base.ktModality
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.psiBased.base.ktVisibility
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.psiBased.base.ktSymbolOrigin
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.utils.cached
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.KtPropertyGetterSymbol
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.KtSymbolOrigin
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.KtValueParameterSymbol
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.markers.KtAnnotationCall
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.markers.KtTypeAndAnnotations
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer
|
||||
import org.jetbrains.kotlin.analysis.api.types.KtType
|
||||
import org.jetbrains.kotlin.analysis.api.withValidityAssertion
|
||||
import org.jetbrains.kotlin.descriptors.Modality
|
||||
import org.jetbrains.kotlin.descriptors.PropertyDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.Visibilities
|
||||
import org.jetbrains.kotlin.descriptors.Visibility
|
||||
import org.jetbrains.kotlin.lexer.KtTokens
|
||||
import org.jetbrains.kotlin.name.CallableId
|
||||
import org.jetbrains.kotlin.name.ClassId
|
||||
import org.jetbrains.kotlin.psi.KtProperty
|
||||
import org.jetbrains.kotlin.psi.psiUtil.isExtensionDeclaration
|
||||
import org.jetbrains.kotlin.resolve.BindingContext
|
||||
|
||||
class KtFe10PsiDefaultPropertyGetterSymbol(
|
||||
private val propertyPsi: KtProperty,
|
||||
override val analysisContext: Fe10AnalysisContext
|
||||
) : KtPropertyGetterSymbol(), KtFe10Symbol {
|
||||
private val descriptor: PropertyDescriptor? by cached {
|
||||
val bindingContext = analysisContext.analyze(propertyPsi, Fe10AnalysisFacade.AnalysisMode.PARTIAL)
|
||||
bindingContext[BindingContext.VARIABLE, psi] as? PropertyDescriptor
|
||||
}
|
||||
|
||||
override val origin: KtSymbolOrigin
|
||||
get() = withValidityAssertion { propertyPsi.ktSymbolOrigin }
|
||||
|
||||
override val psi: PsiElement?
|
||||
get() = withValidityAssertion { null }
|
||||
|
||||
override val isDefault: Boolean
|
||||
get() = withValidityAssertion { true }
|
||||
|
||||
override val isInline: Boolean
|
||||
get() = withValidityAssertion { propertyPsi.hasModifier(KtTokens.OVERRIDE_KEYWORD) }
|
||||
|
||||
override val isOverride: Boolean
|
||||
get() = withValidityAssertion { propertyPsi.hasModifier(KtTokens.OVERRIDE_KEYWORD) }
|
||||
|
||||
override val hasBody: Boolean
|
||||
get() = withValidityAssertion { false }
|
||||
|
||||
override val valueParameters: List<KtValueParameterSymbol>
|
||||
get() = withValidityAssertion { emptyList() }
|
||||
|
||||
override val hasStableParameterNames: Boolean
|
||||
get() = withValidityAssertion { true }
|
||||
|
||||
override val callableIdIfNonLocal: CallableId?
|
||||
get() = withValidityAssertion { null }
|
||||
|
||||
override val annotatedType: KtTypeAndAnnotations
|
||||
get() = withValidityAssertion { descriptor?.type?.toKtTypeAndAnnotations(analysisContext) ?: createErrorTypeAndAnnotations() }
|
||||
|
||||
override val receiverType: KtTypeAndAnnotations?
|
||||
get() = withValidityAssertion {
|
||||
return if (propertyPsi.isExtensionDeclaration()) {
|
||||
descriptor?.extensionReceiverParameter?.type?.toKtTypeAndAnnotations(analysisContext) ?: createErrorTypeAndAnnotations()
|
||||
} else {
|
||||
null
|
||||
}
|
||||
}
|
||||
|
||||
override val dispatchType: KtType?
|
||||
get() = withValidityAssertion {
|
||||
if (propertyPsi.isTopLevel) {
|
||||
return null
|
||||
}
|
||||
|
||||
return descriptor?.dispatchReceiverParameter?.type?.toKtType(analysisContext) ?: createErrorType()
|
||||
}
|
||||
|
||||
override val modality: Modality
|
||||
get() = withValidityAssertion { propertyPsi.ktModality ?: descriptor?.modality ?: Modality.FINAL }
|
||||
|
||||
override val visibility: Visibility
|
||||
get() = withValidityAssertion { propertyPsi.ktVisibility ?: descriptor?.ktVisibility ?: Visibilities.Public }
|
||||
|
||||
override val annotations: List<KtAnnotationCall>
|
||||
get() = withValidityAssertion { emptyList() }
|
||||
|
||||
override fun containsAnnotation(classId: ClassId): Boolean {
|
||||
withValidityAssertion {
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
override val annotationClassIds: Collection<ClassId>
|
||||
get() = withValidityAssertion { emptyList() }
|
||||
|
||||
override fun createPointer(): KtSymbolPointer<KtPropertyGetterSymbol> = withValidityAssertion {
|
||||
return KtFe10NeverRestoringSymbolPointer()
|
||||
}
|
||||
}
|
||||
+165
@@ -0,0 +1,165 @@
|
||||
/*
|
||||
* 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.kotlin.analysis.api.descriptors.symbols.psiBased
|
||||
|
||||
import com.intellij.psi.PsiElement
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisFacade
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.base.KtFe10Symbol
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.ktVisibility
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.toKtType
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.toKtTypeAndAnnotations
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.pointers.KtFe10NeverRestoringSymbolPointer
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.psiBased.base.*
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.psiBased.base.createErrorType
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.psiBased.base.createErrorTypeAndAnnotations
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.psiBased.base.ktModality
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.psiBased.base.ktVisibility
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.utils.cached
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.KtPropertySetterSymbol
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.KtSymbolOrigin
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.KtValueParameterSymbol
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.markers.KtAnnotationCall
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.markers.KtTypeAndAnnotations
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer
|
||||
import org.jetbrains.kotlin.analysis.api.types.KtType
|
||||
import org.jetbrains.kotlin.analysis.api.withValidityAssertion
|
||||
import org.jetbrains.kotlin.descriptors.Modality
|
||||
import org.jetbrains.kotlin.descriptors.PropertyDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.Visibilities
|
||||
import org.jetbrains.kotlin.descriptors.Visibility
|
||||
import org.jetbrains.kotlin.lexer.KtTokens
|
||||
import org.jetbrains.kotlin.name.CallableId
|
||||
import org.jetbrains.kotlin.name.ClassId
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.psi.KtProperty
|
||||
import org.jetbrains.kotlin.psi.psiUtil.isExtensionDeclaration
|
||||
import org.jetbrains.kotlin.resolve.BindingContext
|
||||
|
||||
class KtFe10PsiDefaultPropertySetterSymbol(
|
||||
private val propertyPsi: KtProperty,
|
||||
override val analysisContext: Fe10AnalysisContext
|
||||
) : KtPropertySetterSymbol(), KtFe10Symbol {
|
||||
private val descriptor: PropertyDescriptor? by cached {
|
||||
val bindingContext = analysisContext.analyze(propertyPsi, Fe10AnalysisFacade.AnalysisMode.PARTIAL)
|
||||
bindingContext[BindingContext.VARIABLE, psi] as? PropertyDescriptor
|
||||
}
|
||||
|
||||
override val origin: KtSymbolOrigin
|
||||
get() = withValidityAssertion { propertyPsi.ktSymbolOrigin }
|
||||
|
||||
override val psi: PsiElement?
|
||||
get() = withValidityAssertion { null }
|
||||
|
||||
override val isDefault: Boolean
|
||||
get() = withValidityAssertion { true }
|
||||
|
||||
override val isInline: Boolean
|
||||
get() = withValidityAssertion { propertyPsi.hasModifier(KtTokens.OVERRIDE_KEYWORD) }
|
||||
|
||||
override val isOverride: Boolean
|
||||
get() = withValidityAssertion { propertyPsi.hasModifier(KtTokens.OVERRIDE_KEYWORD) }
|
||||
|
||||
override val hasBody: Boolean
|
||||
get() = withValidityAssertion { false }
|
||||
|
||||
override val parameter: KtValueParameterSymbol by cached {
|
||||
DefaultKtValueParameterSymbol(propertyPsi, descriptor, analysisContext)
|
||||
}
|
||||
|
||||
override val valueParameters: List<KtValueParameterSymbol>
|
||||
get() = withValidityAssertion { listOf(parameter) }
|
||||
|
||||
override val hasStableParameterNames: Boolean
|
||||
get() = withValidityAssertion { true }
|
||||
|
||||
override val callableIdIfNonLocal: CallableId?
|
||||
get() = withValidityAssertion { null }
|
||||
|
||||
override val annotatedType: KtTypeAndAnnotations
|
||||
get() = withValidityAssertion {
|
||||
val builtIns = analysisContext.resolveSession.moduleDescriptor.builtIns
|
||||
return builtIns.unitType.toKtTypeAndAnnotations(analysisContext)
|
||||
}
|
||||
|
||||
override val receiverType: KtTypeAndAnnotations?
|
||||
get() = withValidityAssertion {
|
||||
return if (propertyPsi.isExtensionDeclaration()) {
|
||||
descriptor?.extensionReceiverParameter?.type?.toKtTypeAndAnnotations(analysisContext) ?: createErrorTypeAndAnnotations()
|
||||
} else {
|
||||
null
|
||||
}
|
||||
}
|
||||
|
||||
override val dispatchType: KtType?
|
||||
get() = withValidityAssertion {
|
||||
if (propertyPsi.isTopLevel) {
|
||||
return null
|
||||
}
|
||||
|
||||
return descriptor?.dispatchReceiverParameter?.type?.toKtType(analysisContext) ?: createErrorType()
|
||||
}
|
||||
|
||||
override val modality: Modality
|
||||
get() = withValidityAssertion { propertyPsi.ktModality ?: descriptor?.modality ?: Modality.FINAL }
|
||||
|
||||
override val visibility: Visibility
|
||||
get() = withValidityAssertion { propertyPsi.ktVisibility ?: descriptor?.ktVisibility ?: Visibilities.Public }
|
||||
|
||||
override val annotations: List<KtAnnotationCall>
|
||||
get() = withValidityAssertion { emptyList() }
|
||||
|
||||
override fun containsAnnotation(classId: ClassId): Boolean {
|
||||
withValidityAssertion {
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
override val annotationClassIds: Collection<ClassId>
|
||||
get() = withValidityAssertion { emptyList() }
|
||||
|
||||
override fun createPointer(): KtSymbolPointer<KtPropertySetterSymbol> = withValidityAssertion {
|
||||
return KtFe10NeverRestoringSymbolPointer()
|
||||
}
|
||||
|
||||
private class DefaultKtValueParameterSymbol(
|
||||
private val propertyPsi: KtProperty,
|
||||
private val descriptor: PropertyDescriptor?,
|
||||
override val analysisContext: Fe10AnalysisContext
|
||||
) : KtValueParameterSymbol(), KtFe10Symbol {
|
||||
override val hasDefaultValue: Boolean
|
||||
get() = withValidityAssertion { false }
|
||||
|
||||
override val isVararg: Boolean
|
||||
get() = withValidityAssertion { false }
|
||||
|
||||
override val name: Name
|
||||
get() = withValidityAssertion { Name.identifier("value") }
|
||||
|
||||
override val annotatedType: KtTypeAndAnnotations
|
||||
get() = withValidityAssertion { descriptor?.type?.toKtTypeAndAnnotations(analysisContext) ?: createErrorTypeAndAnnotations() }
|
||||
|
||||
override val origin: KtSymbolOrigin
|
||||
get() = withValidityAssertion { propertyPsi.ktSymbolOrigin }
|
||||
|
||||
override val psi: PsiElement?
|
||||
get() = withValidityAssertion { null }
|
||||
|
||||
override val annotations: List<KtAnnotationCall>
|
||||
get() = withValidityAssertion { emptyList() }
|
||||
|
||||
override fun containsAnnotation(classId: ClassId): Boolean = withValidityAssertion {
|
||||
return false
|
||||
}
|
||||
|
||||
override val annotationClassIds: Collection<ClassId>
|
||||
get() = withValidityAssertion { emptyList() }
|
||||
|
||||
override fun createPointer(): KtSymbolPointer<KtValueParameterSymbol> = withValidityAssertion {
|
||||
return KtFe10NeverRestoringSymbolPointer()
|
||||
}
|
||||
}
|
||||
}
|
||||
+13
-9
@@ -52,20 +52,24 @@ internal class KtFe10PsiKotlinPropertySymbol(
|
||||
get() = withValidityAssertion { psi.hasModifier(KtTokens.CONST_KEYWORD) }
|
||||
|
||||
override val hasGetter: Boolean
|
||||
get() = withValidityAssertion { psi.getter != null }
|
||||
get() = withValidityAssertion { true }
|
||||
|
||||
override val hasSetter: Boolean
|
||||
get() = withValidityAssertion { psi.setter != null }
|
||||
get() = withValidityAssertion { psi.isVar }
|
||||
|
||||
override val getter: KtPropertyGetterSymbol?
|
||||
override val getter: KtPropertyGetterSymbol
|
||||
get() = withValidityAssertion {
|
||||
val getter = psi.getter ?: return null
|
||||
val getter = psi.getter ?: return KtFe10PsiDefaultPropertyGetterSymbol(psi, analysisContext)
|
||||
return KtFe10PsiPropertyGetterSymbol(getter, analysisContext)
|
||||
}
|
||||
|
||||
override val setter: KtPropertySetterSymbol?
|
||||
get() = withValidityAssertion {
|
||||
val setter = psi.setter ?: return null
|
||||
if (!psi.isVar) {
|
||||
return null
|
||||
}
|
||||
|
||||
val setter = psi.setter ?: return KtFe10PsiDefaultPropertySetterSymbol(psi, analysisContext)
|
||||
return KtFe10PsiPropertySetterSymbol(setter, analysisContext)
|
||||
}
|
||||
|
||||
@@ -121,11 +125,11 @@ internal class KtFe10PsiKotlinPropertySymbol(
|
||||
|
||||
override val dispatchType: KtType?
|
||||
get() = withValidityAssertion {
|
||||
return if (!isStatic) {
|
||||
descriptor?.dispatchReceiverParameter?.type?.toKtType(analysisContext) ?: createErrorType()
|
||||
} else {
|
||||
null
|
||||
if (psi.isTopLevel) {
|
||||
return null
|
||||
}
|
||||
|
||||
return descriptor?.dispatchReceiverParameter?.type?.toKtType(analysisContext) ?: createErrorType()
|
||||
}
|
||||
|
||||
override val modality: Modality
|
||||
|
||||
Reference in New Issue
Block a user