Added tests for checking default modality modifiers

This commit is contained in:
svtk
2011-09-24 21:35:39 +04:00
parent 9b55aafe55
commit 7281d32229
3 changed files with 453 additions and 12 deletions
@@ -437,7 +437,7 @@ public class ClassDescriptorResolver {
PropertyDescriptor propertyDescriptor = new PropertyDescriptor(
containingDeclaration,
annotationResolver.createAnnotationStubs(modifierList),
resolveModalityFromModifiers(trace, objectDeclaration.getModifierList()), // TODO : default modifiers differ in different contexts
Modality.FINAL,
resolveVisibilityFromModifiers(trace, objectDeclaration.getModifierList()),
false,
null,
@@ -548,11 +548,6 @@ public class ClassDescriptorResolver {
}
}
@NotNull
/*package*/ static Modality resolveModalityFromModifiers(@NotNull BindingTrace trace, @Nullable JetModifierList modifierList) {
return resolveModalityFromModifiers(trace, modifierList, Modality.FINAL);
}
@NotNull
/*package*/ static Modality resolveModalityFromModifiers(@NotNull BindingTrace trace, @Nullable JetModifierList modifierList, @NotNull Modality defaultModality) {
if (modifierList == null) return defaultModality;
@@ -565,7 +560,7 @@ public class ClassDescriptorResolver {
if (hasAbstractModifier || hasOverrideModifier) {
trace.report(Errors.REDUNDANT_MODIFIER.on(modifierList, JetTokens.OPEN_KEYWORD, hasAbstractModifier ? JetTokens.ABSTRACT_KEYWORD : JetTokens.OVERRIDE_KEYWORD));
}
if (hasAbstractModifier) {
if (hasAbstractModifier || defaultModality == Modality.ABSTRACT) {
return Modality.ABSTRACT;
}
return Modality.OPEN;
@@ -573,10 +568,11 @@ public class ClassDescriptorResolver {
if (hasAbstractModifier) {
return Modality.ABSTRACT;
}
if (hasOverrideModifier) {
boolean hasFinalModifier = modifierList.hasModifier(JetTokens.FINAL_KEYWORD);
if (hasOverrideModifier && !hasFinalModifier && !(defaultModality == Modality.ABSTRACT)) {
return Modality.OPEN;
}
if (modifierList.hasModifier(JetTokens.FINAL_KEYWORD)) {
if (hasFinalModifier) {
return Modality.FINAL;
}
return defaultModality;
@@ -634,7 +630,7 @@ public class ClassDescriptorResolver {
JetParameter parameter = setter.getParameter();
setterDescriptor = new PropertySetterDescriptor(
resolveModalityFromModifiers(trace, setter.getModifierList()), // TODO : default modifiers differ in different contexts
resolveModalityFromModifiers(trace, setter.getModifierList(), propertyDescriptor.getModality()),
resolveVisibilityFromModifiers(trace, setter.getModifierList(), propertyDescriptor.getVisibility()),
propertyDescriptor, annotations, setter.getBodyExpression() != null, false);
if (parameter != null) {
@@ -709,7 +705,7 @@ public class ClassDescriptorResolver {
}
getterDescriptor = new PropertyGetterDescriptor(
resolveModalityFromModifiers(trace, getter.getModifierList()), // TODO : default modifiers differ in different contexts
resolveModalityFromModifiers(trace, getter.getModifierList(), propertyDescriptor.getModality()),
resolveVisibilityFromModifiers(trace, getter.getModifierList(), propertyDescriptor.getVisibility()),
propertyDescriptor, annotations, returnType, getter.getBodyExpression() != null, false);
trace.record(BindingContext.PROPERTY_ACCESSOR, getter, getterDescriptor);
@@ -785,7 +781,7 @@ public class ClassDescriptorResolver {
PropertyDescriptor propertyDescriptor = new PropertyDescriptor(
classDescriptor,
annotationResolver.resolveAnnotations(scope, modifierList),
resolveModalityFromModifiers(trace, parameter.getModifierList()),
resolveModalityFromModifiers(trace, parameter.getModifierList(), Modality.FINAL),
resolveVisibilityFromModifiers(trace, parameter.getModifierList()),
isMutable,
null,
@@ -2,6 +2,7 @@ package org.jetbrains.jet;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.lang.diagnostics.Diagnostic;
import org.jetbrains.jet.lang.diagnostics.Severity;
import org.jetbrains.jet.lang.diagnostics.UnresolvedReferenceDiagnostic;
import org.jetbrains.jet.lang.resolve.BindingContext;
import org.jetbrains.jet.lang.resolve.BindingTrace;
@@ -55,4 +56,41 @@ public class JetTestUtils {
}
}
};
public static BindingTrace DUMMY_EXCEPTION_ON_ERROR_TRACE = new BindingTrace() {
@Override
public BindingContext getBindingContext() {
return new BindingContext() {
@Override
public Collection<Diagnostic> getDiagnostics() {
throw new UnsupportedOperationException();
}
@Override
public <K, V> V get(ReadOnlySlice<K, V> slice, K key) {
return DUMMY_EXCEPTION_ON_ERROR_TRACE.get(slice, key);
}
};
}
@Override
public <K, V> void record(WritableSlice<K, V> slice, K key, V value) {
}
@Override
public <K> void record(WritableSlice<K, Boolean> slice, K key) {
}
@Override
public <K, V> V get(ReadOnlySlice<K, V> slice, K key) {
return null;
}
@Override
public void report(@NotNull Diagnostic diagnostic) {
if (diagnostic.getSeverity() == Severity.ERROR) {
throw new IllegalStateException(diagnostic.getMessage());
}
}
};
}
@@ -0,0 +1,407 @@
package org.jetbrains.jet.types;
import com.intellij.codeInsight.daemon.LightDaemonAnalyzerTestCase;
import org.jetbrains.jet.JetTestUtils;
import org.jetbrains.jet.lang.JetSemanticServices;
import org.jetbrains.jet.lang.descriptors.*;
import org.jetbrains.jet.lang.psi.*;
import org.jetbrains.jet.lang.resolve.BindingContext;
import org.jetbrains.jet.lang.resolve.ClassDescriptorResolver;
import org.jetbrains.jet.lang.resolve.scopes.JetScope;
import org.jetbrains.jet.lang.resolve.scopes.RedeclarationHandler;
import org.jetbrains.jet.lang.resolve.scopes.WritableScopeImpl;
import org.jetbrains.jet.lang.types.JetStandardLibrary;
import org.jetbrains.jet.plugin.AnalyzerFacade;
import java.util.List;
/**
* @author svtk
*/
public class JetDefaultModalityModifiersTest extends LightDaemonAnalyzerTestCase {
private JetDefaultModalityModifiersTestCase tc = new JetDefaultModalityModifiersTestCase();
@Override
public void setUp() throws Exception {
super.setUp();
tc.setUp();
}
public static class JetDefaultModalityModifiersTestCase {
private ModuleDescriptor root = new ModuleDescriptor("test_root");
private ClassDescriptorResolver classDescriptorResolver;
private JetScope scope;
public void setUp() throws Exception {
JetStandardLibrary library = JetStandardLibrary.getJetStandardLibrary(getProject());
JetSemanticServices semanticServices = JetSemanticServices.createSemanticServices(library);
classDescriptorResolver = semanticServices.getClassDescriptorResolver(JetTestUtils.DUMMY_EXCEPTION_ON_ERROR_TRACE);
scope = createScope(library.getLibraryScope());
}
private JetScope createScope(JetScope libraryScope) {
JetFile file = JetPsiFactory.createFile(getProject(), "abstract class C { abstract fun foo(); abstract val a: Int }");
List<JetDeclaration> declarations = file.getRootNamespace().getDeclarations();
JetDeclaration aClass = declarations.get(0);
assert aClass instanceof JetClass;
BindingContext bindingContext = AnalyzerFacade.analyzeFileWithCache(file);
DeclarationDescriptor classDescriptor = bindingContext.get(BindingContext.DECLARATION_TO_DESCRIPTOR, aClass);
WritableScopeImpl scope = new WritableScopeImpl(libraryScope, root, RedeclarationHandler.DO_NOTHING);
assert classDescriptor instanceof ClassifierDescriptor;
scope.addClassifierDescriptor((ClassifierDescriptor) classDescriptor);
return scope;
}
private MutableClassDescriptor createClassDescriptor(ClassKind kind, JetClass aClass) {
MutableClassDescriptor classDescriptor = new MutableClassDescriptor(JetTestUtils.DUMMY_TRACE, root, scope, kind);
classDescriptorResolver.resolveMutableClassDescriptor(aClass, classDescriptor);
return classDescriptor;
}
private void testClassModality(String classDeclaration, ClassKind kind, Modality expectedModality) {
JetClass aClass = JetPsiFactory.createClass(getProject(), classDeclaration);
MutableClassDescriptor classDescriptor = createClassDescriptor(kind, aClass);
assertEquals(expectedModality, classDescriptor.getModality());
}
private void testFunctionModality(String classWithFunction, ClassKind kind, Modality expectedFunctionModality) {
JetClass aClass = JetPsiFactory.createClass(getProject(), classWithFunction);
MutableClassDescriptor classDescriptor = createClassDescriptor(kind, aClass);
List<JetDeclaration> declarations = aClass.getDeclarations();
JetNamedFunction function = (JetNamedFunction) declarations.get(0);
FunctionDescriptorImpl functionDescriptor = classDescriptorResolver.resolveFunctionDescriptor(classDescriptor, scope, function);
assertEquals(expectedFunctionModality, functionDescriptor.getModality());
}
private void testPropertyModality(String classWithProperty, ClassKind kind, Modality expectedPropertyModality) {
JetClass aClass = JetPsiFactory.createClass(getProject(), classWithProperty);
MutableClassDescriptor classDescriptor = createClassDescriptor(kind, aClass);
List<JetDeclaration> declarations = aClass.getDeclarations();
JetProperty property = (JetProperty) declarations.get(0);
PropertyDescriptor propertyDescriptor = classDescriptorResolver.resolvePropertyDescriptor(classDescriptor, scope, property);
assertEquals(expectedPropertyModality, propertyDescriptor.getModality());
}
private void testPropertyAccessorModality(String classWithPropertyWithAccessor, ClassKind kind, Modality expectedPropertyAccessorModality, boolean isGetter) {
JetClass aClass = JetPsiFactory.createClass(getProject(), classWithPropertyWithAccessor);
MutableClassDescriptor classDescriptor = createClassDescriptor(kind, aClass);
List<JetDeclaration> declarations = aClass.getDeclarations();
JetProperty property = (JetProperty) declarations.get(0);
PropertyDescriptor propertyDescriptor = classDescriptorResolver.resolvePropertyDescriptor(classDescriptor, scope, property);
PropertyAccessorDescriptor propertyAccessor = isGetter
? propertyDescriptor.getGetter()
: propertyDescriptor.getSetter();
assert propertyAccessor != null;
assertEquals(expectedPropertyAccessorModality, propertyAccessor.getModality());
}
public void testClassModality(String classDeclaration, Modality expectedModality) {
testClassModality(classDeclaration, ClassKind.CLASS, expectedModality);
}
public void testTraitModality(String classDeclaration, Modality expectedModality) {
testClassModality(classDeclaration, ClassKind.TRAIT, expectedModality);
}
public void testEnumModality(String classDeclaration, Modality expectedModality) {
testClassModality(classDeclaration, ClassKind.ENUM_CLASS, expectedModality);
}
public void testFunctionModalityInClass(String classWithFunction, Modality expectedModality) {
testFunctionModality(classWithFunction, ClassKind.CLASS, expectedModality);
}
public void testFunctionModalityInEnum(String classWithFunction, Modality expectedModality) {
testFunctionModality(classWithFunction, ClassKind.ENUM_CLASS, expectedModality);
}
public void testFunctionModalityInTrait(String classWithFunction, Modality expectedModality) {
testFunctionModality(classWithFunction, ClassKind.TRAIT, expectedModality);
}
public void testPropertyModalityInClass(String classWithProperty, Modality expectedModality) {
testPropertyModality(classWithProperty, ClassKind.CLASS, expectedModality);
}
public void testPropertyModalityInEnum(String classWithProperty, Modality expectedModality) {
testPropertyModality(classWithProperty, ClassKind.ENUM_CLASS, expectedModality);
}
public void testPropertyModalityInTrait(String classWithProperty, Modality expectedModality) {
testPropertyModality(classWithProperty, ClassKind.TRAIT, expectedModality);
}
public void testPropertyAccessorModalityInClass(String classWithPropertyWithAccessor, Modality expectedModality) {
testPropertyAccessorModality(classWithPropertyWithAccessor, ClassKind.CLASS, expectedModality, true);
}
public void testPropertyAccessorModalityInTrait(String classWithPropertyWithAccessor, Modality expectedModality) {
testPropertyAccessorModality(classWithPropertyWithAccessor, ClassKind.TRAIT, expectedModality, true);
}
public void testPropertyAccessorModalityInClass(String classWithPropertyWithAccessor, Modality expectedModality, boolean isGetter) {
testPropertyAccessorModality(classWithPropertyWithAccessor, ClassKind.CLASS, expectedModality, isGetter);
}
public void testPropertyAccessorModalityInTrait(String classWithPropertyWithAccessor, Modality expectedModality, boolean isGetter) {
testPropertyAccessorModality(classWithPropertyWithAccessor, ClassKind.TRAIT, expectedModality, isGetter);
}
}
public void testClassModality() {
tc.testClassModality("class A {}", Modality.FINAL);
tc.testClassModality("open class A {}", Modality.OPEN);
tc.testClassModality("abstract class A {}", Modality.ABSTRACT);
tc.testClassModality("final class A {}", Modality.FINAL);
tc.testClassModality("open abstract class A {}", Modality.ABSTRACT);
tc.testEnumModality("enum class A {}", Modality.FINAL);
tc.testEnumModality("open enum class A {}", Modality.OPEN);
tc.testEnumModality("abstract enum class A {}", Modality.ABSTRACT);
tc.testEnumModality("final enum class A {}", Modality.FINAL);
tc.testTraitModality("trait A {}", Modality.ABSTRACT);
tc.testTraitModality("open trait A {}", Modality.ABSTRACT);
tc.testTraitModality("abstract trait A {}", Modality.ABSTRACT);
}
public void testFunctionModality() {
tc.testFunctionModalityInClass("class A { fun foo() {} }", Modality.FINAL);
tc.testFunctionModalityInClass("class A { open fun foo() {} }", Modality.OPEN);
tc.testFunctionModalityInClass("class A { final fun foo() {} }", Modality.FINAL);
tc.testFunctionModalityInClass("open class A { fun foo() {} }", Modality.FINAL);
tc.testFunctionModalityInClass("open class A { open fun foo() {} }", Modality.OPEN);
tc.testFunctionModalityInClass("open class A { final fun foo() {} }", Modality.FINAL);
tc.testFunctionModalityInClass("abstract class A { open fun foo() }", Modality.OPEN);
tc.testFunctionModalityInClass("abstract class A { abstract fun foo() }", Modality.ABSTRACT);
tc.testFunctionModalityInEnum("enum class A { fun foo() {} }", Modality.FINAL);
tc.testFunctionModalityInEnum("enum class A { final fun foo() {} }", Modality.FINAL);
tc.testFunctionModalityInEnum("open enum class A { open fun foo() {} }", Modality.OPEN);
tc.testFunctionModalityInEnum("abstract enum class A { open fun foo() }", Modality.OPEN);
tc.testFunctionModalityInEnum("abstract enum class A { abstract fun foo() }", Modality.ABSTRACT);
tc.testFunctionModalityInTrait("trait A { fun foo() }", Modality.ABSTRACT);
tc.testFunctionModalityInTrait("trait A { abstract fun foo() }", Modality.ABSTRACT);
tc.testFunctionModalityInTrait("trait A { fun foo() {} }", Modality.OPEN);
tc.testFunctionModalityInTrait("trait A { open fun foo() {} }", Modality.OPEN);
tc.testFunctionModalityInTrait("trait A { final fun foo() {} }", Modality.FINAL);
}
public void testFunctionModalityWithOverride() {
tc.testFunctionModalityInClass("class A : C { override fun foo() {} }", Modality.OPEN);
tc.testFunctionModalityInClass("class A : C { open override fun foo() {} }", Modality.OPEN);
tc.testFunctionModalityInClass("class A : C { final override fun foo() {} }", Modality.FINAL);
tc.testFunctionModalityInClass("open class A : C { override fun foo() {} }", Modality.OPEN);
tc.testFunctionModalityInClass("open class A : C { open override fun foo() {} }", Modality.OPEN);
tc.testFunctionModalityInClass("open class A : C { final override fun foo() {} }", Modality.FINAL);
tc.testFunctionModalityInClass("abstract class A : C { open override fun foo() }", Modality.OPEN);
tc.testFunctionModalityInClass("abstract class A : C { abstract override fun foo() }", Modality.ABSTRACT);
tc.testFunctionModalityInEnum("enum class A : C { override fun foo() {} }", Modality.OPEN);
tc.testFunctionModalityInEnum("enum class A : C { final override fun foo() {} }", Modality.FINAL);
tc.testFunctionModalityInEnum("open enum class A : C { open override fun foo() {} }", Modality.OPEN);
tc.testFunctionModalityInEnum("abstract enum class A : C { open override fun foo() }", Modality.OPEN);
tc.testFunctionModalityInEnum("abstract enum class A : C { abstract override fun foo() }", Modality.ABSTRACT);
tc.testFunctionModalityInTrait("trait A : C { override fun foo() }", Modality.ABSTRACT);
tc.testFunctionModalityInTrait("trait A : C { abstract override fun foo() }", Modality.ABSTRACT);
tc.testFunctionModalityInTrait("trait A : C { override fun foo() {} }", Modality.OPEN);
tc.testFunctionModalityInTrait("trait A : C { open override fun foo() {} }", Modality.OPEN);
tc.testFunctionModalityInTrait("trait A : C { final override fun foo() {} }", Modality.FINAL);
}
public void testPropertyModality() {
tc.testPropertyModalityInClass("class A { val a: Int = 0 }", Modality.FINAL);
tc.testPropertyModalityInClass("class A { final val a: Int = 0 }", Modality.FINAL);
tc.testPropertyModalityInClass("open class A { val a: Int = 0 }", Modality.FINAL);
tc.testPropertyModalityInClass("open class A { final val a: Int = 0 }", Modality.FINAL);
tc.testPropertyModalityInClass("open class A { open val a: Int = 0 }", Modality.OPEN);
tc.testPropertyModalityInClass("abstract class A { val a: Int = 0 }", Modality.FINAL);
tc.testPropertyModalityInClass("abstract class A { open val a: Int = 0 }", Modality.OPEN);
tc.testPropertyModalityInClass("abstract class A { abstract val a: Int }", Modality.ABSTRACT);
tc.testPropertyModalityInEnum("enum class A { val a: Int = 0 }", Modality.FINAL);
tc.testPropertyModalityInEnum("enum class A { final val a: Int = 0 }", Modality.FINAL);
tc.testPropertyModalityInEnum("open enum class A { val a: Int = 0 }", Modality.FINAL);
tc.testPropertyModalityInEnum("open enum class A { final val a: Int = 0 }", Modality.FINAL);
tc.testPropertyModalityInEnum("open enum class A { open val a: Int = 0 }", Modality.OPEN);
tc.testPropertyModalityInEnum("abstract enum class A { open val a: Int = 0 }", Modality.OPEN);
tc.testPropertyModalityInEnum("abstract enum class A { abstract val a: Int }", Modality.ABSTRACT);
tc.testPropertyModalityInTrait("trait A { val a: Int }", Modality.ABSTRACT);
tc.testPropertyModalityInTrait("trait A { open val a: Int }", Modality.ABSTRACT);
tc.testPropertyModalityInTrait("trait A { abstract val a: Int }", Modality.ABSTRACT);
tc.testPropertyModalityInTrait("trait A { open abstract val a: Int }", Modality.ABSTRACT);
tc.testPropertyModalityInTrait("trait A { val a: Int get() = 10 }", Modality.OPEN);
tc.testPropertyModalityInTrait("trait A { var a: Int get() = 1; set(v: Int) {} }", Modality.OPEN);
tc.testPropertyModalityInTrait("trait A { val a: Int open get }", Modality.ABSTRACT);
tc.testPropertyModalityInTrait("trait A { var a: Int open get open set}", Modality.ABSTRACT);
tc.testPropertyModalityInTrait("trait A { open val a: Int get }", Modality.ABSTRACT);
tc.testPropertyModalityInTrait("trait A { open val a: Int get() = 1 }", Modality.OPEN);
tc.testPropertyModalityInTrait("trait A { open val a: Int final get() = 1 }", Modality.OPEN);
}
public void testPropertyModalityWithOverride() {
tc.testPropertyModalityInClass("class A : C { override val a: Int = 0 }", Modality.OPEN);
tc.testPropertyModalityInClass("class A : C { final override val a: Int = 0 }", Modality.FINAL);
tc.testPropertyModalityInClass("open class A : C { override val a: Int = 0 }", Modality.OPEN);
tc.testPropertyModalityInClass("open class A : C { final override val a: Int = 0 }", Modality.FINAL);
tc.testPropertyModalityInClass("open class A : C { open override val a: Int = 0 }", Modality.OPEN);
tc.testPropertyModalityInClass("abstract class A : C { override val a: Int = 0 }", Modality.OPEN);
tc.testPropertyModalityInClass("abstract class A : C { open override val a: Int = 0 }", Modality.OPEN);
tc.testPropertyModalityInClass("abstract class A : C { abstract override val a: Int }", Modality.ABSTRACT);
tc.testPropertyModalityInEnum("enum class A : C { override val a: Int = 0 }", Modality.OPEN);
tc.testPropertyModalityInEnum("enum class A : C { final override val a: Int = 0 }", Modality.FINAL);
tc.testPropertyModalityInEnum("open enum class A : C { override val a: Int = 0 }", Modality.OPEN);
tc.testPropertyModalityInEnum("open enum class A : C { final override val a: Int = 0 }", Modality.FINAL);
tc.testPropertyModalityInEnum("open enum class A : C { open override val a: Int = 0 }", Modality.OPEN);
tc.testPropertyModalityInEnum("abstract enum class A : C { open override val a: Int = 0 }", Modality.OPEN);
tc.testPropertyModalityInEnum("abstract enum class A : C { abstract override val a: Int }", Modality.ABSTRACT);
tc.testPropertyModalityInTrait("trait A : C { override val a: Int }", Modality.ABSTRACT);
tc.testPropertyModalityInTrait("trait A : C { open override val a: Int }", Modality.ABSTRACT);
tc.testPropertyModalityInTrait("trait A : C { abstract override val a: Int }", Modality.ABSTRACT);
tc.testPropertyModalityInTrait("trait A : C { open abstract override val a: Int }", Modality.ABSTRACT);
tc.testPropertyModalityInTrait("trait A : C { override val a: Int get() = 10 }", Modality.OPEN);
tc.testPropertyModalityInTrait("trait A : C { override var a: Int get() = 1; set(v: Int) {} }", Modality.OPEN);
tc.testPropertyModalityInTrait("trait A : C { override val a: Int open get }", Modality.ABSTRACT);
tc.testPropertyModalityInTrait("trait A : C { override var a: Int open get open set }", Modality.ABSTRACT);
tc.testPropertyModalityInTrait("trait A : C { open override val a: Int get }", Modality.ABSTRACT);
tc.testPropertyModalityInTrait("trait A : C { open override val a: Int get() = 1 }", Modality.OPEN);
tc.testPropertyModalityInTrait("trait A : C { open override val a: Int final get() = 1 }", Modality.OPEN);
}
public void testPropertyAccessorModality() {
tc.testPropertyAccessorModalityInClass("class A { val a: Int = 0 }", Modality.FINAL);
tc.testPropertyAccessorModalityInClass("class A { val a: Int = 0; get }", Modality.FINAL);
tc.testPropertyAccessorModalityInClass("class A { val a: Int = 0; final get }", Modality.FINAL);
tc.testPropertyAccessorModalityInClass("class A { final val a: Int = 0 }", Modality.FINAL);
tc.testPropertyAccessorModalityInClass("class A { final val a: Int = 0; get }", Modality.FINAL);
tc.testPropertyAccessorModalityInClass("class A { final val a: Int = 0; final get }", Modality.FINAL);
tc.testPropertyAccessorModalityInClass("open class A { val a: Int = 0 }", Modality.FINAL);
tc.testPropertyAccessorModalityInClass("open class A { val a: Int = 0; get }", Modality.FINAL);
tc.testPropertyAccessorModalityInClass("open class A { val a: Int = 0; final get }", Modality.FINAL);
tc.testPropertyAccessorModalityInClass("open class A { open val a: Int = 0 }", Modality.OPEN);
tc.testPropertyAccessorModalityInClass("open class A { open val a: Int = 0; get }", Modality.OPEN);
tc.testPropertyAccessorModalityInClass("open class A { open val a: Int = 0; open get }", Modality.OPEN);
tc.testPropertyAccessorModalityInClass("open class A { open val a: Int = 0; final get }", Modality.FINAL);
tc.testPropertyAccessorModalityInClass("open class A { final val a: Int = 0 }", Modality.FINAL);
tc.testPropertyAccessorModalityInClass("open class A { final val a: Int = 0; get }", Modality.FINAL);
tc.testPropertyAccessorModalityInClass("open class A { final val a: Int = 0; final get }", Modality.FINAL);
tc.testPropertyAccessorModalityInClass("abstract class A { abstract val a: Int }", Modality.ABSTRACT);
tc.testPropertyAccessorModalityInClass("abstract class A { abstract val a: Int get }", Modality.ABSTRACT);
tc.testPropertyAccessorModalityInClass("abstract class A { abstract val a: Int open get }", Modality.ABSTRACT);
tc.testPropertyAccessorModalityInClass("abstract class A { abstract val a: Int abstract get }", Modality.ABSTRACT);
tc.testPropertyAccessorModalityInClass("abstract class A { val a: Int get() = 10 }", Modality.FINAL);
tc.testPropertyAccessorModalityInClass("abstract class A { val a: Int open get() = 10 }", Modality.OPEN);
tc.testPropertyAccessorModalityInClass("abstract class A { val a: Int final get() = 10 }", Modality.FINAL);
tc.testPropertyAccessorModalityInClass("abstract class A { open abstract val a: Int }", Modality.ABSTRACT);
tc.testPropertyAccessorModalityInClass("abstract class A { open abstract val a: Int get }", Modality.ABSTRACT);
tc.testPropertyAccessorModalityInClass("abstract class A { open abstract val a: Int open get }", Modality.ABSTRACT);
tc.testPropertyAccessorModalityInClass("abstract class A { open abstract val a: Int abstract get }", Modality.ABSTRACT);
tc.testPropertyAccessorModalityInClass("abstract class A { open val a: Int get() = 10 }", Modality.OPEN);
tc.testPropertyAccessorModalityInClass("abstract class A { open val a: Int open get() = 10 }", Modality.OPEN);
tc.testPropertyAccessorModalityInClass("abstract class A { open val a: Int final get() = 10 }", Modality.FINAL);
tc.testPropertyAccessorModalityInTrait("trait A { val a: Int }", Modality.ABSTRACT);
tc.testPropertyAccessorModalityInTrait("trait A { val a: Int get }", Modality.ABSTRACT);
tc.testPropertyAccessorModalityInTrait("trait A { val a: Int get() = 1 }", Modality.OPEN);
tc.testPropertyAccessorModalityInTrait("trait A { val a: Int abstract get }", Modality.ABSTRACT);
tc.testPropertyAccessorModalityInTrait("trait A { val a: Int open get }", Modality.ABSTRACT);
tc.testPropertyAccessorModalityInTrait("trait A { val a: Int open get() = 1 }", Modality.OPEN);
tc.testPropertyAccessorModalityInTrait("trait A { val a: Int final get }", Modality.FINAL);
tc.testPropertyAccessorModalityInTrait("trait A { val a: Int final get() = 1 }", Modality.FINAL);
tc.testPropertyAccessorModalityInTrait("abstract trait A { val a: Int }", Modality.ABSTRACT);
tc.testPropertyAccessorModalityInTrait("abstract trait A { val a: Int get }", Modality.ABSTRACT);
tc.testPropertyAccessorModalityInTrait("abstract trait A { val a: Int get() = 1 }", Modality.OPEN);
tc.testPropertyAccessorModalityInTrait("abstract trait A { val a: Int abstract get }", Modality.ABSTRACT);
tc.testPropertyAccessorModalityInTrait("abstract trait A { val a: Int open get }", Modality.ABSTRACT);
tc.testPropertyAccessorModalityInTrait("abstract trait A { val a: Int open get() = 1 }", Modality.OPEN);
tc.testPropertyAccessorModalityInTrait("abstract trait A { val a: Int final get }", Modality.FINAL);
tc.testPropertyAccessorModalityInTrait("abstract trait A { val a: Int final get() = 1 }", Modality.FINAL);
}
public void testPropertyAccessorModalityWithOverride() {
tc.testPropertyAccessorModalityInClass("class A : C { override val a: Int = 0 }", Modality.OPEN);
tc.testPropertyAccessorModalityInClass("class A : C { override val a: Int = 0; get }", Modality.OPEN);
tc.testPropertyAccessorModalityInClass("class A : C { override val a: Int = 0; final get }", Modality.FINAL);
tc.testPropertyAccessorModalityInClass("class A : C { final override val a: Int = 0 }", Modality.FINAL);
tc.testPropertyAccessorModalityInClass("class A : C { final override val a: Int = 0; get }", Modality.FINAL);
tc.testPropertyAccessorModalityInClass("class A : C { final override val a: Int = 0; final get }", Modality.FINAL);
tc.testPropertyAccessorModalityInClass("open class A : C { override val a: Int = 0 }", Modality.OPEN);
tc.testPropertyAccessorModalityInClass("open class A : C { override val a: Int = 0; get }", Modality.OPEN);
tc.testPropertyAccessorModalityInClass("open class A : C { override val a: Int = 0; open get }", Modality.OPEN);
tc.testPropertyAccessorModalityInClass("open class A : C { override val a: Int = 0; final get }", Modality.FINAL);
tc.testPropertyAccessorModalityInClass("open class A : C { open override val a: Int = 0 }", Modality.OPEN);
tc.testPropertyAccessorModalityInClass("open class A : C { open override val a: Int = 0; get }", Modality.OPEN);
tc.testPropertyAccessorModalityInClass("open class A : C { open override val a: Int = 0; open get }", Modality.OPEN);
tc.testPropertyAccessorModalityInClass("open class A : C { open override val a: Int = 0; final get }", Modality.FINAL);
tc.testPropertyAccessorModalityInClass("open class A : C { final override val a: Int = 0 }", Modality.FINAL);
tc.testPropertyAccessorModalityInClass("open class A : C { final override val a: Int = 0; get }", Modality.FINAL);
tc.testPropertyAccessorModalityInClass("open class A : C { final override val a: Int = 0; final get }", Modality.FINAL);
tc.testPropertyAccessorModalityInTrait("trait A : C { override val a: Int }", Modality.ABSTRACT);
tc.testPropertyAccessorModalityInTrait("trait A : C { override val a: Int = 0; get }", Modality.OPEN);
tc.testPropertyAccessorModalityInTrait("trait A : C { abstract override val a: Int }", Modality.ABSTRACT);
tc.testPropertyAccessorModalityInTrait("trait A : C { abstract override val a: Int get }", Modality.ABSTRACT);
tc.testPropertyAccessorModalityInClass("abstract class A { abstract override val a: Int }", Modality.ABSTRACT);
tc.testPropertyAccessorModalityInClass("abstract class A { abstract override val a: Int get }", Modality.ABSTRACT);
tc.testPropertyAccessorModalityInClass("abstract class A { abstract override val a: Int open get }", Modality.ABSTRACT);
tc.testPropertyAccessorModalityInClass("abstract class A { abstract override val a: Int abstract get }", Modality.ABSTRACT);
tc.testPropertyAccessorModalityInClass("abstract class A { override val a: Int get() = 10 }", Modality.OPEN);
tc.testPropertyAccessorModalityInClass("abstract class A { override val a: Int open get() = 10 }", Modality.OPEN);
tc.testPropertyAccessorModalityInClass("abstract class A { override val a: Int final get() = 10 }", Modality.FINAL);
tc.testPropertyAccessorModalityInClass("abstract class A { open abstract override val a: Int }", Modality.ABSTRACT);
tc.testPropertyAccessorModalityInClass("abstract class A { open abstract override val a: Int get }", Modality.ABSTRACT);
tc.testPropertyAccessorModalityInClass("abstract class A { open abstract override val a: Int open get }", Modality.ABSTRACT);
tc.testPropertyAccessorModalityInClass("abstract class A { open abstract override val a: Int abstract get }", Modality.ABSTRACT);
tc.testPropertyAccessorModalityInClass("abstract class A { open override val a: Int get() = 10 }", Modality.OPEN);
tc.testPropertyAccessorModalityInClass("abstract class A { open override val a: Int open get() = 10 }", Modality.OPEN);
tc.testPropertyAccessorModalityInClass("abstract class A { open override val a: Int final get() = 10 }", Modality.FINAL);
tc.testPropertyAccessorModalityInTrait("trait A { override val a: Int }", Modality.ABSTRACT);
tc.testPropertyAccessorModalityInTrait("trait A { override val a: Int get }", Modality.ABSTRACT);
tc.testPropertyAccessorModalityInTrait("trait A { override val a: Int get() = 1 }", Modality.OPEN);
tc.testPropertyAccessorModalityInTrait("trait A { override val a: Int abstract get }", Modality.ABSTRACT);
tc.testPropertyAccessorModalityInTrait("trait A { override val a: Int open get }", Modality.ABSTRACT);
tc.testPropertyAccessorModalityInTrait("trait A { override val a: Int open get() = 1 }", Modality.OPEN);
tc.testPropertyAccessorModalityInTrait("trait A { override val a: Int final get }", Modality.FINAL);
tc.testPropertyAccessorModalityInTrait("trait A { override val a: Int final get() = 1 }", Modality.FINAL);
tc.testPropertyAccessorModalityInTrait("abstract trait A { override val a: Int }", Modality.ABSTRACT);
tc.testPropertyAccessorModalityInTrait("abstract trait A { override val a: Int get }", Modality.ABSTRACT);
tc.testPropertyAccessorModalityInTrait("abstract trait A { override val a: Int get() = 1 }", Modality.OPEN);
tc.testPropertyAccessorModalityInTrait("abstract trait A { override val a: Int abstract get }", Modality.ABSTRACT);
tc.testPropertyAccessorModalityInTrait("abstract trait A { override val a: Int open get }", Modality.ABSTRACT);
tc.testPropertyAccessorModalityInTrait("abstract trait A { override val a: Int open get() = 1 }", Modality.OPEN);
tc.testPropertyAccessorModalityInTrait("abstract trait A { override val a: Int final get }", Modality.FINAL);
tc.testPropertyAccessorModalityInTrait("abstract trait A { override val a: Int final get() = 1 }", Modality.FINAL);
}
}