mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-03-22 15:19:59 +07:00
Do not evaluate UParameter for implicit lambda parameter
...which can be restored from fake UAST PSI GitOrigin-RevId: 57a02bf3b5b36daa7a4e91caf9c81c300ca7aba4
This commit is contained in:
committed by
intellij-monorepo-bot
parent
1374e93747
commit
2f79858998
@@ -126,20 +126,38 @@ class TreeBasedEvaluator(
|
||||
data: UEvaluationState
|
||||
): UEvaluationInfo {
|
||||
storeState(node, data)
|
||||
|
||||
fun evaluateViaExtensionsIfUndetermined(resolvedElement: UVariable): UValue {
|
||||
return data[resolvedElement].ifUndetermined {
|
||||
node.evaluateViaExtensions { evaluateVariable(resolvedElement, data) }?.value ?: UUndeterminedValue
|
||||
}
|
||||
}
|
||||
|
||||
return when (val resolvedElement = node.resolveToUElement()) {
|
||||
is UEnumConstant -> UEnumEntryValueConstant(resolvedElement, node)
|
||||
is UField -> if (resolvedElement.hasModifierProperty(PsiModifier.FINAL)) {
|
||||
data[resolvedElement].ifUndetermined {
|
||||
val helper = JavaPsiFacade.getInstance(resolvedElement.project).constantEvaluationHelper
|
||||
val evaluated = helper.computeConstantExpression(resolvedElement.initializer)
|
||||
evaluated?.toConstant() ?: UUndeterminedValue
|
||||
is UField -> {
|
||||
if (resolvedElement.hasModifierProperty(PsiModifier.FINAL)) {
|
||||
data[resolvedElement].ifUndetermined {
|
||||
val helper = JavaPsiFacade.getInstance(resolvedElement.project).constantEvaluationHelper
|
||||
val evaluated = helper.computeConstantExpression(resolvedElement.initializer)
|
||||
evaluated?.toConstant() ?: UUndeterminedValue
|
||||
}
|
||||
}
|
||||
else {
|
||||
return super.visitSimpleNameReferenceExpression(node, data)
|
||||
}
|
||||
}
|
||||
else {
|
||||
return super.visitSimpleNameReferenceExpression(node, data)
|
||||
is UParameter -> {
|
||||
if (resolvedElement.sourcePsi == null && resolvedElement.uastParent is ULambdaExpression) {
|
||||
// fake UParameter without sourcePsi from lambda, i.e., implicit lambda parameter `it`
|
||||
return super.visitSimpleNameReferenceExpression(node, data)
|
||||
}
|
||||
else {
|
||||
evaluateViaExtensionsIfUndetermined(resolvedElement)
|
||||
}
|
||||
}
|
||||
is UVariable -> data[resolvedElement].ifUndetermined {
|
||||
node.evaluateViaExtensions { evaluateVariable(resolvedElement, data) }?.value ?: UUndeterminedValue
|
||||
is UVariable -> {
|
||||
evaluateViaExtensionsIfUndetermined(resolvedElement)
|
||||
}
|
||||
else -> return super.visitSimpleNameReferenceExpression(node, data)
|
||||
} to data storeResultFor node
|
||||
|
||||
Reference in New Issue
Block a user