Revert "Generate descriptor for trait constructor. Exception is thrown otherwise (EA-38416)"

This reverts commit 6ba120bba8.
This commit is contained in:
Nikolay Krasko
2015-03-12 14:18:22 +03:00
parent 6ba120bba8
commit dcd29cb65d
7 changed files with 23 additions and 121 deletions
@@ -274,28 +274,25 @@ public open class LazyClassMemberScope(
public fun getPrimaryConstructor(): ConstructorDescriptor? = primaryConstructor()
protected open fun resolvePrimaryConstructor(): ConstructorDescriptor? {
val ownerInfo = declarationProvider.getOwnerInfo()
val classOrObject = ownerInfo.getCorrespondingClassOrObject()
if (!thisDescriptor.getKind().isSingleton() && !classOrObject.isObjectLiteral()) {
assert(classOrObject is JetClass) { "No JetClass for $thisDescriptor" }
classOrObject as JetClass
if (DescriptorUtils.isTrait(thisDescriptor) && declarationProvider.getOwnerInfo().getPrimaryConstructorParameters().isEmpty()) {
return null
if (GENERATE_CONSTRUCTORS_FOR.contains(thisDescriptor.getKind())) {
val ownerInfo = declarationProvider.getOwnerInfo()
val classOrObject = ownerInfo.getCorrespondingClassOrObject()
if (!thisDescriptor.getKind().isSingleton() && !classOrObject.isObjectLiteral()) {
assert(classOrObject is JetClass) { "No JetClass for $thisDescriptor" }
classOrObject as JetClass
val constructor = c.descriptorResolver.resolvePrimaryConstructorDescriptor(
thisDescriptor.getScopeForClassHeaderResolution(), thisDescriptor, classOrObject, trace)
constructor ?: return null
setDeferredReturnType(constructor)
return constructor
}
else {
val constructor = DescriptorResolver.createAndRecordPrimaryConstructorForObject(classOrObject, thisDescriptor, trace)
setDeferredReturnType(constructor)
return constructor
}
val constructor = c.descriptorResolver.resolvePrimaryConstructorDescriptor(
thisDescriptor.getScopeForClassHeaderResolution(), thisDescriptor, classOrObject, trace)
assert(constructor != null) { "No constructor created for $thisDescriptor" }
setDeferredReturnType(constructor)
return constructor
}
else {
val constructor = DescriptorResolver.createAndRecordPrimaryConstructorForObject(classOrObject, thisDescriptor, trace)
setDeferredReturnType(constructor)
return constructor
}
return null
}
private fun resolveSecondaryConstructors(): Collection<ConstructorDescriptor> {
@@ -321,6 +318,12 @@ public open class LazyClassMemberScope(
override fun toString() = "lazy scope for class ${thisDescriptor.getName()}"
default object {
private val GENERATE_CONSTRUCTORS_FOR = setOf(ClassKind.CLASS,
ClassKind.ANNOTATION_CLASS,
ClassKind.OBJECT,
ClassKind.ENUM_CLASS,
ClassKind.ENUM_ENTRY)
private val EXTRACT_FUNCTIONS: MemberExtractor<FunctionDescriptor> = object : MemberExtractor<FunctionDescriptor> {
override fun extract(extractFrom: JetType, name: Name): Collection<FunctionDescriptor> {
return extractFrom.getMemberScope().getFunctions(name)