EA-219152 (partially): Provide correct PropertyDescriptor for _field
This commit is contained in:
+30
-10
@@ -10,6 +10,8 @@ import org.jetbrains.kotlin.descriptors.*
|
|||||||
import org.jetbrains.kotlin.descriptors.annotations.Annotations
|
import org.jetbrains.kotlin.descriptors.annotations.Annotations
|
||||||
import org.jetbrains.kotlin.descriptors.impl.PropertyDescriptorImpl
|
import org.jetbrains.kotlin.descriptors.impl.PropertyDescriptorImpl
|
||||||
import org.jetbrains.kotlin.descriptors.impl.PropertyGetterDescriptorImpl
|
import org.jetbrains.kotlin.descriptors.impl.PropertyGetterDescriptorImpl
|
||||||
|
import org.jetbrains.kotlin.descriptors.impl.PropertySetterDescriptorImpl
|
||||||
|
import org.jetbrains.kotlin.descriptors.impl.ValueParameterDescriptorImpl
|
||||||
import org.jetbrains.kotlin.idea.project.platform
|
import org.jetbrains.kotlin.idea.project.platform
|
||||||
import org.jetbrains.kotlin.incremental.KotlinLookupLocation
|
import org.jetbrains.kotlin.incremental.KotlinLookupLocation
|
||||||
import org.jetbrains.kotlin.incremental.components.LookupLocation
|
import org.jetbrains.kotlin.incremental.components.LookupLocation
|
||||||
@@ -122,7 +124,8 @@ class DebuggerFieldSyntheticScope(val javaSyntheticPropertiesScope: JavaSyntheti
|
|||||||
val type = propertyDescriptor.type
|
val type = propertyDescriptor.type
|
||||||
val sourceElement = propertyDescriptor.source
|
val sourceElement = propertyDescriptor.source
|
||||||
|
|
||||||
consumer[name] = createSyntheticPropertyDescriptor(clazz, type, name.asString(), "Backing field", sourceElement) { state ->
|
val isVar = propertyDescriptor.isVar
|
||||||
|
consumer[name] = createSyntheticPropertyDescriptor(clazz, type, name, isVar, "Backing field", sourceElement) { state ->
|
||||||
state.typeMapper.mapType(clazz.defaultType)
|
state.typeMapper.mapType(clazz.defaultType)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -145,7 +148,8 @@ class DebuggerFieldSyntheticScope(val javaSyntheticPropertiesScope: JavaSyntheti
|
|||||||
val type = typeResolver.transformJavaType(field.type, TypeUsage.COMMON.toAttributes()).replaceArgumentsWithStarProjections()
|
val type = typeResolver.transformJavaType(field.type, TypeUsage.COMMON.toAttributes()).replaceArgumentsWithStarProjections()
|
||||||
val sourceElement = javaSourceElementFactory.source(field)
|
val sourceElement = javaSourceElementFactory.source(field)
|
||||||
|
|
||||||
consumer[fieldName] = createSyntheticPropertyDescriptor(clazz, type, fieldName.asString(), "Java field", sourceElement) {
|
val isVar = !field.isFinal
|
||||||
|
consumer[fieldName] = createSyntheticPropertyDescriptor(clazz, type, fieldName, isVar, "Java field", sourceElement) {
|
||||||
Type.getObjectType(ownerClassName)
|
Type.getObjectType(ownerClassName)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -154,12 +158,13 @@ class DebuggerFieldSyntheticScope(val javaSyntheticPropertiesScope: JavaSyntheti
|
|||||||
private fun createSyntheticPropertyDescriptor(
|
private fun createSyntheticPropertyDescriptor(
|
||||||
clazz: ClassDescriptor,
|
clazz: ClassDescriptor,
|
||||||
type: KotlinType,
|
type: KotlinType,
|
||||||
fieldName: String,
|
fieldName: Name,
|
||||||
|
isVar: Boolean,
|
||||||
description: String,
|
description: String,
|
||||||
getterSource: SourceElement,
|
sourceElement: SourceElement,
|
||||||
ownerType: (GenerationState) -> Type
|
ownerType: (GenerationState) -> Type
|
||||||
): PropertyDescriptor {
|
): PropertyDescriptor {
|
||||||
val propertyDescriptor = DebuggerFieldPropertyDescriptor(clazz, fieldName, description, ownerType)
|
val propertyDescriptor = DebuggerFieldPropertyDescriptor(clazz, fieldName.asString(), description, ownerType, isVar)
|
||||||
|
|
||||||
val extensionReceiverParameter = DescriptorFactory.createExtensionReceiverParameterForCallable(
|
val extensionReceiverParameter = DescriptorFactory.createExtensionReceiverParameterForCallable(
|
||||||
propertyDescriptor,
|
propertyDescriptor,
|
||||||
@@ -173,10 +178,24 @@ class DebuggerFieldSyntheticScope(val javaSyntheticPropertiesScope: JavaSyntheti
|
|||||||
propertyDescriptor, Annotations.EMPTY, Modality.FINAL,
|
propertyDescriptor, Annotations.EMPTY, Modality.FINAL,
|
||||||
Visibilities.PUBLIC, false, false, false,
|
Visibilities.PUBLIC, false, false, false,
|
||||||
CallableMemberDescriptor.Kind.SYNTHESIZED,
|
CallableMemberDescriptor.Kind.SYNTHESIZED,
|
||||||
null, getterSource
|
null, sourceElement
|
||||||
)
|
).apply { initialize(type) }
|
||||||
|
|
||||||
propertyDescriptor.initialize(getter, null)
|
val setter = if (isVar) PropertySetterDescriptorImpl(
|
||||||
|
propertyDescriptor, Annotations.EMPTY, Modality.FINAL,
|
||||||
|
Visibilities.PUBLIC, false, false, false,
|
||||||
|
CallableMemberDescriptor.Kind.SYNTHESIZED,
|
||||||
|
null, sourceElement
|
||||||
|
).apply {
|
||||||
|
val setterValueParameter = ValueParameterDescriptorImpl(
|
||||||
|
this, null, 0, Annotations.EMPTY, Name.identifier("value"), type,
|
||||||
|
declaresDefaultValue = false, isCrossinline = false, isNoinline = false,
|
||||||
|
varargElementType = null, source = sourceElement
|
||||||
|
)
|
||||||
|
initialize(setterValueParameter)
|
||||||
|
} else null
|
||||||
|
|
||||||
|
propertyDescriptor.initialize(getter, setter)
|
||||||
|
|
||||||
return propertyDescriptor
|
return propertyDescriptor
|
||||||
}
|
}
|
||||||
@@ -186,14 +205,15 @@ internal class DebuggerFieldPropertyDescriptor(
|
|||||||
containingDeclaration: DeclarationDescriptor,
|
containingDeclaration: DeclarationDescriptor,
|
||||||
val fieldName: String,
|
val fieldName: String,
|
||||||
val description: String,
|
val description: String,
|
||||||
val ownerType: (GenerationState) -> Type
|
val ownerType: (GenerationState) -> Type,
|
||||||
|
isVar: Boolean
|
||||||
) : PropertyDescriptorImpl(
|
) : PropertyDescriptorImpl(
|
||||||
containingDeclaration,
|
containingDeclaration,
|
||||||
null,
|
null,
|
||||||
Annotations.EMPTY,
|
Annotations.EMPTY,
|
||||||
Modality.FINAL,
|
Modality.FINAL,
|
||||||
Visibilities.PUBLIC,
|
Visibilities.PUBLIC,
|
||||||
/*isVar = */true,
|
/*isVar = */isVar,
|
||||||
Name.identifier(fieldName + "_field"),
|
Name.identifier(fieldName + "_field"),
|
||||||
CallableMemberDescriptor.Kind.SYNTHESIZED,
|
CallableMemberDescriptor.Kind.SYNTHESIZED,
|
||||||
SourceElement.NO_SOURCE,
|
SourceElement.NO_SOURCE,
|
||||||
|
|||||||
Reference in New Issue
Block a user