Skip to content

Commit af96a81

Browse files
committed
Attempt at reducing idempotent issues with extension method resolve
1 parent d2aaf73 commit af96a81

File tree

1 file changed

+8
-2
lines changed

1 file changed

+8
-2
lines changed

src/main/java/com/intellij/plugins/haxe/lang/psi/HaxeResolver.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1445,6 +1445,7 @@ private static void LogResolution(HaxeReference ref, String tailmsg) {
14451445
}
14461446

14471447
private static final RecursionGuard<PsiElement> extensionsFromMetaGuard = RecursionManager.createGuard("extensionsFromMetaGuard");
1448+
private static final RecursionGuard<PsiElement> extensionsMethodGuard = RecursionManager.createGuard("extensionsMethodGuard");
14481449

14491450
/**
14501451
* Resolve a chain reference, given two references: the qualifier, and the name.
@@ -1465,10 +1466,15 @@ private List<? extends PsiElement> resolveChain(HaxeReference lefthandExpression
14651466

14661467
String identifier = reference instanceof HaxeReferenceExpression referenceExpression ? referenceExpression.getIdentifier().getText() : reference.getText();
14671468
HaxeExpressionEvaluatorContext context = new HaxeExpressionEvaluatorContext(lefthandExpression);
1468-
ResultHolder result = HaxeExpressionEvaluator.evaluateWithRecursionGuard(lefthandExpression, context, null).result;
14691469

1470+
ResultHolder result = extensionsMethodGuard.doPreventingRecursion(lefthandExpression, true, () -> {
1471+
return HaxeExpressionEvaluator.evaluate(lefthandExpression, context, null).result;
1472+
});
1473+
if(result== null) {
1474+
extensionsMethodGuard.prohibitResultCaching(lefthandExpression);
1475+
}
14701476

1471-
SpecificHaxeClassReference classType = result.isUnknown() ? null : result.getClassType();
1477+
SpecificHaxeClassReference classType = result == null || result.isUnknown() ? null : result.getClassType();
14721478
HaxeClass haxeClass = classType != null ? classType.getHaxeClass() : null;
14731479

14741480
// To avoid incorrect extension method results we avoid any results where we don't know type of left reference.

0 commit comments

Comments
 (0)