Skip to content

Commit ae4ede8

Browse files
angelozerrfbricon
authored andcommitted
fix: Qute support for multi module project doesn't work
Fixes #1164 Signed-off-by: azerr <azerr@redhat.com>
1 parent d817830 commit ae4ede8

File tree

4 files changed

+49
-16
lines changed

4 files changed

+49
-16
lines changed

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,5 @@ jetBrainsChannel=stable
55
quarkusVersion=3.1.2.Final
66
lsp4mpVersion=0.9.0
77
quarkusLsVersion=0.16.0
8-
quteLsVersion=0.16.0
8+
quteLsVersion=0.17.0-SNAPSHOT
99
kotlin.stdlib.default.dependency = false

src/main/java/com/redhat/devtools/intellij/qute/lsp/QuteLanguageClient.java

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -40,10 +40,7 @@
4040
import org.eclipse.lsp4j.*;
4141
import org.jetbrains.annotations.NotNull;
4242

43-
import java.util.HashSet;
44-
import java.util.List;
45-
import java.util.Objects;
46-
import java.util.Set;
43+
import java.util.*;
4744
import java.util.concurrent.CompletableFuture;
4845
import java.util.stream.Collectors;
4946

@@ -136,6 +133,13 @@ public void sourceFilesChanged(Set<Pair<VirtualFile, Module>> sources) {
136133
}
137134
}
138135

136+
@Override
137+
public CompletableFuture<Collection<ProjectInfo>> getProjects() {
138+
Project project = getProject();
139+
var coalesceBy = new CoalesceByKey("qute/template/projects");
140+
return runAsBackground("Load Qute projects", monitor -> QuteSupportForTemplate.getInstance().getProjects(project, PsiUtilsLSImpl.getInstance(project), monitor), coalesceBy);
141+
}
142+
139143
@Override
140144
public CompletableFuture<ProjectInfo> getProjectInfo(QuteProjectParams params) {
141145
var coalesceBy = new CoalesceByKey("qute/template/project", params.getTemplateFileUri());

src/main/java/com/redhat/devtools/intellij/qute/psi/QuteSupportForTemplate.java

Lines changed: 24 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,12 @@
1212
package com.redhat.devtools.intellij.qute.psi;
1313

1414
import com.intellij.openapi.application.ApplicationManager;
15-
import com.intellij.openapi.module.JavaModuleType;
15+
import com.intellij.openapi.module.*;
1616
import com.intellij.openapi.module.Module;
17-
import com.intellij.openapi.module.ModuleManager;
18-
import com.intellij.openapi.module.ModuleType;
1917
import com.intellij.openapi.progress.ProcessCanceledException;
2018
import com.intellij.openapi.progress.ProgressIndicator;
2119
import com.intellij.openapi.project.IndexNotReadyException;
20+
import com.intellij.openapi.project.Project;
2221
import com.intellij.openapi.util.Computable;
2322
import com.intellij.openapi.vfs.VirtualFile;
2423
import com.intellij.psi.*;
@@ -43,10 +42,7 @@
4342
import org.eclipse.lsp4j.WorkspaceEdit;
4443

4544
import java.io.IOException;
46-
import java.util.Arrays;
47-
import java.util.HashSet;
48-
import java.util.List;
49-
import java.util.Set;
45+
import java.util.*;
5046
import java.util.concurrent.CancellationException;
5147
import java.util.logging.Level;
5248
import java.util.logging.Logger;
@@ -71,6 +67,27 @@ public static QuteSupportForTemplate getInstance() {
7167
return INSTANCE;
7268
}
7369

70+
/**
71+
* Returns the list of Qute projects from the workspace.
72+
*
73+
* @param utils the JDT LS utility.
74+
* @param monitor the progress monitor.
75+
*
76+
* @return the list of Qute projects from the workspace.
77+
*/
78+
public List<ProjectInfo> getProjects(Project project, IPsiUtils utils, ProgressIndicator monitor) {
79+
List<ProjectInfo> quteProjects = new ArrayList<>();
80+
// Loop for module from the given project
81+
Module[] modules = ModuleManager.getInstance(project).getModules();
82+
for (Module javaProject: modules) {
83+
if (PsiQuteProjectUtils.hasQuteSupport(javaProject)) {
84+
// It is a Qute project
85+
quteProjects.add(PsiQuteProjectUtils.getProjectInfo(javaProject));
86+
}
87+
}
88+
return quteProjects;
89+
}
90+
7491
/**
7592
* Returns the project information for the given project Uri.
7693
*
@@ -477,6 +494,4 @@ private PsiClass getTypeFromParams(String typeName, String projectUri,Module jav
477494
return type;
478495
}
479496

480-
481-
482497
}

src/main/java/com/redhat/devtools/intellij/qute/psi/utils/PsiQuteProjectUtils.java

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,20 @@
1212
package com.redhat.devtools.intellij.qute.psi.utils;
1313

1414
import com.intellij.openapi.module.Module;
15+
import com.intellij.openapi.module.ModuleUtilCore;
1516
import com.intellij.openapi.project.Project;
1617
import com.redhat.devtools.intellij.quarkus.QuarkusModuleUtil;
1718
import com.redhat.devtools.intellij.lsp4ij.LSPIJUtils;
1819
import com.redhat.devtools.intellij.qute.psi.internal.QuteJavaConstants;
1920
import com.redhat.qute.commons.ProjectInfo;
2021
import org.jetbrains.annotations.NotNull;
2122

23+
import java.util.Collections;
24+
import java.util.HashSet;
25+
import java.util.List;
26+
import java.util.Set;
27+
import java.util.stream.Collectors;
28+
2229
/**
2330
* JDT Qute utilities.
2431
*
@@ -39,8 +46,15 @@ private PsiQuteProjectUtils() {
3946

4047
public static ProjectInfo getProjectInfo(Module javaProject) {
4148
String projectUri = getProjectURI(javaProject);
42-
String templateBaseDir = LSPIJUtils.toUriAsString(QuarkusModuleUtil.getModuleDirPath(javaProject)) + TEMPLATES_BASE_DIR;
43-
return new ProjectInfo(projectUri, templateBaseDir);
49+
String templateBaseDir = LSPIJUtils.toUri(javaProject).resolve(TEMPLATES_BASE_DIR).toASCIIString();
50+
// Project dependencies
51+
Set<Module> projectDependencies = new HashSet<>();
52+
ModuleUtilCore.getDependencies(javaProject, projectDependencies);
53+
return new ProjectInfo(projectUri, projectDependencies
54+
.stream()
55+
.filter(projectDependency -> !javaProject.equals(projectDependency))
56+
.map(projectDependency -> LSPIJUtils.getProjectUri(projectDependency))
57+
.collect(Collectors.toList()), templateBaseDir);
4458
}
4559

4660
/**

0 commit comments

Comments
 (0)