Skip to content

Commit

Permalink
adding search-in-parent-packages option for getQname used in indexing…
Browse files Browse the repository at this point in the history
… (necessary for indexes type and inheritance indexes)
  • Loading branch information
m0rkeulv committed May 19, 2024
1 parent 0b4f4fa commit d8ea124
Show file tree
Hide file tree
Showing 4 changed files with 27 additions and 17 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -163,8 +163,10 @@ private static HaxeClass tryToFindClassFromTypeDef(HaxeClass cls) {
final HaxeTypeOrAnonymous haxeTypeOrAnonymous = haxeTypeDef.getTypeOrAnonymous();
final HaxeType type = haxeTypeOrAnonymous == null ? null : haxeTypeOrAnonymous.getType();
if (type != null) {
final String classNameCandidate = type.getReferenceExpression().getText();
String name = HaxeResolveUtil.getQName(cls.getContainingFile(), classNameCandidate, true);
HaxeReferenceExpression expression = type.getReferenceExpression();
final String classNameCandidate = expression.getText();
String name = HaxeResolveUtil.getQName(cls.getContainingFile(), classNameCandidate, true, true, type);
if (name == null) name = classNameCandidate;// fallback so key wont be null
return HaxeResolveUtil.findClassByQName(name, cls);
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -119,15 +119,15 @@ public HaxeClass fun(PsiElement element) {
final String classNameCandidate = getClassNameCandidate(haxeType);
final String key = classNameCandidate.indexOf('.') != -1 ?
classNameCandidate :
getQNameAndCache(qNameCache, psiFile, classNameCandidate);
getQNameAndCache(qNameCache, psiFile, classNameCandidate, haxeType);
put(result, key, value);
}
for (HaxeType haxeType : haxeClass.getHaxeImplementsList()) {
if (haxeType == null) continue;
final String classNameCandidate = getClassNameCandidate(haxeType);
final String key = classNameCandidate.indexOf('.') != -1 ?
classNameCandidate :
getQNameAndCache(qNameCache, psiFile, classNameCandidate);
getQNameAndCache(qNameCache, psiFile, classNameCandidate, haxeType);
put(result, key, value);
}
}
Expand All @@ -139,10 +139,11 @@ private static String getClassNameCandidate(HaxeType haxeType) {
return haxeType.getReferenceExpression().getText();
}

private static String getQNameAndCache(Map<String, String> qNameCache, PsiFile psiFile, String classNameCandidate) {
private static String getQNameAndCache(Map<String, String> qNameCache, PsiFile psiFile, String classNameCandidate, HaxeType haxeType) {
String result = qNameCache.get(classNameCandidate);
if (result == null) {
result = HaxeResolveUtil.getQName(psiFile, classNameCandidate, true);
result = HaxeResolveUtil.getQName(psiFile, classNameCandidate, true, true, haxeType);
if (result == null) result = classNameCandidate;// fallback so key wont be null
qNameCache.put(classNameCandidate, result);
}
return result;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -113,25 +113,26 @@ public Map<String, List<HaxeClassInfo>> map(final FileContent inputData) {
final String classNameCandidate = haxeType.getText();
final String key = classNameCandidate.indexOf('.') != -1 ?
classNameCandidate :
getQNameAndCache(qNameCache, psiFile, classNameCandidate);
getQNameAndCache(qNameCache, psiFile, classNameCandidate, haxeType);
put(result, key, value);
}
}
else if (type != null) {
final String classNameCandidate = type.getText();
final String qName = classNameCandidate.indexOf('.') != -1 ?
classNameCandidate :
getQNameAndCache(qNameCache, psiFile, classNameCandidate);
getQNameAndCache(qNameCache, psiFile, classNameCandidate, type);
put(result, qName, value);
}
}
return result;
}

private static String getQNameAndCache(Map<String, String> qNameCache, PsiFile psiFile, String classNameCandidate) {
private static String getQNameAndCache(Map<String, String> qNameCache, PsiFile psiFile, String classNameCandidate, HaxeType haxeType) {
String result = qNameCache.get(classNameCandidate);
if (result == null) {
result = HaxeResolveUtil.getQName(psiFile, classNameCandidate, true);
result = HaxeResolveUtil.getQName(psiFile, classNameCandidate, true, true, haxeType);
if (result == null) result = classNameCandidate;// fallback so key wont be null
qNameCache.put(classNameCandidate, result);
}
return result;
Expand Down
20 changes: 13 additions & 7 deletions src/main/java/com/intellij/plugins/haxe/util/HaxeResolveUtil.java
Original file line number Diff line number Diff line change
Expand Up @@ -1369,14 +1369,17 @@ public static PsiElement searchInSamePackage(@NotNull HaxeFileModel file, @NotNu
return classModel;
}

public static String getQName(PsiFile file, final String result, boolean searchInSamePackage) {
@Nullable
public static String getQName(PsiFile file, final String name, boolean searchInSamePackage, boolean searchParentPackages, HaxeType targetReference) {



HaxeModule module = PsiTreeUtil.getChildOfType(file, HaxeModule.class);
if (module != null) {
@NotNull PsiElement[] moduleChildren = module.getChildren();
HaxeClass classForType = null;
for (PsiElement child : moduleChildren) {
if (child instanceof HaxeClass && result.equals(((HaxeClass)child).getName())) {
if (child instanceof HaxeClass && name.equals(((HaxeClass)child).getName())) {
classForType = (HaxeClass)child;
break;
}
Expand All @@ -1391,13 +1394,13 @@ public static String getQName(PsiFile file, final String result, boolean searchI
(HaxeImportStatement)(StreamUtil.reverse(Arrays.stream(fileChildren))
.filter(element ->
element instanceof HaxeImportStatement impStatement
&& impStatement.getModel().exposeByName(result) != null)
&& impStatement.getModel().exposeByName(name) != null)
.findFirst()
.orElse(null));

final HaxeExpression importStatementExpression = importStatement == null ? null : importStatement.getReferenceExpression();
if (importStatementExpression != null) {
PsiElement element = importStatement.getModel().exposeByName(result);
PsiElement element = importStatement.getModel().exposeByName(name);
if (element instanceof HaxeClass classModel) {
return classModel.getQualifiedName();
}
Expand All @@ -1410,15 +1413,18 @@ public static String getQName(PsiFile file, final String result, boolean searchI
if (fileModel != null) {
final HaxePackageModel packageModel = fileModel.getPackageModel();
if (packageModel != null) {
final HaxeClassModel classModel = packageModel.getClassModel(result);
final HaxeClassModel classModel = packageModel.getClassModel(name);
if (classModel != null) {
return classModel.haxeClass.getQualifiedName();
}
}
}
}

return result;
if (searchParentPackages && targetReference != null) {
HaxeClass haxeClass = findClassByQNameInSuperPackages(targetReference);
if (haxeClass != null) return haxeClass.getQualifiedName();
}
return null;
}

@Nullable
Expand Down

0 comments on commit d8ea124

Please sign in to comment.