Do not generate properties from script constructor

From now all script parameter properties are generated by template class
This commit is contained in:
Mikhail Zarechenskiy
2016-09-12 02:40:33 +03:00
parent 0ba2d374bc
commit b18cbc37c6
6 changed files with 55 additions and 266 deletions
@@ -19,16 +19,11 @@ package org.jetbrains.kotlin.resolve.lazy.descriptors
import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.descriptors.annotations.Annotations
import org.jetbrains.kotlin.descriptors.impl.ClassConstructorDescriptorImpl
import org.jetbrains.kotlin.descriptors.impl.PropertyDescriptorImpl
import org.jetbrains.kotlin.descriptors.impl.ValueParameterDescriptorImpl
import org.jetbrains.kotlin.incremental.components.LookupLocation
import org.jetbrains.kotlin.incremental.components.NoLookupLocation
import org.jetbrains.kotlin.incremental.record
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.resolve.BindingTrace
import org.jetbrains.kotlin.resolve.lazy.ResolveSession
import org.jetbrains.kotlin.resolve.lazy.declarations.ClassMemberDeclarationProvider
import org.jetbrains.kotlin.utils.toReadOnlyList
class LazyScriptClassMemberScope(
resolveSession: ResolveSession,
@@ -65,52 +60,6 @@ class LazyScriptClassMemberScope(
}
}
override fun computeExtraDescriptors(location: LookupLocation): Collection<DeclarationDescriptor> {
return (super.computeExtraDescriptors(location)
+ getPropertiesForScriptParameters()).toReadOnlyList()
}
private fun getPropertiesForScriptParameters() = getPrimaryConstructor()!!.valueParameters.flatMap {
getContributedVariables(it.name, NoLookupLocation.FOR_SCRIPT)
}
override fun createPropertiesFromPrimaryConstructorParameters(name: Name, result: MutableSet<PropertyDescriptor>) {
val primaryConstructor = getPrimaryConstructor()!!
val parametersToPassToSuperclass = scriptDescriptor.scriptParametersToPassToSuperclass.map { it.first }
for (valueParameterDescriptor in primaryConstructor.valueParameters) {
if (name == valueParameterDescriptor.name && name !in parametersToPassToSuperclass) {
result.add(createPropertyFromScriptParameter(scriptDescriptor, valueParameterDescriptor))
}
}
}
private fun createPropertyFromScriptParameter(
scriptDescriptor: ScriptDescriptor,
parameter: ValueParameterDescriptor
): PropertyDescriptor {
val propertyDescriptor = PropertyDescriptorImpl.create(
scriptDescriptor,
Annotations.EMPTY,
Modality.FINAL,
Visibilities.PUBLIC,
false,
parameter.name,
CallableMemberDescriptor.Kind.DECLARATION,
SourceElement.NO_SOURCE,
/* lateInit = */ false,
/* isConst = */ false
)
propertyDescriptor.setType(
parameter.type,
listOf(),
scriptDescriptor.thisAsReceiverParameter,
null as ReceiverParameterDescriptor?
)
propertyDescriptor.initialize(null, null)
return propertyDescriptor
}
override fun recordLookup(name: Name, from: LookupLocation) {
c.lookupTracker.record(from, thisDescriptor, name)
}
}