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(
|
private inline fun isInsideSpecificClass(
|
||||||
containingClass: FirRegularClass,
|
containingClass: FirRegularClass,
|
||||||
context: CheckerContext,
|
context: CheckerContext,
|
||||||
specificStatus: (FirRegularClass) -> Boolean
|
predicate: (FirRegularClass) -> Boolean
|
||||||
): Boolean =
|
): Boolean =
|
||||||
specificStatus.invoke(containingClass) ||
|
predicate.invoke(containingClass) ||
|
||||||
context.containingDeclarations.asReversed().any { it is FirRegularClass && specificStatus.invoke(it) }
|
context.containingDeclarations.asReversed().any { it is FirRegularClass && predicate.invoke(it) }
|
||||||
|
|
||||||
internal fun FirMemberDeclaration.isEffectivelyExpect(
|
internal fun FirMemberDeclaration.isEffectivelyExpect(
|
||||||
containingClass: FirRegularClass?,
|
containingClass: FirRegularClass?,
|
||||||
|
|||||||
+1
-1
@@ -1151,7 +1151,7 @@ class DeclarationsConverter(
|
|||||||
}
|
}
|
||||||
val status =
|
val status =
|
||||||
// Downward propagation of `inline` and `external` modifiers (from property to its accessors)
|
// 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()
|
isInline = propertyModifiers.hasInline() || modifiers.hasInline()
|
||||||
isExternal = propertyModifiers.hasExternal() || modifiers.hasExternal()
|
isExternal = propertyModifiers.hasExternal() || modifiers.hasExternal()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -339,7 +339,7 @@ class RawFirBuilder(
|
|||||||
if (this?.visibility != null && this.visibility != Visibilities.Unknown) this.visibility else property.visibility
|
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)
|
// Downward propagation of `inline` and `external` modifiers (from property to its accessors)
|
||||||
val status =
|
val status =
|
||||||
FirDeclarationStatusImpl(accessorVisibility, Modality.FINAL).apply {
|
FirDeclarationStatusImpl(accessorVisibility, this?.modality).apply {
|
||||||
isInline = property.hasModifier(INLINE_KEYWORD) ||
|
isInline = property.hasModifier(INLINE_KEYWORD) ||
|
||||||
this@toFirPropertyAccessor?.hasModifier(INLINE_KEYWORD) == true
|
this@toFirPropertyAccessor?.hasModifier(INLINE_KEYWORD) == true
|
||||||
isExternal = property.hasModifier(EXTERNAL_KEYWORD) ||
|
isExternal = property.hasModifier(EXTERNAL_KEYWORD) ||
|
||||||
|
|||||||
@@ -195,8 +195,8 @@ val FirProperty.hasBackingField: Boolean
|
|||||||
else -> {
|
else -> {
|
||||||
val getter = getter ?: return true
|
val getter = getter ?: return true
|
||||||
if (isVar && setter == null) return true
|
if (isVar && setter == null) return true
|
||||||
if (setter?.hasBody == false) return true
|
if (setter?.hasBody == false && setter?.isAbstract == false) return true
|
||||||
if (!getter.hasBody) return true
|
if (!getter.hasBody && !getter.isAbstract) return true
|
||||||
|
|
||||||
return isReferredViaField == true
|
return isReferredViaField == true
|
||||||
}
|
}
|
||||||
|
|||||||
+7
-7
@@ -28,19 +28,19 @@ package MyPackage
|
|||||||
abstract fun j() {}
|
abstract fun j() {}
|
||||||
|
|
||||||
//property accessors
|
//property accessors
|
||||||
<!MUST_BE_INITIALIZED!>var i: Int<!> abstract get abstract set
|
var i: Int abstract get abstract set
|
||||||
var i1: Int = 0; 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 j: Int get() = i; abstract set
|
||||||
var j1: Int = 0; 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
|
<!MUST_BE_INITIALIZED!>var k: Int<!> abstract set
|
||||||
var k1: Int = 0; abstract set
|
var k1: Int = 0; abstract set
|
||||||
|
|
||||||
<!MUST_BE_INITIALIZED!>var l: Int<!> abstract get abstract set
|
var l: Int abstract get abstract set
|
||||||
var l1: Int = 0; 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
|
// FILE: c.kt
|
||||||
//creating an instance
|
//creating an instance
|
||||||
|
|||||||
@@ -29,18 +29,17 @@ abstract class MyAbstractClass() {
|
|||||||
<!ABSTRACT_FUNCTION_WITH_BODY!>abstract<!> fun j() {}
|
<!ABSTRACT_FUNCTION_WITH_BODY!>abstract<!> fun j() {}
|
||||||
|
|
||||||
//property accessors
|
//property accessors
|
||||||
<!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>var i: Int<!> abstract get abstract set
|
var i: Int abstract get abstract set
|
||||||
var i1: Int = 0; 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 j: Int get() = i; abstract set
|
||||||
<!MUST_BE_INITIALIZED!>var j1: Int<!> get() = i; abstract set
|
var j1: Int get() = i; abstract set
|
||||||
|
|
||||||
<!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>var k: Int<!> abstract set
|
<!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>var k: Int<!> abstract set
|
||||||
var k1: Int = 0; abstract set
|
var k1: Int = 0; abstract set
|
||||||
|
|
||||||
<!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>var l: Int<!> abstract get abstract set
|
var l: Int abstract get abstract set
|
||||||
var l1: Int = 0; 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() {}
|
<!ABSTRACT_FUNCTION_IN_NON_ABSTRACT_CLASS, ABSTRACT_FUNCTION_WITH_BODY!>abstract<!> fun j() {}
|
||||||
|
|
||||||
//property accessors
|
//property accessors
|
||||||
<!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>var i: Int<!> abstract get abstract set
|
var i: Int abstract get abstract set
|
||||||
var i1: Int = 0; 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 j: Int get() = i; abstract set
|
||||||
var j1: Int = 0; 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
|
<!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>var k: Int<!> abstract set
|
||||||
var k1: Int = 0; abstract set
|
var k1: Int = 0; abstract set
|
||||||
|
|
||||||
<!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>var l: Int<!> abstract get abstract set
|
var l: Int abstract get abstract set
|
||||||
var l1: Int = 0; 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 i: Int abstract get abstract set
|
||||||
var i1: Int = <!PROPERTY_INITIALIZER_IN_INTERFACE!>0<!>; 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
|
var j: Int get() = i; abstract set
|
||||||
<!BACKING_FIELD_IN_INTERFACE!>var j1: Int<!> = <!PROPERTY_INITIALIZER_IN_INTERFACE!>0<!>; get() = i; abstract set
|
var j1: Int = <!PROPERTY_INITIALIZER_IN_INTERFACE!>0<!>; get() = i; abstract set
|
||||||
|
|
||||||
var k: Int abstract set
|
var k: Int abstract set
|
||||||
var k1: Int = <!PROPERTY_INITIALIZER_IN_INTERFACE!>0<!>; 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 l: Int abstract get abstract set
|
||||||
var l1: Int = <!PROPERTY_INITIALIZER_IN_INTERFACE!>0<!>; 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() {}
|
<!ABSTRACT_FUNCTION_WITH_BODY!>abstract<!> fun j() {}
|
||||||
|
|
||||||
//property accessors
|
//property accessors
|
||||||
<!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>var i: Int<!> abstract get abstract set
|
var i: Int abstract get abstract set
|
||||||
var i1: Int = 0; 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 j: Int get() = i; abstract set
|
||||||
var j1: Int = 0; 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
|
<!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>var k: Int<!> abstract set
|
||||||
var k1: Int = 0; abstract set
|
var k1: Int = 0; abstract set
|
||||||
|
|
||||||
<!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>var l: Int<!> abstract get abstract set
|
var l: Int abstract get abstract set
|
||||||
var l1: Int = 0; 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) {}
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user