FIR: minimize explicit use of <destruct> name
This commit is contained in:
@@ -420,9 +420,6 @@ private fun lowerThanBound(context: ConeInferenceContext, argument: ConeKotlinTy
|
||||
|
||||
fun FirMemberDeclaration.isInlineOnly(): Boolean = isInline && hasAnnotation(INLINE_ONLY_ANNOTATION_CLASS_ID)
|
||||
|
||||
val FirProperty.isDestructuringDeclaration
|
||||
get() = name.asString() == "<destruct>"
|
||||
|
||||
val FirExpression.isComponentCall
|
||||
get() = this is FirComponentCall
|
||||
|
||||
|
||||
-3
@@ -33,9 +33,6 @@ object FirDestructuringDeclarationChecker : FirPropertyChecker() {
|
||||
val source = declaration.source ?: return
|
||||
// val (...) = `destructuring_declaration`
|
||||
if (source.elementType == KtNodeTypes.DESTRUCTURING_DECLARATION) {
|
||||
assert(declaration.name.isSpecial && declaration.name.asString() == "<destruct>") {
|
||||
"Unexpected name: ${declaration.name.asString()} for destructuring declaration"
|
||||
}
|
||||
checkInitializer(source, declaration.initializer, reporter, context)
|
||||
return
|
||||
}
|
||||
|
||||
+3
-3
@@ -5,10 +5,10 @@
|
||||
|
||||
package org.jetbrains.kotlin.fir.analysis.checkers.declaration
|
||||
|
||||
import org.jetbrains.kotlin.KtNodeTypes
|
||||
import org.jetbrains.kotlin.fir.FirRealSourceElementKind
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.isComponentCall
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.isDestructuringDeclaration
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.isSubtypeForTypeMismatch
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.DiagnosticReporter
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.INITIALIZER_TYPE_MISMATCH
|
||||
@@ -21,7 +21,8 @@ import org.jetbrains.kotlin.name.StandardClassIds
|
||||
object FirInitializerTypeMismatchChecker : FirPropertyChecker() {
|
||||
override fun check(declaration: FirProperty, context: CheckerContext, reporter: DiagnosticReporter) {
|
||||
val initializer = declaration.initializer ?: return
|
||||
if (declaration.isDestructuringDeclaration) return
|
||||
val source = declaration.source ?: return
|
||||
if (source.elementType == KtNodeTypes.DESTRUCTURING_DECLARATION) return
|
||||
if (initializer.isComponentCall) return
|
||||
if (declaration.returnTypeRef.source?.kind != FirRealSourceElementKind) return
|
||||
val propertyType = declaration.returnTypeRef.coneType
|
||||
@@ -40,7 +41,6 @@ object FirInitializerTypeMismatchChecker : FirPropertyChecker() {
|
||||
if (propertyType.isExtensionFunctionType || expressionType.isExtensionFunctionType) {
|
||||
return
|
||||
}
|
||||
val source = declaration.source ?: return
|
||||
reporter.report(INITIALIZER_TYPE_MISMATCH.on(source, propertyType, expressionType), context)
|
||||
}
|
||||
}
|
||||
|
||||
+4
-6
@@ -37,8 +37,9 @@ object CanBeValChecker : AbstractFirPropertyInitializationChecker() {
|
||||
graph.traverse(TraverseDirection.Forward, reporterVisitor)
|
||||
|
||||
for (property in unprocessedProperties) {
|
||||
if (property.fir.source is FirFakeSourceElement<*>) continue
|
||||
if (property.isDestructuring) continue
|
||||
val source = property.fir.source
|
||||
if (source is FirFakeSourceElement<*>) continue
|
||||
if (source?.elementType == KtNodeTypes.DESTRUCTURING_DECLARATION) continue
|
||||
propertiesCharacteristics[property] = EventOccurrencesRange.ZERO
|
||||
}
|
||||
|
||||
@@ -48,7 +49,7 @@ object CanBeValChecker : AbstractFirPropertyInitializationChecker() {
|
||||
|
||||
for ((symbol, value) in propertiesCharacteristics) {
|
||||
val source = symbol.fir.source
|
||||
if (symbol.isDestructuring) {
|
||||
if (source?.elementType == KtNodeTypes.DESTRUCTURING_DECLARATION) {
|
||||
lastDestructuringSource = source
|
||||
lastDestructuredVariables = symbol.getDestructuringChildrenCount() ?: continue
|
||||
destructuringCanBeVal = true
|
||||
@@ -109,9 +110,6 @@ object CanBeValChecker : AbstractFirPropertyInitializationChecker() {
|
||||
}
|
||||
}
|
||||
|
||||
private val FirPropertySymbol.isDestructuring
|
||||
get() = callableId.callableName.asString() == "<destruct>"
|
||||
|
||||
private val canBeValOccurrenceRanges = setOf(
|
||||
EventOccurrencesRange.EXACTLY_ONCE,
|
||||
EventOccurrencesRange.AT_MOST_ONCE,
|
||||
|
||||
+2
-2
@@ -151,7 +151,7 @@ class ExpressionsConverter(
|
||||
for (valueParameter in valueParameterList) {
|
||||
val multiDeclaration = valueParameter.destructuringDeclaration
|
||||
valueParameters += if (multiDeclaration != null) {
|
||||
val name = Name.special("<destruct>")
|
||||
val name = DESTRUCTURING_NAME
|
||||
val multiParameter = buildValueParameter {
|
||||
source = valueParameter.firValueParameter.source
|
||||
session = baseSession
|
||||
@@ -975,7 +975,7 @@ class ExpressionsConverter(
|
||||
val multiDeclaration = parameter!!.destructuringDeclaration
|
||||
val firLoopParameter = generateTemporaryVariable(
|
||||
this@ExpressionsConverter.baseSession, null,
|
||||
if (multiDeclaration != null) Name.special("<destruct>") else parameter!!.firValueParameter.name,
|
||||
if (multiDeclaration != null) DESTRUCTURING_NAME else parameter!!.firValueParameter.name,
|
||||
buildFunctionCall {
|
||||
calleeReference = buildSimpleNamedReference { name = Name.identifier("next") }
|
||||
explicitReceiver = generateResolvedAccessExpression(null, iteratorVal)
|
||||
|
||||
@@ -1094,7 +1094,7 @@ open class RawFirBuilder(
|
||||
for (valueParameter in literal.valueParameters) {
|
||||
val multiDeclaration = valueParameter.destructuringDeclaration
|
||||
valueParameters += if (multiDeclaration != null) {
|
||||
val name = Name.special("<destruct>")
|
||||
val name = DESTRUCTURING_NAME
|
||||
val multiParameter = buildValueParameter {
|
||||
source = valueParameter.toFirSourceElement()
|
||||
session = baseSession
|
||||
@@ -1750,7 +1750,7 @@ open class RawFirBuilder(
|
||||
val multiDeclaration = ktParameter.destructuringDeclaration
|
||||
val firLoopParameter = generateTemporaryVariable(
|
||||
session = baseSession, source = expression.loopParameter?.toFirSourceElement(),
|
||||
name = if (multiDeclaration != null) Name.special("<destruct>") else ktParameter.nameAsSafeName,
|
||||
name = if (multiDeclaration != null) DESTRUCTURING_NAME else ktParameter.nameAsSafeName,
|
||||
initializer = buildFunctionCall {
|
||||
source = fakeSource
|
||||
calleeReference = buildSimpleNamedReference {
|
||||
|
||||
+7
-5
@@ -147,11 +147,6 @@ abstract class BaseFirBuilder<T>(val baseSession: FirSession, val context: Conte
|
||||
return result
|
||||
}
|
||||
|
||||
/**** Common utils ****/
|
||||
companion object {
|
||||
val ANONYMOUS_OBJECT_NAME = Name.special("<anonymous>")
|
||||
}
|
||||
|
||||
fun FirExpression.toReturn(
|
||||
baseSource: FirSourceElement? = source,
|
||||
labelName: String? = null,
|
||||
@@ -1206,4 +1201,11 @@ abstract class BaseFirBuilder<T>(val baseSession: FirSession, val context: Conte
|
||||
context.forcedElementSourceKind = currentForced
|
||||
}
|
||||
}
|
||||
|
||||
/**** Common utils ****/
|
||||
companion object {
|
||||
val ANONYMOUS_OBJECT_NAME = Name.special("<anonymous>")
|
||||
|
||||
val DESTRUCTURING_NAME = Name.special("<destruct>")
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user