Skip to content

Commit 0d73d79

Browse files
committed
Fix module resolve issue where modules main class was resolved instead of the module.
1 parent f7bc59a commit 0d73d79

File tree

3 files changed

+17
-2
lines changed

3 files changed

+17
-2
lines changed

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

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2123,9 +2123,22 @@ private List<? extends PsiElement> checkIsType(HaxeReference reference) {
21232123
if(textCanBeQname(maybeQname)) {
21242124
HaxeClass classByQName = HaxeResolveUtil.findClassByQName(maybeQname, reference);
21252125
if(classByQName != null) {
2126+
// if part of a longer chain, need to check if it is a module or mainclass reference
2127+
if(referenceExpression.getParent() instanceof HaxeReferenceExpression expression) {
2128+
HaxeModuleModel module = classByQName.getModel().getModule();
2129+
HaxeClassModel classModel = module.getMainClass();
2130+
if(classModel != null && classModel.haxeClass == classByQName) {
2131+
HaxeBaseMemberModel member = module.getMember(expression.getIdentifier().getText(), null);
2132+
if (member != null) {
2133+
// if the parent reference is a member of the module, we return the module instead of the class
2134+
LogResolution(reference, "via fully qualified module name.");
2135+
return List.of(module.module);
2136+
}
2137+
}
2138+
}
21262139
HaxeComponentName componentName = classByQName.getComponentName();
21272140
if(componentName != null) {
2128-
LogResolution(reference, "via fully qualified name.");
2141+
LogResolution(reference, "via fully qualified class name.");
21292142
return List.of(componentName);
21302143
}
21312144
}

src/main/java/com/intellij/plugins/haxe/model/HaxeModuleModel.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,7 @@ public HaxeBaseMemberModel getMember(String name, @Nullable HaxeGenericResolver
126126
return HaxeBaseMemberModel.fromPsi(match);
127127
}
128128

129+
@Nullable
129130
public HaxeClassModel getClass(String name) {
130131
if(name == null) return null;
131132
List<HaxeNamedComponent> allNamedComponents = getAllHaxeNamedComponents(HaxeComponentType.CLASS );
@@ -150,6 +151,7 @@ public List<HaxeClassModel> getClasses() {
150151
return HaxeNamedSubComponentUtil.filterNamedComponentsByType(allNamedComponents, componentType);
151152
}
152153

154+
@Nullable
153155
public HaxeClassModel getMainClass() {
154156
return getClass(getName());
155157
}

src/test/resources/testData/resolve/modules/ModuleImport.hx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import other.OtherModule;
55
class <info descr="null">ModuleImportTest</info> {
66
public function <info descr="null">new</info>() {
77
// should resolve (FQN)
8-
<info descr="null">modules.ModuleWithMainClass</info>.<info descr="null">moduleAFunction</info>();
8+
modules.ModuleWithMainClass.<info descr="null">moduleAFunction</info>();
99
modules.ModuleWithoutMainClass.<info descr="null">moduleBFunction</info>();
1010

1111
// should resolve (wildcard import)

0 commit comments

Comments
 (0)