[FIR][LightTree] Mark fake nodes in FOR loop
+ fix bunch of tests
This commit is contained in:
committed by
TeamCityServer
parent
0a68edf3bd
commit
ee48fc320d
+7
-4
@@ -15,7 +15,6 @@ import com.intellij.util.diff.FlyweightCapableTreeStructure
|
||||
import org.jetbrains.kotlin.KtNodeType
|
||||
import org.jetbrains.kotlin.KtNodeTypes
|
||||
import org.jetbrains.kotlin.fir.FirSourceElement
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.getChildren
|
||||
import org.jetbrains.kotlin.lexer.KtTokens
|
||||
import org.jetbrains.kotlin.lexer.KtTokens.MODALITY_MODIFIERS
|
||||
import org.jetbrains.kotlin.lexer.KtTokens.VISIBILITY_MODIFIERS
|
||||
@@ -402,6 +401,7 @@ object LightTreePositioningStrategies {
|
||||
endOffset: Int,
|
||||
tree: FlyweightCapableTreeStructure<LighterASTNode>
|
||||
): List<TextRange> {
|
||||
//PSI counterpart simply search for first RPAR descendant, but this one is more correct
|
||||
return tree.findDescendantByType(node, KtNodeTypes.VALUE_ARGUMENT_LIST)?.let { valueArgumentList ->
|
||||
tree.findLastChildByType(valueArgumentList, KtTokens.RPAR)?.let { rpar ->
|
||||
markElement(rpar, startOffset, endOffset, tree, node)
|
||||
@@ -621,7 +621,7 @@ internal fun FlyweightCapableTreeStructure<LighterASTNode>.nameIdentifier(node:
|
||||
private fun FlyweightCapableTreeStructure<LighterASTNode>.operationReference(node: LighterASTNode): LighterASTNode? =
|
||||
findChildByType(node, KtNodeTypes.OPERATION_REFERENCE)
|
||||
|
||||
private val REFERENCE_EXPRESSIONS = setOf(
|
||||
private val EXPRESSION_NODE_TYPES = setOf(
|
||||
KtNodeTypes.REFERENCE_EXPRESSION,
|
||||
KtNodeTypes.CONSTRUCTOR_DELEGATION_REFERENCE,
|
||||
KtNodeTypes.SUPER_EXPRESSION,
|
||||
@@ -630,6 +630,9 @@ private val REFERENCE_EXPRESSIONS = setOf(
|
||||
KtNodeTypes.LABELED_EXPRESSION,
|
||||
KtNodeTypes.DOT_QUALIFIED_EXPRESSION,
|
||||
KtNodeTypes.FUN,
|
||||
KtNodeTypes.IF,
|
||||
KtNodeTypes.STRING_TEMPLATE,
|
||||
KtNodeTypes.LAMBDA_EXPRESSION,
|
||||
)
|
||||
|
||||
/**
|
||||
@@ -652,7 +655,7 @@ private fun FlyweightCapableTreeStructure<LighterASTNode>.referenceExpression(
|
||||
val childrenRef = Ref<Array<LighterASTNode?>>()
|
||||
getChildren(node, childrenRef)
|
||||
var result = childrenRef.get()?.firstOrNull {
|
||||
it?.tokenType in REFERENCE_EXPRESSIONS ||
|
||||
it?.tokenType in EXPRESSION_NODE_TYPES ||
|
||||
it?.tokenType is KtConstantExpressionElementType ||
|
||||
it?.tokenType == KtNodeTypes.PARENTHESIZED
|
||||
}
|
||||
@@ -663,7 +666,7 @@ private fun FlyweightCapableTreeStructure<LighterASTNode>.referenceExpression(
|
||||
}
|
||||
|
||||
private fun FlyweightCapableTreeStructure<LighterASTNode>.findReferenceExpressionDeep(node: LighterASTNode): LighterASTNode? =
|
||||
findDescendantByTypes(node, REFERENCE_EXPRESSIONS)
|
||||
findDescendantByTypes(node, EXPRESSION_NODE_TYPES)
|
||||
|
||||
private fun FlyweightCapableTreeStructure<LighterASTNode>.rightParenthesis(node: LighterASTNode): LighterASTNode? =
|
||||
findChildByType(node, KtTokens.RPAR)
|
||||
|
||||
+1
-1
@@ -957,7 +957,7 @@ class ExpressionsConverter(
|
||||
source = fakeSource
|
||||
val iteratorVal = generateTemporaryVariable(
|
||||
this@ExpressionsConverter.baseSession,
|
||||
rangeExpression.source,
|
||||
rangeExpression.source?.fakeElement(FirFakeSourceElementKind.DesugaredForLoop),
|
||||
ITERATOR_NAME,
|
||||
buildFunctionCall {
|
||||
source = fakeSource
|
||||
|
||||
@@ -28,8 +28,8 @@ fun <T> fooT2() : (t : T) -> T {
|
||||
|
||||
fun main(args : Array<String>) {
|
||||
args.foo()()
|
||||
args.foo1(<!NO_VALUE_FOR_PARAMETER!>)<!>()
|
||||
<!UNRESOLVED_REFERENCE!>a<!>.foo1(<!NO_VALUE_FOR_PARAMETER!>)<!>()
|
||||
args.foo1(<!NO_VALUE_FOR_PARAMETER{PSI}!>)<!>(<!NO_VALUE_FOR_PARAMETER{LT}!>)<!>
|
||||
<!UNRESOLVED_REFERENCE!>a<!>.foo1(<!NO_VALUE_FOR_PARAMETER{PSI}!>)<!>(<!NO_VALUE_FOR_PARAMETER{LT}!>)<!>
|
||||
<!UNRESOLVED_REFERENCE!>a<!>.foo1()(<!UNRESOLVED_REFERENCE!>a<!>)
|
||||
|
||||
args.foo1()(1)
|
||||
|
||||
+1
-1
@@ -3,5 +3,5 @@ fun Any.foo1() : (i : Int) -> Unit {
|
||||
}
|
||||
|
||||
fun test(a : Any) {
|
||||
a.foo1(<!NO_VALUE_FOR_PARAMETER!>)<!>()
|
||||
a.foo1(<!NO_VALUE_FOR_PARAMETER{PSI}!>)<!>(<!NO_VALUE_FOR_PARAMETER{LT}!>)<!>
|
||||
}
|
||||
|
||||
+1
-1
@@ -5,5 +5,5 @@
|
||||
fun foo(i: Int) {}
|
||||
|
||||
fun test(s: String?) {
|
||||
foo(<!ARGUMENT_TYPE_MISMATCH!>s?.length<!>)
|
||||
foo(<!ARGUMENT_TYPE_MISMATCH{PSI}!>s?.<!ARGUMENT_TYPE_MISMATCH{LT}!>length<!><!>)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user