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 constructor(): R|C| {
|
||||
public constructor(b: R|kotlin/Boolean|): R|C| {
|
||||
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 get(): R|kotlin/Int|
|
||||
|
||||
|
||||
+1
-1
@@ -4,7 +4,7 @@ object B {
|
||||
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
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -66,7 +66,7 @@ class ValueParameter(
|
||||
this.isExpect = isExpect
|
||||
isActual = modifiers.hasActual()
|
||||
isOverride = modifiers.hasOverride()
|
||||
isConst = false
|
||||
isConst = modifiers.hasConst()
|
||||
isLateInit = false
|
||||
}
|
||||
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.PROPERTY_MODIFIER
|
||||
import org.jetbrains.kotlin.fir.lightTree.fir.modifier.ModifierSets.VISIBILITY_MODIFIER
|
||||
import org.jetbrains.kotlin.lexer.KtTokens
|
||||
|
||||
class Modifier(
|
||||
private val classModifiers: MutableList<ClassModifier> = mutableListOf(),
|
||||
@@ -34,23 +35,30 @@ class Modifier(
|
||||
|
||||
fun addModifier(modifier: LighterASTNode, isInClass: Boolean = false) {
|
||||
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 {
|
||||
INLINE_MODIFIER.contains(tokenType) -> {
|
||||
if (isInClass)
|
||||
this.classModifiers += ClassModifier.valueOf(modifier.toString().toUpperCase())
|
||||
this.classModifiers += ClassModifier.valueOf(upperCasedModifier)
|
||||
else
|
||||
this.functionModifiers += FunctionModifier.valueOf(modifier.toString().toUpperCase())
|
||||
this.functionModifiers += FunctionModifier.valueOf(upperCasedModifier)
|
||||
}
|
||||
CLASS_MODIFIER.contains(tokenType) -> this.classModifiers += ClassModifier.valueOf(modifier.toString().toUpperCase())
|
||||
MEMBER_MODIFIER.contains(tokenType) -> this.memberModifiers += MemberModifier.valueOf(modifier.toString().toUpperCase())
|
||||
CLASS_MODIFIER.contains(tokenType) -> this.classModifiers += ClassModifier.valueOf(upperCasedModifier)
|
||||
MEMBER_MODIFIER.contains(tokenType) -> this.memberModifiers += MemberModifier.valueOf(upperCasedModifier)
|
||||
VISIBILITY_MODIFIER.contains(tokenType) -> this.visibilityModifiers +=
|
||||
VisibilityModifier.valueOf(modifier.toString().toUpperCase())
|
||||
FUNCTION_MODIFIER.contains(tokenType) -> this.functionModifiers += FunctionModifier.valueOf(modifier.toString().toUpperCase())
|
||||
PROPERTY_MODIFIER.contains(tokenType) -> this.propertyModifier = PropertyModifier.valueOf(modifier.toString().toUpperCase())
|
||||
VisibilityModifier.valueOf(upperCasedModifier)
|
||||
FUNCTION_MODIFIER.contains(tokenType) -> this.functionModifiers += FunctionModifier.valueOf(upperCasedModifier)
|
||||
PROPERTY_MODIFIER.contains(tokenType) -> this.propertyModifier = PropertyModifier.valueOf(upperCasedModifier)
|
||||
INHERITANCE_MODIFIER.contains(tokenType) -> this.inheritanceModifiers +=
|
||||
InheritanceModifier.valueOf(modifier.toString().toUpperCase())
|
||||
PARAMETER_MODIFIER.contains(tokenType) -> this.parameterModifiers += ParameterModifier.valueOf(modifier.toString().toUpperCase())
|
||||
PLATFORM_MODIFIER.contains(tokenType) -> this.platformModifiers += PlatformModifier.valueOf(modifier.toString().toUpperCase())
|
||||
InheritanceModifier.valueOf(upperCasedModifier)
|
||||
PARAMETER_MODIFIER.contains(tokenType) -> this.parameterModifiers += ParameterModifier.valueOf(upperCasedModifier)
|
||||
PLATFORM_MODIFIER.contains(tokenType) -> this.platformModifiers += PlatformModifier.valueOf(upperCasedModifier)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -167,4 +175,8 @@ class Modifier(
|
||||
fun hasActual(): Boolean {
|
||||
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 {
|
||||
VARARG,
|
||||
NOINLINE,
|
||||
CROSSINLINE
|
||||
CROSSINLINE,
|
||||
CONST
|
||||
}
|
||||
|
||||
enum class PlatformModifier {
|
||||
|
||||
@@ -450,7 +450,7 @@ class RawFirBuilder(
|
||||
this.isExpect = isExpect
|
||||
isActual = hasActualModifier()
|
||||
isOverride = hasModifier(OVERRIDE_KEYWORD)
|
||||
isConst = false
|
||||
isConst = hasModifier(CONST_KEYWORD)
|
||||
isLateInit = false
|
||||
}
|
||||
val propertySource = toFirSourceElement(FirFakeSourceElementKind.PropertyFromParameter)
|
||||
|
||||
@@ -12,7 +12,7 @@ object A {
|
||||
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 {
|
||||
<!INCOMPATIBLE_MODIFIERS!>open<!> <!CONST_VAL_NOT_TOP_LEVEL_OR_OBJECT, INCOMPATIBLE_MODIFIERS!>const<!> val x: Int = 6
|
||||
|
||||
Reference in New Issue
Block a user