[FIR2IR] Use FirSourceElement.elementType instead of PSI
This commit is contained in:
@@ -6,6 +6,7 @@
|
|||||||
package org.jetbrains.kotlin.fir.backend
|
package org.jetbrains.kotlin.fir.backend
|
||||||
|
|
||||||
import com.intellij.psi.PsiCompiledElement
|
import com.intellij.psi.PsiCompiledElement
|
||||||
|
import org.jetbrains.kotlin.KtNodeTypes
|
||||||
import org.jetbrains.kotlin.fir.FirElement
|
import org.jetbrains.kotlin.fir.FirElement
|
||||||
import org.jetbrains.kotlin.fir.FirSession
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirClass
|
import org.jetbrains.kotlin.fir.declarations.FirClass
|
||||||
@@ -31,8 +32,6 @@ import org.jetbrains.kotlin.ir.symbols.*
|
|||||||
import org.jetbrains.kotlin.ir.types.IrErrorType
|
import org.jetbrains.kotlin.ir.types.IrErrorType
|
||||||
import org.jetbrains.kotlin.ir.types.impl.IrErrorTypeImpl
|
import org.jetbrains.kotlin.ir.types.impl.IrErrorTypeImpl
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
import org.jetbrains.kotlin.psi.KtForExpression
|
|
||||||
import org.jetbrains.kotlin.psi.KtOperationReferenceExpression
|
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.endOffset
|
import org.jetbrains.kotlin.psi.psiUtil.endOffset
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.startOffsetSkippingComments
|
import org.jetbrains.kotlin.psi.psiUtil.startOffsetSkippingComments
|
||||||
import org.jetbrains.kotlin.types.Variance
|
import org.jetbrains.kotlin.types.Variance
|
||||||
@@ -212,12 +211,18 @@ internal fun FirReference.statementOrigin(): IrStatementOrigin? {
|
|||||||
is FirResolvedNamedReference -> when (resolvedSymbol) {
|
is FirResolvedNamedReference -> when (resolvedSymbol) {
|
||||||
is AccessorSymbol, is SyntheticPropertySymbol -> IrStatementOrigin.GET_PROPERTY
|
is AccessorSymbol, is SyntheticPropertySymbol -> IrStatementOrigin.GET_PROPERTY
|
||||||
is FirNamedFunctionSymbol -> when {
|
is FirNamedFunctionSymbol -> when {
|
||||||
resolvedSymbol.callableId.isInvoke() -> IrStatementOrigin.INVOKE
|
resolvedSymbol.callableId.isInvoke() ->
|
||||||
source.psi is KtForExpression && resolvedSymbol.callableId.isIteratorNext() -> IrStatementOrigin.FOR_LOOP_NEXT
|
IrStatementOrigin.INVOKE
|
||||||
source.psi is KtForExpression && resolvedSymbol.callableId.isIteratorHasNext() -> IrStatementOrigin.FOR_LOOP_HAS_NEXT
|
source?.elementType == KtNodeTypes.FOR && resolvedSymbol.callableId.isIteratorNext() ->
|
||||||
source.psi is KtForExpression && resolvedSymbol.callableId.isIterator() -> IrStatementOrigin.FOR_LOOP_ITERATOR
|
IrStatementOrigin.FOR_LOOP_NEXT
|
||||||
source.psi is KtOperationReferenceExpression -> nameToOperationConventionOrigin[resolvedSymbol.callableId.callableName]
|
source?.elementType == KtNodeTypes.FOR && resolvedSymbol.callableId.isIteratorHasNext() ->
|
||||||
else -> null
|
IrStatementOrigin.FOR_LOOP_HAS_NEXT
|
||||||
|
source?.elementType == KtNodeTypes.FOR && resolvedSymbol.callableId.isIterator() ->
|
||||||
|
IrStatementOrigin.FOR_LOOP_ITERATOR
|
||||||
|
source?.elementType == KtNodeTypes.OPERATION_REFERENCE ->
|
||||||
|
nameToOperationConventionOrigin[resolvedSymbol.callableId.callableName]
|
||||||
|
else ->
|
||||||
|
null
|
||||||
}
|
}
|
||||||
else -> null
|
else -> null
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-3
@@ -5,6 +5,7 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.fir.backend
|
package org.jetbrains.kotlin.fir.backend
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.KtNodeTypes
|
||||||
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
|
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.Modality
|
import org.jetbrains.kotlin.descriptors.Modality
|
||||||
import org.jetbrains.kotlin.descriptors.Visibilities
|
import org.jetbrains.kotlin.descriptors.Visibilities
|
||||||
@@ -19,7 +20,6 @@ import org.jetbrains.kotlin.fir.render
|
|||||||
import org.jetbrains.kotlin.fir.resolve.*
|
import org.jetbrains.kotlin.fir.resolve.*
|
||||||
import org.jetbrains.kotlin.fir.scopes.impl.FirClassSubstitutionScope
|
import org.jetbrains.kotlin.fir.scopes.impl.FirClassSubstitutionScope
|
||||||
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
|
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.StandardClassIds
|
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.*
|
import org.jetbrains.kotlin.fir.symbols.impl.*
|
||||||
import org.jetbrains.kotlin.fir.types.ConeKotlinType
|
import org.jetbrains.kotlin.fir.types.ConeKotlinType
|
||||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||||
@@ -38,7 +38,6 @@ import org.jetbrains.kotlin.ir.util.constructors
|
|||||||
import org.jetbrains.kotlin.name.ClassId
|
import org.jetbrains.kotlin.name.ClassId
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
import org.jetbrains.kotlin.psi.KtFunctionLiteral
|
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.endOffset
|
import org.jetbrains.kotlin.psi.psiUtil.endOffset
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.startOffsetSkippingComments
|
import org.jetbrains.kotlin.psi.psiUtil.startOffsetSkippingComments
|
||||||
|
|
||||||
@@ -327,7 +326,7 @@ class Fir2IrDeclarationStorage(
|
|||||||
val simpleFunction = function as? FirSimpleFunction
|
val simpleFunction = function as? FirSimpleFunction
|
||||||
val containerSource = simpleFunction?.containerSource
|
val containerSource = simpleFunction?.containerSource
|
||||||
val descriptor = containerSource?.let { WrappedFunctionDescriptorWithContainerSource(it) } ?: WrappedSimpleFunctionDescriptor()
|
val descriptor = containerSource?.let { WrappedFunctionDescriptorWithContainerSource(it) } ?: WrappedSimpleFunctionDescriptor()
|
||||||
val isLambda = function.psi is KtFunctionLiteral
|
val isLambda = function.source?.elementType == KtNodeTypes.FUNCTION_LITERAL
|
||||||
val updatedOrigin = when {
|
val updatedOrigin = when {
|
||||||
isLambda -> IrDeclarationOrigin.LOCAL_FUNCTION_FOR_LAMBDA
|
isLambda -> IrDeclarationOrigin.LOCAL_FUNCTION_FOR_LAMBDA
|
||||||
function.symbol.callableId.isKFunctionInvoke() -> IrDeclarationOrigin.FAKE_OVERRIDE
|
function.symbol.callableId.isKFunctionInvoke() -> IrDeclarationOrigin.FAKE_OVERRIDE
|
||||||
|
|||||||
@@ -5,6 +5,7 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.fir.backend
|
package org.jetbrains.kotlin.fir.backend
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.KtNodeTypes
|
||||||
import org.jetbrains.kotlin.descriptors.ClassConstructorDescriptor
|
import org.jetbrains.kotlin.descriptors.ClassConstructorDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.ClassKind
|
import org.jetbrains.kotlin.descriptors.ClassKind
|
||||||
import org.jetbrains.kotlin.descriptors.Visibilities
|
import org.jetbrains.kotlin.descriptors.Visibilities
|
||||||
@@ -483,16 +484,17 @@ class Fir2IrVisitor(
|
|||||||
|
|
||||||
override fun visitWhenExpression(whenExpression: FirWhenExpression, data: Any?): IrElement {
|
override fun visitWhenExpression(whenExpression: FirWhenExpression, data: Any?): IrElement {
|
||||||
val subjectVariable = generateWhenSubjectVariable(whenExpression)
|
val subjectVariable = generateWhenSubjectVariable(whenExpression)
|
||||||
val origin = when (val psi = whenExpression.psi) {
|
val psi = whenExpression.psi
|
||||||
is KtWhenExpression -> IrStatementOrigin.WHEN
|
val origin = when (whenExpression.source?.elementType) {
|
||||||
is KtIfExpression -> IrStatementOrigin.IF
|
KtNodeTypes.WHEN -> IrStatementOrigin.WHEN
|
||||||
is KtBinaryExpression -> when (psi.operationToken) {
|
KtNodeTypes.IF -> IrStatementOrigin.IF
|
||||||
|
KtNodeTypes.BINARY_EXPRESSION -> when ((psi as? KtBinaryExpression)?.operationToken) {
|
||||||
KtTokens.ELVIS -> IrStatementOrigin.ELVIS
|
KtTokens.ELVIS -> IrStatementOrigin.ELVIS
|
||||||
KtTokens.OROR -> IrStatementOrigin.OROR
|
KtTokens.OROR -> IrStatementOrigin.OROR
|
||||||
KtTokens.ANDAND -> IrStatementOrigin.ANDAND
|
KtTokens.ANDAND -> IrStatementOrigin.ANDAND
|
||||||
else -> null
|
else -> null
|
||||||
}
|
}
|
||||||
is KtUnaryExpression -> IrStatementOrigin.EXCLEXCL
|
KtNodeTypes.POSTFIX_EXPRESSION -> IrStatementOrigin.EXCLEXCL
|
||||||
else -> null
|
else -> null
|
||||||
}
|
}
|
||||||
return conversionScope.withSubject(subjectVariable) {
|
return conversionScope.withSubject(subjectVariable) {
|
||||||
@@ -555,7 +557,7 @@ class Fir2IrVisitor(
|
|||||||
|
|
||||||
override fun visitWhileLoop(whileLoop: FirWhileLoop, data: Any?): IrElement {
|
override fun visitWhileLoop(whileLoop: FirWhileLoop, data: Any?): IrElement {
|
||||||
return whileLoop.convertWithOffsets { startOffset, endOffset ->
|
return whileLoop.convertWithOffsets { startOffset, endOffset ->
|
||||||
val origin = if (whileLoop.psi is KtForExpression) IrStatementOrigin.FOR_LOOP_INNER_WHILE
|
val origin = if (whileLoop.source?.elementType == KtNodeTypes.FOR) IrStatementOrigin.FOR_LOOP_INNER_WHILE
|
||||||
else IrStatementOrigin.WHILE_LOOP
|
else IrStatementOrigin.WHILE_LOOP
|
||||||
IrWhileLoopImpl(startOffset, endOffset, irBuiltIns.unitType, origin).apply {
|
IrWhileLoopImpl(startOffset, endOffset, irBuiltIns.unitType, origin).apply {
|
||||||
loopMap[whileLoop] = this
|
loopMap[whileLoop] = this
|
||||||
|
|||||||
Reference in New Issue
Block a user