diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/LazyClassDescriptor.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/LazyClassDescriptor.java index 613e7966fb6..c6edf914a31 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/LazyClassDescriptor.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/LazyClassDescriptor.java @@ -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); } diff --git a/compiler/testData/lazyResolve/diagnostics/AbstractEnum.txt b/compiler/testData/lazyResolve/diagnostics/AbstractEnum.txt new file mode 100644 index 00000000000..97d87943bae --- /dev/null +++ b/compiler/testData/lazyResolve/diagnostics/AbstractEnum.txt @@ -0,0 +1,12 @@ +namespace + +// +namespace abstract + +internal abstract enum class abstract.MyAbstractEnum : jet.Any { + public final /*constructor*/ fun (): abstract.MyAbstractEnum + internal final class object abstract.MyAbstractEnum. { + internal final /*constructor*/ fun (): abstract.MyAbstractEnum. + } +} +// diff --git a/compiler/testData/lazyResolve/diagnostics/DelegationNotTotrait.txt b/compiler/testData/lazyResolve/diagnostics/DelegationNotTotrait.txt new file mode 100644 index 00000000000..4b15cafbf32 --- /dev/null +++ b/compiler/testData/lazyResolve/diagnostics/DelegationNotTotrait.txt @@ -0,0 +1,22 @@ +namespace + +internal final class Barrr : Foo { + public final /*constructor*/ fun (): Barrr +} +internal final class Br : T { + public final /*constructor*/ fun (/*0*/ t: T): Br +} +internal open enum class E : jet.Any { + public final /*constructor*/ fun (): E + internal final class object E. { + internal final /*constructor*/ fun (): E. + } +} +internal open class Foo : jet.Any { + public final /*constructor*/ fun (): Foo +} +internal abstract trait T : jet.Any { +} +internal final class Test2 : E { + public final /*constructor*/ fun (/*0*/ e: E): Test2 +} diff --git a/compiler/testData/lazyResolve/diagnostics/UninitializedOrReassignedVariables.txt b/compiler/testData/lazyResolve/diagnostics/UninitializedOrReassignedVariables.txt new file mode 100644 index 00000000000..b142f4db7cf --- /dev/null +++ b/compiler/testData/lazyResolve/diagnostics/UninitializedOrReassignedVariables.txt @@ -0,0 +1,95 @@ +namespace + +// +namespace uninitialized_reassigned_variables + +internal final class uninitialized_reassigned_variables.A : jet.Any { + public final /*constructor*/ fun (): uninitialized_reassigned_variables.A +} +internal final class uninitialized_reassigned_variables.AnonymousInitializers : jet.Any { + public final /*constructor*/ fun (/*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 (): uninitialized_reassigned_variables.ClassObject + internal final class object uninitialized_reassigned_variables.ClassObject. : jet.Any { + internal final /*constructor*/ fun (): uninitialized_reassigned_variables.ClassObject. + 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 (): 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 (/*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 (): 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 (/*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 (): 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 (): uninitialized_reassigned_variables.Outer.Inner + } +} +internal abstract enum class uninitialized_reassigned_variables.ProtocolState : jet.Any { + public final /*constructor*/ fun (): uninitialized_reassigned_variables.ProtocolState + internal abstract fun signal(): uninitialized_reassigned_variables.ProtocolState + internal final class object uninitialized_reassigned_variables.ProtocolState. { + internal final /*constructor*/ fun (): uninitialized_reassigned_variables.ProtocolState. + internal final val TALKING: uninitialized_reassigned_variables.ProtocolState..TALKING + internal final val WAITING: uninitialized_reassigned_variables.ProtocolState..WAITING + } +} +internal final class uninitialized_reassigned_variables.TestObjectExpression : jet.Any { + public final /*constructor*/ fun (): 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 +// diff --git a/compiler/testData/lazyResolve/diagnostics/declarationChecks/kt1193.txt b/compiler/testData/lazyResolve/diagnostics/declarationChecks/kt1193.txt new file mode 100644 index 00000000000..d17ac7a0a7d --- /dev/null +++ b/compiler/testData/lazyResolve/diagnostics/declarationChecks/kt1193.txt @@ -0,0 +1,24 @@ +namespace + +// +namespace kt1193 + +internal final enum class kt1193.MyChildEnum : kt1193.MyEnum { + public final /*constructor*/ fun (/*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. { + internal final /*constructor*/ fun (): kt1193.MyChildEnum. + internal final val C: kt1193.MyChildEnum..C + } +} +internal open enum class kt1193.MyEnum : jet.Any { + public final /*constructor*/ fun (/*0*/ i: jet.Int): kt1193.MyEnum + internal final val i: jet.Int + internal final class object kt1193.MyEnum. { + internal final /*constructor*/ fun (): kt1193.MyEnum. + internal final val A: kt1193.MyEnum..A + internal final val B: kt1193.MyEnum..B + } +} +// diff --git a/compiler/testData/lazyResolve/diagnostics/regressions/Jet183-1.txt b/compiler/testData/lazyResolve/diagnostics/regressions/Jet183-1.txt new file mode 100644 index 00000000000..9ed2f2ddb87 --- /dev/null +++ b/compiler/testData/lazyResolve/diagnostics/regressions/Jet183-1.txt @@ -0,0 +1,12 @@ +namespace + +internal abstract enum class ProtocolState : jet.Any { + public final /*constructor*/ fun (): ProtocolState + internal abstract fun signal(): ProtocolState + internal final class object ProtocolState. { + internal final /*constructor*/ fun (): ProtocolState. + internal final val TALKING: ProtocolState..TALKING + internal final val WAITING: ProtocolState..WAITING + } +} +internal final fun box(): jet.String