Skip to content

Commit

Permalink
fix: don't leak deployment jar classes
Browse files Browse the repository at this point in the history
Signed-off-by: Fred Bricon <[email protected]>
  • Loading branch information
fbricon committed Aug 4, 2023
1 parent cfa3f27 commit d2c42ac
Show file tree
Hide file tree
Showing 7 changed files with 60 additions and 33 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,6 @@ public MicroProfileProjectInfo getMicroProfileProjectInfo(Module module,
.collect(Collectors.joining("+")) //
+ "'");
long startTime = System.currentTimeMillis();
boolean excludeTestCode = classpathKind == ClasspathKind.SRC;
PropertiesCollector collector = new PropertiesCollector(info, scopes);
if (module != null) {
SearchScope scope = createSearchScope(module, scopes, classpathKind == ClasspathKind.TEST);
Expand Down Expand Up @@ -153,17 +152,17 @@ private static MicroProfileProjectInfo createInfo(Module module, ClasspathKind c
return info;
}

private SearchScope createSearchScope(Module module, List<MicroProfilePropertiesScope> scopes,
private SearchScope createSearchScope(@NotNull Module module, List<MicroProfilePropertiesScope> scopes,
boolean excludeTestCode) {
SearchScope searchScope = GlobalSearchScope.EMPTY_SCOPE;
SearchScope searchScope = GlobalSearchScope.moduleRuntimeScope(module, !excludeTestCode);

for (MicroProfilePropertiesScope scope : scopes) {
switch (scope) {
case sources:
searchScope = module != null ? searchScope.union(module.getModuleScope(!excludeTestCode)) : searchScope;
searchScope = searchScope.union(module.getModuleScope(!excludeTestCode));
break;
case dependencies:
searchScope = module != null ? searchScope.union(module.getModuleWithLibrariesScope()) : searchScope;
searchScope = searchScope.union(module.getModuleWithLibrariesScope());
break;
/*added missing default case */
default:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -118,8 +118,7 @@ public Integer getPropertyAsInteger(String key, Integer defaultValue) {
return defaultValue;
}
try {
int intValue = Integer.parseInt(value);
return intValue;
return Integer.parseInt(value);
} catch (NumberFormatException nfe) {
return defaultValue;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,7 @@ private static void addLibrary(ModifiableRootModel model, List<VirtualFile>[] fi

LibraryOrderEntry entry = model.findLibraryOrderEntry(library);
assert entry != null : library;
entry.setScope(DependencyScope.PROVIDED);
entry.setScope(DependencyScope.RUNTIME);
entry.setExported(false);
ApplicationManager.getApplication().invokeAndWait(() -> {
WriteAction.run(libraryModel::commit);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,17 +62,6 @@ public QuarkusProjectService(Project project) {
connection = project.getMessageBus().connect();
connection.subscribe(ClasspathResourceChangedManager.TOPIC, this);
connection.subscribe(ProjectTopics.MODULES, this);
// Add the Quarkus deployment preprocessor
ClasspathResourceChangedManager.getInstance(project)
.addPreprocessor(
(progressIndicator) -> {
processModules(progressIndicator);
});
}

@Override
public void moduleAdded(@NotNull Project project, @NotNull Module module) {
QuarkusModuleUtil.ensureQuarkusLibrary(module, new EmptyProgressIndicator());
}

public VirtualFile getSchema(Module module) {
Expand Down Expand Up @@ -138,10 +127,10 @@ public void sourceFilesChanged(Set<com.intellij.openapi.util.Pair<VirtualFile, M
}

public void processModules(com.intellij.openapi.progress.ProgressIndicator progressIndicator) {
for (var module : ModuleManager.getInstance(project).getModules()) {
LOGGER.info("Calling ensure from processModules");
QuarkusModuleUtil.ensureQuarkusLibrary(module, progressIndicator);
}
// for (var module : ModuleManager.getInstance(project).getModules()) {
// LOGGER.info("Calling ensure from processModules");
// QuarkusModuleUtil.ensureQuarkusLibrary(module, progressIndicator);
// }
}


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,11 @@
******************************************************************************/
package com.redhat.devtools.intellij.quarkus.lang;

import com.intellij.codeInspection.unused.ImplicitPropertyUsageProvider;
import com.intellij.lang.properties.codeInspection.unused.ImplicitPropertyUsageProvider;
import com.intellij.lang.properties.psi.Property;
import com.redhat.devtools.intellij.quarkus.QuarkusModuleUtil;

public class QuarkusImplicitPropertyUsageProvider extends ImplicitPropertyUsageProvider {
public class QuarkusImplicitPropertyUsageProvider implements ImplicitPropertyUsageProvider {
@Override
public boolean isUsed(Property property) {
return QuarkusModuleUtil.isQuarkusPropertiesFile(property.getContainingFile().getVirtualFile(), property.getProject());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,16 @@
package com.redhat.devtools.intellij.quarkus.lsp;

import com.intellij.openapi.module.Module;
import com.intellij.openapi.progress.ProgressIndicator;
import com.intellij.openapi.progress.ProgressManager;
import com.intellij.openapi.progress.Task;
import com.intellij.openapi.project.DumbService;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Pair;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.util.messages.MessageBusConnection;
import com.redhat.devtools.intellij.lsp4ij.client.IndexAwareLanguageClient;
import com.redhat.devtools.intellij.lsp4mp4ij.classpath.ClasspathResourceChangedManager;
import com.redhat.devtools.intellij.lsp4mp4ij.psi.core.ProjectLabelManager;
import com.redhat.devtools.intellij.lsp4mp4ij.psi.core.PropertiesManager;
import com.redhat.devtools.intellij.lsp4mp4ij.psi.core.PropertiesManagerForJava;
Expand All @@ -23,15 +29,15 @@
import com.redhat.devtools.intellij.lsp4mp4ij.psi.internal.core.ls.PsiUtilsLSImpl;
import com.redhat.devtools.intellij.lsp4mp4ij.settings.UserDefinedMicroProfileSettings;
import com.redhat.devtools.intellij.quarkus.QuarkusModuleUtil;
import com.redhat.devtools.intellij.lsp4ij.client.IndexAwareLanguageClient;
import com.redhat.devtools.intellij.lsp4mp4ij.classpath.ClasspathResourceChangedManager;
import org.eclipse.lsp4j.*;
import org.eclipse.lsp4mp.commons.*;
import org.eclipse.lsp4mp.commons.codeaction.CodeActionResolveData;
import org.eclipse.lsp4mp.commons.utils.JSONUtility;
import org.eclipse.lsp4mp.ls.api.MicroProfileLanguageClientAPI;
import org.eclipse.lsp4mp.ls.api.MicroProfileLanguageServerAPI;
import org.jetbrains.annotations.NotNull;

import java.io.IOException;
import java.util.Collections;
import java.util.List;
import java.util.Set;
Expand Down Expand Up @@ -91,7 +97,7 @@ public void sourceFilesChanged(Set<Pair<VirtualFile, Module>> sources) {
List<Pair<String, MicroProfilePropertiesScope>> info = sources.stream()
.filter(pair -> isJavaFile(pair.getFirst()) || isConfigSource(pair.getFirst()))
.map(pair -> Pair.pair(PsiUtilsLSImpl.getProjectURI(pair.getSecond()), getScope(pair.getFirst()))).
collect(Collectors.toList());
collect(Collectors.toList());
if (!info.isEmpty()) {
sendPropertiesChangeEvent(info.stream().map(p -> p.getSecond()).collect(Collectors.toList()),
info.stream().map(p -> p.getFirst()).collect(Collectors.toSet()));
Expand All @@ -112,10 +118,39 @@ private boolean isConfigSource(VirtualFile file) {

@Override
public CompletableFuture<MicroProfileProjectInfo> getProjectInfo(MicroProfileProjectInfoParams params) {
String filePath = getFilePath(params.getUri());
return runAsBackground("Computing MicroProfile properties for '" + filePath + "'.", monitor ->
PropertiesManager.getInstance().getMicroProfileProjectInfo(params, PsiUtilsLSImpl.getInstance(getProject()), monitor)
);
CompletableFuture<Boolean> future = new CompletableFuture<>();
CompletableFuture.runAsync(() -> {
Runnable task = () -> ProgressManager.getInstance().run(new Task.Backgroundable(getProject(), "Computing deployment jars...") {
@Override
public void run(@NotNull ProgressIndicator indicator) {
IPsiUtils utils = PsiUtilsLSImpl.getInstance(getProject());
try {
VirtualFile file = utils.findFile(params.getUri());
Module module = utils.getModule(file);
QuarkusModuleUtil.ensureQuarkusLibrary(module, indicator);
future.complete(true);
} catch (Exception e) {
future.completeExceptionally(e);
}
}

@Override
public boolean isHeadless() {
return true;
}
});
if (DumbService.getInstance(getProject()).isDumb()) {
DumbService.getInstance(getProject()).runWhenSmart(task);
} else {
task.run();
}
});
return future.thenCompose(Boolean -> {
String filePath = getFilePath(params.getUri());
return runAsBackground("Computing MicroProfile properties for '" + filePath + "'.", monitor ->
PropertiesManager.getInstance().getMicroProfileProjectInfo(params, PsiUtilsLSImpl.getInstance(getProject()), monitor)
);
});
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -162,17 +162,22 @@ private List<MavenArtifact> ensureDownloaded(Module module, MavenProject mavenPr
long start = System.currentTimeMillis();
try {
MavenEmbedderWrapper serverWrapper = createEmbedderWrapper(module.getProject(), mavenProject.getDirectory());
if (serverWrapper == null) {
return Collections.emptyList();
}
if (classifier != null) {
for(MavenId id : deploymentIds) {
result.add(serverWrapper.resolve(new MavenArtifactInfo(id, "jar", classifier), mavenProject.getRemoteRepositories()));
}
} else {
List<MavenArtifactInfo> infos = deploymentIds.stream().map(id -> new MavenArtifactInfo(id, "jar", classifier)).collect(Collectors.toList());
result = serverWrapper.resolveTransitively(infos, mavenProject.getRemoteRepositories());
result = serverWrapper.resolveArtifactTransitively(infos, mavenProject.getRemoteRepositories()).mavenResolvedArtifacts;
}
} catch (MavenProcessCanceledException | RuntimeException e) {
LOGGER.warn(e.getLocalizedMessage(), e);
}
long elapsed = System.currentTimeMillis() - start;
System.out.println("ensureDownloaded took "+elapsed+ "ms");
return result;
}

Expand Down

0 comments on commit d2c42ac

Please sign in to comment.