FIR: set isConst on primary constructor properties
This commit is contained in:
+4
-1
@@ -11,10 +11,13 @@ FILE: constValNotTopLevelOrObject.kt
|
|||||||
|
|
||||||
}
|
}
|
||||||
public final class C : R|kotlin/Any| {
|
public final class C : R|kotlin/Any| {
|
||||||
public constructor(): R|C| {
|
public constructor(b: R|kotlin/Boolean|): R|C| {
|
||||||
super<R|kotlin/Any|>()
|
super<R|kotlin/Any|>()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public final const val b: R|kotlin/Boolean| = R|<local>/b|
|
||||||
|
public get(): R|kotlin/Boolean|
|
||||||
|
|
||||||
public final const val c: R|kotlin/Int| = Int(3)
|
public final const val c: R|kotlin/Int| = Int(3)
|
||||||
public get(): R|kotlin/Int|
|
public get(): R|kotlin/Int|
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -4,7 +4,7 @@ object B {
|
|||||||
const val b = 2
|
const val b = 2
|
||||||
}
|
}
|
||||||
|
|
||||||
class C {
|
class C(<!CONST_VAL_NOT_TOP_LEVEL_OR_OBJECT!>const<!> val b: Boolean) {
|
||||||
<!CONST_VAL_NOT_TOP_LEVEL_OR_OBJECT!>const<!> val c = 3
|
<!CONST_VAL_NOT_TOP_LEVEL_OR_OBJECT!>const<!> val c = 3
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -66,7 +66,7 @@ class ValueParameter(
|
|||||||
this.isExpect = isExpect
|
this.isExpect = isExpect
|
||||||
isActual = modifiers.hasActual()
|
isActual = modifiers.hasActual()
|
||||||
isOverride = modifiers.hasOverride()
|
isOverride = modifiers.hasOverride()
|
||||||
isConst = false
|
isConst = modifiers.hasConst()
|
||||||
isLateInit = false
|
isLateInit = false
|
||||||
}
|
}
|
||||||
annotations += this@ValueParameter.firValueParameter.annotations
|
annotations += this@ValueParameter.firValueParameter.annotations
|
||||||
|
|||||||
+22
-10
@@ -19,6 +19,7 @@ import org.jetbrains.kotlin.fir.lightTree.fir.modifier.ModifierSets.PARAMETER_MO
|
|||||||
import org.jetbrains.kotlin.fir.lightTree.fir.modifier.ModifierSets.PLATFORM_MODIFIER
|
import org.jetbrains.kotlin.fir.lightTree.fir.modifier.ModifierSets.PLATFORM_MODIFIER
|
||||||
import org.jetbrains.kotlin.fir.lightTree.fir.modifier.ModifierSets.PROPERTY_MODIFIER
|
import org.jetbrains.kotlin.fir.lightTree.fir.modifier.ModifierSets.PROPERTY_MODIFIER
|
||||||
import org.jetbrains.kotlin.fir.lightTree.fir.modifier.ModifierSets.VISIBILITY_MODIFIER
|
import org.jetbrains.kotlin.fir.lightTree.fir.modifier.ModifierSets.VISIBILITY_MODIFIER
|
||||||
|
import org.jetbrains.kotlin.lexer.KtTokens
|
||||||
|
|
||||||
class Modifier(
|
class Modifier(
|
||||||
private val classModifiers: MutableList<ClassModifier> = mutableListOf(),
|
private val classModifiers: MutableList<ClassModifier> = mutableListOf(),
|
||||||
@@ -34,23 +35,30 @@ class Modifier(
|
|||||||
|
|
||||||
fun addModifier(modifier: LighterASTNode, isInClass: Boolean = false) {
|
fun addModifier(modifier: LighterASTNode, isInClass: Boolean = false) {
|
||||||
val tokenType = modifier.tokenType
|
val tokenType = modifier.tokenType
|
||||||
|
if (tokenType == KtTokens.CONST_KEYWORD) {
|
||||||
|
// Specific case because CONST may exist both on parameter and property
|
||||||
|
propertyModifier = PropertyModifier.CONST
|
||||||
|
parameterModifiers += ParameterModifier.CONST
|
||||||
|
return
|
||||||
|
}
|
||||||
|
val upperCasedModifier = modifier.toString().toUpperCase()
|
||||||
when {
|
when {
|
||||||
INLINE_MODIFIER.contains(tokenType) -> {
|
INLINE_MODIFIER.contains(tokenType) -> {
|
||||||
if (isInClass)
|
if (isInClass)
|
||||||
this.classModifiers += ClassModifier.valueOf(modifier.toString().toUpperCase())
|
this.classModifiers += ClassModifier.valueOf(upperCasedModifier)
|
||||||
else
|
else
|
||||||
this.functionModifiers += FunctionModifier.valueOf(modifier.toString().toUpperCase())
|
this.functionModifiers += FunctionModifier.valueOf(upperCasedModifier)
|
||||||
}
|
}
|
||||||
CLASS_MODIFIER.contains(tokenType) -> this.classModifiers += ClassModifier.valueOf(modifier.toString().toUpperCase())
|
CLASS_MODIFIER.contains(tokenType) -> this.classModifiers += ClassModifier.valueOf(upperCasedModifier)
|
||||||
MEMBER_MODIFIER.contains(tokenType) -> this.memberModifiers += MemberModifier.valueOf(modifier.toString().toUpperCase())
|
MEMBER_MODIFIER.contains(tokenType) -> this.memberModifiers += MemberModifier.valueOf(upperCasedModifier)
|
||||||
VISIBILITY_MODIFIER.contains(tokenType) -> this.visibilityModifiers +=
|
VISIBILITY_MODIFIER.contains(tokenType) -> this.visibilityModifiers +=
|
||||||
VisibilityModifier.valueOf(modifier.toString().toUpperCase())
|
VisibilityModifier.valueOf(upperCasedModifier)
|
||||||
FUNCTION_MODIFIER.contains(tokenType) -> this.functionModifiers += FunctionModifier.valueOf(modifier.toString().toUpperCase())
|
FUNCTION_MODIFIER.contains(tokenType) -> this.functionModifiers += FunctionModifier.valueOf(upperCasedModifier)
|
||||||
PROPERTY_MODIFIER.contains(tokenType) -> this.propertyModifier = PropertyModifier.valueOf(modifier.toString().toUpperCase())
|
PROPERTY_MODIFIER.contains(tokenType) -> this.propertyModifier = PropertyModifier.valueOf(upperCasedModifier)
|
||||||
INHERITANCE_MODIFIER.contains(tokenType) -> this.inheritanceModifiers +=
|
INHERITANCE_MODIFIER.contains(tokenType) -> this.inheritanceModifiers +=
|
||||||
InheritanceModifier.valueOf(modifier.toString().toUpperCase())
|
InheritanceModifier.valueOf(upperCasedModifier)
|
||||||
PARAMETER_MODIFIER.contains(tokenType) -> this.parameterModifiers += ParameterModifier.valueOf(modifier.toString().toUpperCase())
|
PARAMETER_MODIFIER.contains(tokenType) -> this.parameterModifiers += ParameterModifier.valueOf(upperCasedModifier)
|
||||||
PLATFORM_MODIFIER.contains(tokenType) -> this.platformModifiers += PlatformModifier.valueOf(modifier.toString().toUpperCase())
|
PLATFORM_MODIFIER.contains(tokenType) -> this.platformModifiers += PlatformModifier.valueOf(upperCasedModifier)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -167,4 +175,8 @@ class Modifier(
|
|||||||
fun hasActual(): Boolean {
|
fun hasActual(): Boolean {
|
||||||
return platformModifiers.contains(PlatformModifier.ACTUAL) || platformModifiers.contains(PlatformModifier.IMPL)
|
return platformModifiers.contains(PlatformModifier.ACTUAL) || platformModifiers.contains(PlatformModifier.IMPL)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun hasConst(): Boolean {
|
||||||
|
return parameterModifiers.contains(ParameterModifier.CONST)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-1
@@ -51,7 +51,8 @@ enum class InheritanceModifier {
|
|||||||
enum class ParameterModifier {
|
enum class ParameterModifier {
|
||||||
VARARG,
|
VARARG,
|
||||||
NOINLINE,
|
NOINLINE,
|
||||||
CROSSINLINE
|
CROSSINLINE,
|
||||||
|
CONST
|
||||||
}
|
}
|
||||||
|
|
||||||
enum class PlatformModifier {
|
enum class PlatformModifier {
|
||||||
|
|||||||
@@ -450,7 +450,7 @@ class RawFirBuilder(
|
|||||||
this.isExpect = isExpect
|
this.isExpect = isExpect
|
||||||
isActual = hasActualModifier()
|
isActual = hasActualModifier()
|
||||||
isOverride = hasModifier(OVERRIDE_KEYWORD)
|
isOverride = hasModifier(OVERRIDE_KEYWORD)
|
||||||
isConst = false
|
isConst = hasModifier(CONST_KEYWORD)
|
||||||
isLateInit = false
|
isLateInit = false
|
||||||
}
|
}
|
||||||
val propertySource = toFirSourceElement(FirFakeSourceElementKind.PropertyFromParameter)
|
val propertySource = toFirSourceElement(FirFakeSourceElementKind.PropertyFromParameter)
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ object A {
|
|||||||
const val inObject: Int = 4
|
const val inObject: Int = 4
|
||||||
}
|
}
|
||||||
|
|
||||||
class B(const val constructor: Int = 5)
|
class B(<!CONST_VAL_NOT_TOP_LEVEL_OR_OBJECT!>const<!> val constructor: Int = 5)
|
||||||
|
|
||||||
abstract class C {
|
abstract class C {
|
||||||
<!INCOMPATIBLE_MODIFIERS!>open<!> <!CONST_VAL_NOT_TOP_LEVEL_OR_OBJECT, INCOMPATIBLE_MODIFIERS!>const<!> val x: Int = 6
|
<!INCOMPATIBLE_MODIFIERS!>open<!> <!CONST_VAL_NOT_TOP_LEVEL_OR_OBJECT, INCOMPATIBLE_MODIFIERS!>const<!> val x: Int = 6
|
||||||
|
|||||||
Reference in New Issue
Block a user