@@ -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