Class descriptors with kind OBJECT are always final

This commit is contained in:
Andrey Breslav
2012-07-19 17:19:53 +04:00
parent bd5eb0c2b5
commit c91af010e1
6 changed files with 173 additions and 2 deletions
@@ -97,9 +97,15 @@ public class LazyClassDescriptor extends ClassDescriptorBase implements ClassDes
this.typeConstructor = new LazyClassTypeConstructor();
this.kind = classLikeInfo.getClassKind();
Modality defaultModality = kind == ClassKind.TRAIT ? Modality.ABSTRACT : Modality.FINAL;
if (kind == ClassKind.OBJECT) {
this.modality = Modality.FINAL;
}
else {
Modality defaultModality = kind == ClassKind.TRAIT ? Modality.ABSTRACT : Modality.FINAL;
JetModifierList modifierList = classLikeInfo.getModifierList();
this.modality = DescriptorResolver.resolveModalityFromModifiers(modifierList, defaultModality);
}
JetModifierList modifierList = classLikeInfo.getModifierList();
this.modality = DescriptorResolver.resolveModalityFromModifiers(modifierList, defaultModality);
this.visibility = DescriptorResolver.resolveVisibilityFromModifiers(modifierList, Visibilities.INTERNAL);
}
@@ -0,0 +1,12 @@
namespace <root>
// <namespace name="abstract">
namespace abstract
internal abstract enum class abstract.MyAbstractEnum : jet.Any {
public final /*constructor*/ fun <init>(): abstract.MyAbstractEnum
internal final class object abstract.MyAbstractEnum.<class-object-for-MyAbstractEnum> {
internal final /*constructor*/ fun <init>(): abstract.MyAbstractEnum.<class-object-for-MyAbstractEnum>
}
}
// </namespace name="abstract">
@@ -0,0 +1,22 @@
namespace <root>
internal final class Barrr : Foo {
public final /*constructor*/ fun <init>(): Barrr
}
internal final class Br : T {
public final /*constructor*/ fun <init>(/*0*/ t: T): Br
}
internal open enum class E : jet.Any {
public final /*constructor*/ fun <init>(): E
internal final class object E.<class-object-for-E> {
internal final /*constructor*/ fun <init>(): E.<class-object-for-E>
}
}
internal open class Foo : jet.Any {
public final /*constructor*/ fun <init>(): Foo
}
internal abstract trait T : jet.Any {
}
internal final class Test2 : E {
public final /*constructor*/ fun <init>(/*0*/ e: E): Test2
}
@@ -0,0 +1,95 @@
namespace <root>
// <namespace name="uninitialized_reassigned_variables">
namespace uninitialized_reassigned_variables
internal final class uninitialized_reassigned_variables.A : jet.Any {
public final /*constructor*/ fun <init>(): uninitialized_reassigned_variables.A
}
internal final class uninitialized_reassigned_variables.AnonymousInitializers : jet.Any {
public final /*constructor*/ fun <init>(/*0*/ a: jet.String, /*1*/ b: jet.String): uninitialized_reassigned_variables.AnonymousInitializers
internal final var a: jet.String
internal final val b: jet.String
internal final val i: jet.Int
internal final val j: jet.Int
internal final val k: jet.String
internal final val l: jet.String
internal final var m: jet.Int
internal final val n: jet.Int
internal final val o: jet.String
internal final var p: jet.Int
}
internal final class uninitialized_reassigned_variables.ClassObject : jet.Any {
public final /*constructor*/ fun <init>(): uninitialized_reassigned_variables.ClassObject
internal final class object uninitialized_reassigned_variables.ClassObject.<no name provided> : jet.Any {
internal final /*constructor*/ fun <init>(): uninitialized_reassigned_variables.ClassObject.<no name provided>
internal final fun foo(): jet.Tuple0
internal final val x: jet.Int
}
}
internal final class uninitialized_reassigned_variables.ForwardAccessToBackingField : jet.Any {
public final /*constructor*/ fun <init>(): uninitialized_reassigned_variables.ForwardAccessToBackingField
internal final val a: [ERROR : Type for $a]
internal final val b: jet.Int
internal final val c: jet.Int
}
internal final class uninitialized_reassigned_variables.LocalValsVsProperties : uninitialized_reassigned_variables.Open {
public final /*constructor*/ fun <init>(/*0*/ a: jet.Int, /*1*/ w: jet.Int): uninitialized_reassigned_variables.LocalValsVsProperties
internal final val a: jet.Int
internal final val b: jet.Int
internal final fun foo(): jet.Tuple0
internal final val x: jet.Int
internal final var xx: jet.Int
internal final val y: jet.Int
internal final var yy: jet.Int
}
internal final class uninitialized_reassigned_variables.M : jet.Any {
public final /*constructor*/ fun <init>(): uninitialized_reassigned_variables.M
internal final val x: jet.Int
internal final var y: jet.Int
}
internal open class uninitialized_reassigned_variables.Open : jet.Any {
public final /*constructor*/ fun <init>(/*0*/ a: jet.Int, /*1*/ w: jet.Int): uninitialized_reassigned_variables.Open
}
internal final class uninitialized_reassigned_variables.Outer : jet.Any {
public final /*constructor*/ fun <init>(): uninitialized_reassigned_variables.Outer
internal final val a: jet.Int
internal final var b: jet.Int
internal final fun foo(): jet.Tuple0
internal final class uninitialized_reassigned_variables.Outer.Inner : jet.Any {
public final /*constructor*/ fun <init>(): uninitialized_reassigned_variables.Outer.Inner
}
}
internal abstract enum class uninitialized_reassigned_variables.ProtocolState : jet.Any {
public final /*constructor*/ fun <init>(): uninitialized_reassigned_variables.ProtocolState
internal abstract fun signal(): uninitialized_reassigned_variables.ProtocolState
internal final class object uninitialized_reassigned_variables.ProtocolState.<class-object-for-ProtocolState> {
internal final /*constructor*/ fun <init>(): uninitialized_reassigned_variables.ProtocolState.<class-object-for-ProtocolState>
internal final val TALKING: uninitialized_reassigned_variables.ProtocolState.<class-object-for-ProtocolState>.TALKING
internal final val WAITING: uninitialized_reassigned_variables.ProtocolState.<class-object-for-ProtocolState>.WAITING
}
}
internal final class uninitialized_reassigned_variables.TestObjectExpression : jet.Any {
public final /*constructor*/ fun <init>(): uninitialized_reassigned_variables.TestObjectExpression
internal final val a: jet.Int
internal final fun foo(): jet.Tuple0
}
internal final val TestObjectDeclaration: uninitialized_reassigned_variables.TestObjectDeclaration
internal final var x: jet.Int
internal final val y: jet.Int
internal final val z: jet.Int
internal final fun doSmth(/*0*/ i: jet.Int): jet.Tuple0
internal final fun doSmth(/*0*/ s: jet.String): jet.Tuple0
internal final fun foo(): jet.Tuple0
internal final fun func(): jet.Tuple0
internal final fun reassignFunParams(/*0*/ a: jet.Int): jet.Tuple0
internal final fun t1(): jet.Tuple0
internal final fun t1(/*0*/ b: jet.Boolean): jet.Tuple0
internal final fun t2(): jet.Tuple0
internal final fun t3(): jet.Tuple0
internal final fun t4(): jet.Tuple0
internal final fun t4(/*0*/ a: uninitialized_reassigned_variables.A, /*1*/ b: uninitialized_reassigned_variables.A, /*2*/ c: uninitialized_reassigned_variables.A): jet.Tuple0
internal final fun t5(): jet.Tuple0
internal final fun test(/*0*/ m: uninitialized_reassigned_variables.M): jet.Tuple0
internal final fun test1(/*0*/ m: uninitialized_reassigned_variables.M): jet.Tuple0
// </namespace name="uninitialized_reassigned_variables">
@@ -0,0 +1,24 @@
namespace <root>
// <namespace name="kt1193">
namespace kt1193
internal final enum class kt1193.MyChildEnum : kt1193.MyEnum {
public final /*constructor*/ fun <init>(/*0*/ i: jet.Int, /*1*/ s: jet.String): kt1193.MyChildEnum
internal final override /*1*/ val i: jet.Int
internal final val s: jet.String
internal final class object kt1193.MyChildEnum.<class-object-for-MyChildEnum> {
internal final /*constructor*/ fun <init>(): kt1193.MyChildEnum.<class-object-for-MyChildEnum>
internal final val C: kt1193.MyChildEnum.<class-object-for-MyChildEnum>.C
}
}
internal open enum class kt1193.MyEnum : jet.Any {
public final /*constructor*/ fun <init>(/*0*/ i: jet.Int): kt1193.MyEnum
internal final val i: jet.Int
internal final class object kt1193.MyEnum.<class-object-for-MyEnum> {
internal final /*constructor*/ fun <init>(): kt1193.MyEnum.<class-object-for-MyEnum>
internal final val A: kt1193.MyEnum.<class-object-for-MyEnum>.A
internal final val B: kt1193.MyEnum.<class-object-for-MyEnum>.B
}
}
// </namespace name="kt1193">
@@ -0,0 +1,12 @@
namespace <root>
internal abstract enum class ProtocolState : jet.Any {
public final /*constructor*/ fun <init>(): ProtocolState
internal abstract fun signal(): ProtocolState
internal final class object ProtocolState.<class-object-for-ProtocolState> {
internal final /*constructor*/ fun <init>(): ProtocolState.<class-object-for-ProtocolState>
internal final val TALKING: ProtocolState.<class-object-for-ProtocolState>.TALKING
internal final val WAITING: ProtocolState.<class-object-for-ProtocolState>.WAITING
}
}
internal final fun box(): jet.String