RAW FIR: record property accessors' own modality properly
This commit is contained in:
committed by
Dmitriy Novozhilov
parent
e009b71f88
commit
1090eca086
+3
-3
@@ -29,10 +29,10 @@ internal fun isInsideExternalClass(containingClass: FirRegularClass, context: Ch
|
||||
private inline fun isInsideSpecificClass(
|
||||
containingClass: FirRegularClass,
|
||||
context: CheckerContext,
|
||||
specificStatus: (FirRegularClass) -> Boolean
|
||||
predicate: (FirRegularClass) -> Boolean
|
||||
): Boolean =
|
||||
specificStatus.invoke(containingClass) ||
|
||||
context.containingDeclarations.asReversed().any { it is FirRegularClass && specificStatus.invoke(it) }
|
||||
predicate.invoke(containingClass) ||
|
||||
context.containingDeclarations.asReversed().any { it is FirRegularClass && predicate.invoke(it) }
|
||||
|
||||
internal fun FirMemberDeclaration.isEffectivelyExpect(
|
||||
containingClass: FirRegularClass?,
|
||||
|
||||
+1
-1
@@ -1151,7 +1151,7 @@ class DeclarationsConverter(
|
||||
}
|
||||
val status =
|
||||
// Downward propagation of `inline` and `external` modifiers (from property to its accessors)
|
||||
FirDeclarationStatusImpl(accessorVisibility, Modality.FINAL).apply {
|
||||
FirDeclarationStatusImpl(accessorVisibility, modifiers.getModality()).apply {
|
||||
isInline = propertyModifiers.hasInline() || modifiers.hasInline()
|
||||
isExternal = propertyModifiers.hasExternal() || modifiers.hasExternal()
|
||||
}
|
||||
|
||||
@@ -339,7 +339,7 @@ class RawFirBuilder(
|
||||
if (this?.visibility != null && this.visibility != Visibilities.Unknown) this.visibility else property.visibility
|
||||
// Downward propagation of `inline` and `external` modifiers (from property to its accessors)
|
||||
val status =
|
||||
FirDeclarationStatusImpl(accessorVisibility, Modality.FINAL).apply {
|
||||
FirDeclarationStatusImpl(accessorVisibility, this?.modality).apply {
|
||||
isInline = property.hasModifier(INLINE_KEYWORD) ||
|
||||
this@toFirPropertyAccessor?.hasModifier(INLINE_KEYWORD) == true
|
||||
isExternal = property.hasModifier(EXTERNAL_KEYWORD) ||
|
||||
|
||||
@@ -195,8 +195,8 @@ val FirProperty.hasBackingField: Boolean
|
||||
else -> {
|
||||
val getter = getter ?: return true
|
||||
if (isVar && setter == null) return true
|
||||
if (setter?.hasBody == false) return true
|
||||
if (!getter.hasBody) return true
|
||||
if (setter?.hasBody == false && setter?.isAbstract == false) return true
|
||||
if (!getter.hasBody && !getter.isAbstract) return true
|
||||
|
||||
return isReferredViaField == true
|
||||
}
|
||||
|
||||
+7
-7
@@ -28,19 +28,19 @@ package MyPackage
|
||||
abstract fun j() {}
|
||||
|
||||
//property accessors
|
||||
<!MUST_BE_INITIALIZED!>var i: Int<!> abstract get abstract set
|
||||
var i1: Int = 0; abstract get abstract set
|
||||
var i: Int abstract get abstract set
|
||||
var i1: Int = <!PROPERTY_INITIALIZER_NO_BACKING_FIELD!>0<!>; abstract get abstract set
|
||||
|
||||
<!MUST_BE_INITIALIZED!>var j: Int<!> get() = i; abstract set
|
||||
var j1: Int = 0; get() = i; abstract set
|
||||
var j: Int get() = i; abstract set
|
||||
var j1: Int = <!PROPERTY_INITIALIZER_NO_BACKING_FIELD!>0<!>; get() = i; abstract set
|
||||
|
||||
<!MUST_BE_INITIALIZED!>var k: Int<!> abstract set
|
||||
var k1: Int = 0; abstract set
|
||||
|
||||
<!MUST_BE_INITIALIZED!>var l: Int<!> abstract get abstract set
|
||||
var l1: Int = 0; abstract get abstract set
|
||||
var l: Int abstract get abstract set
|
||||
var l1: Int = <!PROPERTY_INITIALIZER_NO_BACKING_FIELD!>0<!>; abstract get abstract set
|
||||
|
||||
<!MUST_BE_INITIALIZED!>var n: Int<!> abstract get abstract set(v: Int) {}
|
||||
var n: Int abstract get abstract set(v: Int) {}
|
||||
|
||||
// FILE: c.kt
|
||||
//creating an instance
|
||||
|
||||
@@ -29,18 +29,17 @@ abstract class MyAbstractClass() {
|
||||
<!ABSTRACT_FUNCTION_WITH_BODY!>abstract<!> fun j() {}
|
||||
|
||||
//property accessors
|
||||
<!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>var i: Int<!> abstract get abstract set
|
||||
var i1: Int = 0; abstract get abstract set
|
||||
var i: Int abstract get abstract set
|
||||
var i1: Int = <!PROPERTY_INITIALIZER_NO_BACKING_FIELD!>0<!>; abstract get abstract set
|
||||
|
||||
<!MUST_BE_INITIALIZED!>var j: Int<!> get() = i; abstract set
|
||||
<!MUST_BE_INITIALIZED!>var j1: Int<!> get() = i; abstract set
|
||||
var j: Int get() = i; abstract set
|
||||
var j1: Int get() = i; abstract set
|
||||
|
||||
<!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>var k: Int<!> abstract set
|
||||
var k1: Int = 0; abstract set
|
||||
|
||||
<!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>var l: Int<!> abstract get abstract set
|
||||
var l1: Int = 0; abstract get abstract set
|
||||
var l: Int abstract get abstract set
|
||||
var l1: Int = <!PROPERTY_INITIALIZER_NO_BACKING_FIELD!>0<!>; abstract get abstract set
|
||||
|
||||
<!MUST_BE_INITIALIZED!>var n: Int<!> abstract get abstract set(v: Int) {}
|
||||
var n: Int abstract get abstract set(v: Int) {}
|
||||
}
|
||||
|
||||
|
||||
@@ -29,17 +29,17 @@ class MyClass() {
|
||||
<!ABSTRACT_FUNCTION_IN_NON_ABSTRACT_CLASS, ABSTRACT_FUNCTION_WITH_BODY!>abstract<!> fun j() {}
|
||||
|
||||
//property accessors
|
||||
<!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>var i: Int<!> abstract get abstract set
|
||||
var i1: Int = 0; abstract get abstract set
|
||||
var i: Int abstract get abstract set
|
||||
var i1: Int = <!PROPERTY_INITIALIZER_NO_BACKING_FIELD!>0<!>; abstract get abstract set
|
||||
|
||||
<!MUST_BE_INITIALIZED!>var j: Int<!> get() = i; abstract set
|
||||
var j1: Int = 0; get() = i; abstract set
|
||||
var j: Int get() = i; abstract set
|
||||
var j1: Int = <!PROPERTY_INITIALIZER_NO_BACKING_FIELD!>0<!>; get() = i; abstract set
|
||||
|
||||
<!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>var k: Int<!> abstract set
|
||||
var k1: Int = 0; abstract set
|
||||
|
||||
<!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>var l: Int<!> abstract get abstract set
|
||||
var l1: Int = 0; abstract get abstract set
|
||||
var l: Int abstract get abstract set
|
||||
var l1: Int = <!PROPERTY_INITIALIZER_NO_BACKING_FIELD!>0<!>; abstract get abstract set
|
||||
|
||||
<!MUST_BE_INITIALIZED!>var n: Int<!> abstract get abstract set(v: Int) {}
|
||||
var n: Int abstract get abstract set(v: Int) {}
|
||||
}
|
||||
@@ -32,8 +32,8 @@ interface MyTrait {
|
||||
var i: Int abstract get abstract set
|
||||
var i1: Int = <!PROPERTY_INITIALIZER_IN_INTERFACE!>0<!>; abstract get abstract set
|
||||
|
||||
<!BACKING_FIELD_IN_INTERFACE!>var j: Int<!> get() = i; abstract set
|
||||
<!BACKING_FIELD_IN_INTERFACE!>var j1: Int<!> = <!PROPERTY_INITIALIZER_IN_INTERFACE!>0<!>; get() = i; abstract set
|
||||
var j: Int get() = i; abstract set
|
||||
var j1: Int = <!PROPERTY_INITIALIZER_IN_INTERFACE!>0<!>; get() = i; abstract set
|
||||
|
||||
var k: Int abstract set
|
||||
var k1: Int = <!PROPERTY_INITIALIZER_IN_INTERFACE!>0<!>; abstract set
|
||||
@@ -41,5 +41,5 @@ interface MyTrait {
|
||||
var l: Int abstract get abstract set
|
||||
var l1: Int = <!PROPERTY_INITIALIZER_IN_INTERFACE!>0<!>; abstract get abstract set
|
||||
|
||||
<!BACKING_FIELD_IN_INTERFACE!>var n: Int<!> abstract get abstract set(v: Int) {}
|
||||
var n: Int abstract get abstract set(v: Int) {}
|
||||
}
|
||||
|
||||
@@ -31,17 +31,17 @@ enum class MyEnum() {
|
||||
<!ABSTRACT_FUNCTION_WITH_BODY!>abstract<!> fun j() {}
|
||||
|
||||
//property accessors
|
||||
<!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>var i: Int<!> abstract get abstract set
|
||||
var i1: Int = 0; abstract get abstract set
|
||||
var i: Int abstract get abstract set
|
||||
var i1: Int = <!PROPERTY_INITIALIZER_NO_BACKING_FIELD!>0<!>; abstract get abstract set
|
||||
|
||||
<!MUST_BE_INITIALIZED!>var j: Int<!> get() = i; abstract set
|
||||
var j1: Int = 0; get() = i; abstract set
|
||||
var j: Int get() = i; abstract set
|
||||
var j1: Int = <!PROPERTY_INITIALIZER_NO_BACKING_FIELD!>0<!>; get() = i; abstract set
|
||||
|
||||
<!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>var k: Int<!> abstract set
|
||||
var k1: Int = 0; abstract set
|
||||
|
||||
<!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>var l: Int<!> abstract get abstract set
|
||||
var l1: Int = 0; abstract get abstract set
|
||||
|
||||
<!MUST_BE_INITIALIZED!>var n: Int<!> abstract get abstract set(v: Int) {}
|
||||
var l: Int abstract get abstract set
|
||||
var l1: Int = <!PROPERTY_INITIALIZER_NO_BACKING_FIELD!>0<!>; abstract get abstract set
|
||||
|
||||
var n: Int abstract get abstract set(v: Int) {}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user