From f8edaad4201ae49945f27e1126efa536fe949fcd Mon Sep 17 00:00:00 2001 From: Svetlana Isakova Date: Wed, 22 Aug 2012 20:24:06 +0400 Subject: [PATCH] make modality 'FINAL' for non-class members not depend on actual modifier since it's not legal there --- .../jetbrains/jet/lang/resolve/DescriptorResolver.java | 9 ++++++--- .../jetbrains/jet/lang/resolve/ModifiersChecker.java | 6 +----- compiler/testData/diagnostics/tests/Abstract.kt | 8 ++++---- .../declarationChecks/packageDeclarationModifiers.kt | 2 +- .../propertyInPackageHasNoInheritVisibility.kt | 7 +++++++ .../jet/checkers/JetDiagnosticsTestGenerated.java | 5 +++++ idea/testData/checker/Abstract.jet | 10 +++++----- 7 files changed, 29 insertions(+), 18 deletions(-) create mode 100644 compiler/testData/diagnostics/tests/declarationChecks/propertyInPackageHasNoInheritVisibility.kt diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorResolver.java index 8763c34e28f..db2278350d2 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorResolver.java @@ -758,12 +758,15 @@ public class DescriptorResolver { boolean isVar = property.isVar(); boolean hasBody = hasBody(property); - Modality defaultModality = getDefaultModality(containingDeclaration, hasBody); + Modality modality = containingDeclaration instanceof ClassDescriptor + ? ModifiersChecker.resolveModalityFromModifiers(property, getDefaultModality(containingDeclaration, hasBody)) + : Modality.FINAL; + Visibility visibility = ModifiersChecker.resolveVisibilityFromModifiers(property, getDefaultVisibility(property, containingDeclaration)); PropertyDescriptor propertyDescriptor = new PropertyDescriptor( containingDeclaration, annotationResolver.resolveAnnotations(scope, modifierList, trace), - ModifiersChecker.resolveModalityFromModifiers(property, defaultModality), - ModifiersChecker.resolveVisibilityFromModifiers(property), + modality, + visibility, isVar, JetPsiUtil.safeName(property.getName()), CallableMemberDescriptor.Kind.DECLARATION diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/ModifiersChecker.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/ModifiersChecker.java index f1bbb9d0f99..8428536d29b 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/ModifiersChecker.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/ModifiersChecker.java @@ -179,11 +179,7 @@ public class ModifiersChecker { @NotNull public static Visibility resolveVisibilityFromModifiers(@NotNull JetModifierListOwner modifierListOwner) { - JetModifierList modifierList = modifierListOwner.getModifierList(); - Visibility defaultVisibility = modifierList != null && modifierList.hasModifier(OVERRIDE_KEYWORD) - ? Visibilities.INHERITED - : Visibilities.INTERNAL; - return resolveVisibilityFromModifiers(modifierListOwner, defaultVisibility); + return resolveVisibilityFromModifiers(modifierListOwner, Visibilities.INTERNAL); } @NotNull diff --git a/compiler/testData/diagnostics/tests/Abstract.kt b/compiler/testData/diagnostics/tests/Abstract.kt index 4a25ee0088e..053733611b7 100644 --- a/compiler/testData/diagnostics/tests/Abstract.kt +++ b/compiler/testData/diagnostics/tests/Abstract.kt @@ -3,23 +3,23 @@ package MyNamespace //properties val a: Int val a1: Int = 1 - abstract val a2: Int + abstract val a2: Int abstract val a3: Int = 1 var b: Int private set var b1: Int = 0; private set - abstract var b2: Int private set + abstract var b2: Int private set abstract var b3: Int = 0; private set var c: Int set(v: Int) { $c = v } var c1: Int = 0; set(v: Int) { $c1 = v } - abstract var c2: Int set(v: Int) { $c2 = v } + abstract var c2: Int set(v: Int) { $c2 = v } abstract var c3: Int = 0; set(v: Int) { $c3 = v } val e: Int get() = a val e1: Int = 0; get() = a abstract val e2: Int get() = a - abstract val e3: Int = 0; get() = a + abstract val e3: Int = 0; get() = a //methods fun f() diff --git a/compiler/testData/diagnostics/tests/declarationChecks/packageDeclarationModifiers.kt b/compiler/testData/diagnostics/tests/declarationChecks/packageDeclarationModifiers.kt index d14b50f33e4..77cfcadb8b5 100644 --- a/compiler/testData/diagnostics/tests/declarationChecks/packageDeclarationModifiers.kt +++ b/compiler/testData/diagnostics/tests/declarationChecks/packageDeclarationModifiers.kt @@ -1,6 +1,6 @@ package d -abstract val a : Int +abstract val a : Int = 1 override val c : Int = 1 diff --git a/compiler/testData/diagnostics/tests/declarationChecks/propertyInPackageHasNoInheritVisibility.kt b/compiler/testData/diagnostics/tests/declarationChecks/propertyInPackageHasNoInheritVisibility.kt new file mode 100644 index 00000000000..442c90edb71 --- /dev/null +++ b/compiler/testData/diagnostics/tests/declarationChecks/propertyInPackageHasNoInheritVisibility.kt @@ -0,0 +1,7 @@ +package d + +override val f : ()-> Int = { 12 } + +fun test() { + f() +} \ No newline at end of file diff --git a/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java b/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java index b694569404e..d7f2a905697 100644 --- a/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java +++ b/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java @@ -1123,6 +1123,11 @@ public class JetDiagnosticsTestGenerated extends AbstractDiagnosticsTestWithEage doTest("compiler/testData/diagnostics/tests/declarationChecks/packageDeclarationModifiers.kt"); } + @TestMetadata("propertyInPackageHasNoInheritVisibility.kt") + public void testPropertyInPackageHasNoInheritVisibility() throws Exception { + doTest("compiler/testData/diagnostics/tests/declarationChecks/propertyInPackageHasNoInheritVisibility.kt"); + } + @TestMetadata("RedeclarationsInMultiDecl.kt") public void testRedeclarationsInMultiDecl() throws Exception { doTest("compiler/testData/diagnostics/tests/declarationChecks/RedeclarationsInMultiDecl.kt"); diff --git a/idea/testData/checker/Abstract.jet b/idea/testData/checker/Abstract.jet index 22c81201d83..0bd15ad48b3 100644 --- a/idea/testData/checker/Abstract.jet +++ b/idea/testData/checker/Abstract.jet @@ -122,23 +122,23 @@ abstract enum class MyAbstractEnum() {} //properties val a: Int val a1: Int = 1 - abstract val a2: Int + abstract val a2: Int abstract val a3: Int = 1 var b: Int private set var b1: Int = 0; private set - abstract var b2: Int private set + abstract var b2: Int private set abstract var b3: Int = 0; private set var c: Int set(v: Int) { $c = v } var c1: Int = 0; set(v: Int) { $c1 = v } - abstract var c2: Int set(v: Int) { $c2 = v } + abstract var c2: Int set(v: Int) { $c2 = v } abstract var c3: Int = 0; set(v: Int) { $c3 = v } val e: Int get() = a val e1: Int = 0; get() = a abstract val e2: Int get() = a - abstract val e3: Int = 0; get() = a + abstract val e3: Int = 0; get() = a //methods fun f() @@ -160,6 +160,6 @@ abstract class B3(i: Int) { } fun foo(a: B3) { - val a = B3(1) + val a = B3(1) val b = B1(2, "s") } \ No newline at end of file