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