Skip to content

Commit 9835496

Browse files
committed
add logic to handle EnumExtractObjectLiterals when trying to find Enum member hints.
1 parent 58c1a61 commit 9835496

File tree

1 file changed

+38
-22
lines changed

1 file changed

+38
-22
lines changed

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

Lines changed: 38 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -754,7 +754,7 @@ private List<? extends PsiElement> checkEnumMemberHints(HaxeReference reference)
754754
expression = parenthesizedExpression.getExpression();
755755
}
756756

757-
PsiElement fromPath = enumMEmberTraverseUsagePath(reference);
757+
PsiElement fromPath = enumMemberTraverseUsagePath(reference);
758758
if (fromPath instanceof HaxeEnumDeclaration enumDeclaration) {
759759
HaxeBaseMemberModel member = enumDeclaration.getModel().getMember(reference.getText(), null);
760760
if (member != null) {
@@ -1631,7 +1631,7 @@ private static List<PsiElement> tryResolveExtractedValue(HaxeReference reference
16311631
return null;
16321632
}
16331633
@Nullable
1634-
private static PsiElement enumMEmberTraverseUsagePath(HaxeReference reference) {
1634+
private PsiElement enumMemberTraverseUsagePath(HaxeReference reference) {
16351635
PsiElement parent = reference.getParent();
16361636
if (parent instanceof HaxeEnumValueReference) {
16371637
Stack<Object> objectPath = new Stack<>();
@@ -1646,30 +1646,32 @@ private static PsiElement enumMEmberTraverseUsagePath(HaxeReference reference) {
16461646
Object path = objectPath.get(i);
16471647
if (pathElement instanceof HaxeReferenceExpression referenceExpression) {
16481648
pathElement = referenceExpression.resolve();
1649-
if (pathElement instanceof HaxePsiField psiField) {
1650-
ResultHolder result = HaxeExpressionEvaluator.evaluate(psiField).result;
1651-
if (result != null && result.getClassType() != null) {
1652-
HaxeClassModel haxeClassModel = result.getClassType().getHaxeClassModel();
1653-
if (path instanceof String memberName) {
1654-
if (haxeClassModel != null) {
1655-
HaxeBaseMemberModel member = haxeClassModel.getMember(memberName, null);
1656-
if (member != null) {
1657-
lastElement = member.getNamedComponentPsi();
1658-
continue;
1659-
}
1660-
}
1661-
} else if (path instanceof Integer arrayIndex) {
1662-
SpecificTypeReference fullyResolved = result.getClassType().fullyResolveTypeDefAndUnwrapNullTypeReference();
1663-
if (fullyResolved instanceof SpecificHaxeClassReference classReference) {
1664-
ResultHolder iterableType = classReference.getIterableElementType(null);
1665-
if (iterableType != null && iterableType.getType() instanceof SpecificHaxeClassReference classType)
1666-
lastElement = classType.getHaxeClass();
1649+
1650+
}
1651+
if (pathElement instanceof HaxePsiField psiField) {
1652+
ResultHolder result = HaxeExpressionEvaluator.evaluate(psiField).result;
1653+
if (result != null && result.getClassType() != null) {
1654+
HaxeClassModel haxeClassModel = result.getClassType().getHaxeClassModel();
1655+
if (path instanceof String memberName) {
1656+
if (haxeClassModel != null) {
1657+
HaxeBaseMemberModel member = haxeClassModel.getMember(memberName, null);
1658+
if (member != null) {
1659+
lastElement = member.getNamedComponentPsi();
16671660
continue;
16681661
}
16691662
}
1663+
} else if (path instanceof Integer) { // Integer means array access
1664+
SpecificTypeReference fullyResolved = result.getClassType().fullyResolveTypeDefAndUnwrapNullTypeReference();
1665+
if (fullyResolved instanceof SpecificHaxeClassReference classReference) {
1666+
ResultHolder iterableType = classReference.getIterableElementType(null);
1667+
if (iterableType != null && iterableType.getType() instanceof SpecificHaxeClassReference classType)
1668+
lastElement = classType.getHaxeClass();
1669+
continue;
1670+
}
16701671
}
16711672
}
16721673
}
1674+
16731675
if (pathElement instanceof HaxeArrayLiteral arrayLiteral && path instanceof Integer index) {
16741676
HaxeExpressionList expressionList = arrayLiteral.getExpressionList();
16751677
if (expressionList != null) {
@@ -1679,6 +1681,19 @@ private static PsiElement enumMEmberTraverseUsagePath(HaxeReference reference) {
16791681
} else if (pathElement instanceof HaxeObjectLiteral objectLiteral && path instanceof String member) {
16801682
List<HaxeNamedComponent> members = objectLiteral.findHaxeMemberByName(member, null);
16811683
lastElement = members.isEmpty() ? null : members.getFirst();
1684+
1685+
}
1686+
else if(pathElement instanceof HaxeEnumExtractObjectLiteral objectLiteral && path instanceof String member) {
1687+
List<HaxeEnumObjectLiteralElement> elementList = objectLiteral.getEnumObjectLiteralElementList();
1688+
for (HaxeEnumObjectLiteralElement element : elementList) {
1689+
if(element.getComponentName().textMatches(member)) {
1690+
HaxeModel model = getModelForElement(element);
1691+
if (model instanceof HaxeBaseMemberModel memberModel) {
1692+
pathElement = memberModel.getNamedComponentPsi();
1693+
break;
1694+
}
1695+
}
1696+
}
16821697
}
16831698
}
16841699
if(lastElement != null) return lastElement;
@@ -1715,9 +1730,10 @@ private static PsiElement enumMEmberTraverseUsagePath(HaxeReference reference) {
17151730
if (expression instanceof HaxeArrayLiteral || expression instanceof HaxeObjectLiteral) {
17161731
pathElement = expression;
17171732
}
1718-
17191733
}
1720-
1734+
} else if (valueParent instanceof HaxeEnumExtractObjectLiteral objectLiteral) {
1735+
checkParent = false;
1736+
pathElement = objectLiteral;
17211737
}
17221738
pastParent = valueParent;
17231739
valueParent = valueParent.getParent();

0 commit comments

Comments
 (0)