mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[maven] IDEA-285623 Maven import does not handle annotationProcessorPaths
fixed error handler for transitive resolve GitOrigin-RevId: 9c38777d87edb4b7cdfc190d2c53bc98b9c4de7b
This commit is contained in:
committed by
intellij-monorepo-bot
parent
acabf004fc
commit
51260046c1
+34
@@ -0,0 +1,34 @@
|
||||
/*
|
||||
* Copyright 2000-2009 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.jetbrains.idea.maven.server;
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.idea.maven.model.MavenArtifact;
|
||||
import org.jetbrains.idea.maven.model.MavenProjectProblem;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.List;
|
||||
|
||||
public class MavenArtifactResolveResult implements Serializable {
|
||||
@NotNull public final List<MavenArtifact> mavenResolvedArtifacts;
|
||||
@Nullable public final MavenProjectProblem problem;
|
||||
|
||||
public MavenArtifactResolveResult(@NotNull List<MavenArtifact> artifacts, @Nullable MavenProjectProblem problem) {
|
||||
this.mavenResolvedArtifacts = artifacts;
|
||||
this.problem = problem;
|
||||
}
|
||||
}
|
||||
+10
-1
@@ -65,7 +65,10 @@ public interface MavenServerEmbedder extends Remote {
|
||||
MavenArtifact resolve(@NotNull MavenArtifactInfo info,
|
||||
@NotNull List<MavenRemoteRepository> remoteRepositories, MavenToken token) throws RemoteException,
|
||||
MavenServerProcessCanceledException;
|
||||
|
||||
/**
|
||||
* @deprecated use {@link Maven3XServerEmbedder#resolveArtifactTransitively()}
|
||||
*/
|
||||
@Deprecated
|
||||
@NotNull
|
||||
List<MavenArtifact> resolveTransitively(@NotNull List<MavenArtifactInfo> artifacts,
|
||||
@NotNull List<MavenRemoteRepository> remoteRepositories, MavenToken token) throws
|
||||
@@ -111,4 +114,10 @@ public interface MavenServerEmbedder extends Remote {
|
||||
Map<String, String> resolveAndGetArchetypeDescriptor(@NotNull String groupId, @NotNull String artifactId, @NotNull String version,
|
||||
@NotNull List<MavenRemoteRepository> repositories,
|
||||
@Nullable String url, MavenToken token) throws RemoteException;
|
||||
|
||||
@NotNull
|
||||
MavenArtifactResolveResult resolveArtifactTransitively(
|
||||
@NotNull List<MavenArtifactInfo> artifacts,
|
||||
@NotNull List<MavenRemoteRepository> remoteRepositories,
|
||||
MavenToken token) throws RemoteException;
|
||||
}
|
||||
|
||||
+29
@@ -405,6 +405,35 @@ public final class Maven2ServerEmbedderImpl extends MavenRemoteObject implements
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public MavenArtifactResolveResult resolveArtifactTransitively(@NotNull List<MavenArtifactInfo> artifacts,
|
||||
@NotNull List<MavenRemoteRepository> remoteRepositories,
|
||||
MavenToken token) throws RemoteException {
|
||||
MavenServerUtil.checkToken(token);
|
||||
try {
|
||||
Set<Artifact> toResolve = new LinkedHashSet<Artifact>();
|
||||
for (MavenArtifactInfo each : artifacts) {
|
||||
toResolve.add(createArtifact(each));
|
||||
}
|
||||
|
||||
return new MavenArtifactResolveResult(
|
||||
Maven2ModelConverter.convertArtifacts(myImpl.resolveTransitively(toResolve, convertRepositories(remoteRepositories)),
|
||||
new HashMap<Artifact, MavenArtifact>(), getLocalRepositoryFile())
|
||||
, null);
|
||||
}
|
||||
catch (ArtifactResolutionException e) {
|
||||
Maven2ServerGlobals.getLogger().info(e);
|
||||
}
|
||||
catch (ArtifactNotFoundException e) {
|
||||
Maven2ServerGlobals.getLogger().info(e);
|
||||
}
|
||||
catch (Exception e) {
|
||||
throw rethrowException(e);
|
||||
}
|
||||
return new MavenArtifactResolveResult(Collections.<MavenArtifact>emptyList(), null);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private MavenArtifact doResolve(MavenArtifactInfo info, List<MavenRemoteRepository> remoteRepositories) throws RemoteException {
|
||||
Artifact resolved = doResolve(createArtifact(info), convertRepositories(remoteRepositories));
|
||||
|
||||
+59
@@ -1321,6 +1321,7 @@ public abstract class Maven3XServerEmbedder extends Maven3ServerEmbedder {
|
||||
return doResolve(info, remoteRepositories);
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
@NotNull
|
||||
@Override
|
||||
public List<MavenArtifact> resolveTransitively(@NotNull final List<MavenArtifactInfo> artifacts,
|
||||
@@ -1346,6 +1347,46 @@ public abstract class Maven3XServerEmbedder extends Maven3ServerEmbedder {
|
||||
}
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public MavenArtifactResolveResult resolveArtifactTransitively(
|
||||
@NotNull final List<MavenArtifactInfo> artifacts,
|
||||
@NotNull final List<MavenRemoteRepository> remoteRepositories,
|
||||
MavenToken token) throws RemoteException {
|
||||
MavenServerUtil.checkToken(token);
|
||||
|
||||
try {
|
||||
final MavenExecutionRequest request = createRequest(null, null, null, null);
|
||||
|
||||
final List<MavenArtifact>[] mavenArtifacts = new List[]{null};
|
||||
executeWithMavenSession(request, new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
try {
|
||||
mavenArtifacts[0] = Maven3XServerEmbedder.this.doResolveTransitivelyWithError(artifacts, remoteRepositories);
|
||||
}
|
||||
catch (Exception e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
});
|
||||
return new MavenArtifactResolveResult(mavenArtifacts[0], null);
|
||||
}
|
||||
catch (Exception e) {
|
||||
Maven3ServerGlobals.getLogger().error(e);
|
||||
Artifact transferArtifact = getProblemTransferArtifact(e);
|
||||
String message = getRootMessage(e);
|
||||
MavenProjectProblem problem;
|
||||
if (transferArtifact != null) {
|
||||
MavenArtifact mavenArtifact = MavenModelConverter.convertArtifact(transferArtifact, getLocalRepositoryFile());
|
||||
problem = MavenProjectProblem.createRepositoryProblem("", message, true, mavenArtifact);
|
||||
} else {
|
||||
problem = MavenProjectProblem.createStructureProblem("", message);
|
||||
}
|
||||
return new MavenArtifactResolveResult(Collections.<MavenArtifact>emptyList(), problem);
|
||||
}
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private List<MavenArtifact> doResolveTransitively(@NotNull List<MavenArtifactInfo> artifacts,
|
||||
@NotNull List<MavenRemoteRepository> remoteRepositories) throws RemoteException {
|
||||
@@ -1370,6 +1411,24 @@ public abstract class Maven3XServerEmbedder extends Maven3ServerEmbedder {
|
||||
}
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private List<MavenArtifact> doResolveTransitivelyWithError(@NotNull List<MavenArtifactInfo> artifacts,
|
||||
@NotNull List<MavenRemoteRepository> remoteRepositories)
|
||||
throws RemoteException, ArtifactResolutionException, ArtifactNotFoundException {
|
||||
Set<Artifact> toResolve = new LinkedHashSet<Artifact>();
|
||||
for (MavenArtifactInfo each : artifacts) {
|
||||
toResolve.add(createArtifact(each));
|
||||
}
|
||||
|
||||
Artifact project = getComponent(ArtifactFactory.class).createBuildArtifact("temp", "temp", "666", "pom");
|
||||
|
||||
Set<Artifact> res = getComponent(ArtifactResolver.class)
|
||||
.resolveTransitively(toResolve, project, Collections.EMPTY_MAP, myLocalRepository, convertRepositories(remoteRepositories),
|
||||
getComponent(ArtifactMetadataSource.class)).getArtifacts();
|
||||
|
||||
return MavenModelConverter.convertArtifacts(res, new HashMap<Artifact, MavenArtifact>(), getLocalRepositoryFile());
|
||||
}
|
||||
|
||||
@Override
|
||||
public Collection<MavenArtifact> resolvePlugin(@NotNull final MavenPlugin plugin,
|
||||
@NotNull final List<MavenRemoteRepository> repositories,
|
||||
|
||||
+8
@@ -1028,6 +1028,14 @@ public class Maven30ServerEmbedderImpl extends Maven3ServerEmbedder {
|
||||
}
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public MavenArtifactResolveResult resolveArtifactTransitively(@NotNull List<MavenArtifactInfo> artifacts,
|
||||
@NotNull List<MavenRemoteRepository> remoteRepositories,
|
||||
MavenToken token) throws RemoteException {
|
||||
return new MavenArtifactResolveResult(resolveTransitively(artifacts, remoteRepositories, token), null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Collection<MavenArtifact> resolvePlugin(@NotNull final MavenPlugin plugin,
|
||||
@NotNull final List<MavenRemoteRepository> repositories,
|
||||
|
||||
+8
-3
@@ -11,10 +11,10 @@ import com.intellij.util.containers.ContainerUtil;
|
||||
import org.jdom.Element;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.idea.maven.execution.SyncBundle;
|
||||
import org.jetbrains.idea.maven.model.MavenArtifact;
|
||||
import org.jetbrains.idea.maven.model.MavenArtifactInfo;
|
||||
import org.jetbrains.idea.maven.model.MavenId;
|
||||
import org.jetbrains.idea.maven.project.*;
|
||||
import org.jetbrains.idea.maven.server.MavenArtifactResolveResult;
|
||||
import org.jetbrains.idea.maven.server.MavenEmbedderWrapper;
|
||||
import org.jetbrains.idea.maven.server.NativeMavenProjectHolder;
|
||||
import org.jetbrains.idea.maven.utils.MavenProcessCanceledException;
|
||||
@@ -105,8 +105,13 @@ public class MavenCompilerAnnotationProcessorPathsImporter extends MavenImporter
|
||||
}
|
||||
|
||||
try {
|
||||
List<MavenArtifact> annotationProcessors = embedder.resolveTransitively(externalArtifacts, mavenProject.getRemoteRepositories());
|
||||
mavenProject.addAnnotationProcessors(annotationProcessors);
|
||||
MavenArtifactResolveResult annotationProcessors = embedder
|
||||
.resolveArtifactTransitively(externalArtifacts, mavenProject.getRemoteRepositories());
|
||||
if (annotationProcessors.problem != null) {
|
||||
MavenResolveResultProblemProcessor.notifySyncForProblem(project, annotationProcessors.problem);
|
||||
} else {
|
||||
mavenProject.addAnnotationProcessors(annotationProcessors.mavenResolvedArtifacts);
|
||||
}
|
||||
}
|
||||
catch (Exception e) {
|
||||
String message = e.getMessage() != null ? e.getMessage() : ExceptionUtil.getThrowableText(e);
|
||||
|
||||
+23
-2
@@ -6,6 +6,7 @@ import com.intellij.openapi.project.Project;
|
||||
import org.jetbrains.annotations.ApiStatus;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.idea.maven.buildtool.MavenSyncConsole;
|
||||
import org.jetbrains.idea.maven.execution.SyncBundle;
|
||||
import org.jetbrains.idea.maven.externalSystemIntegration.output.importproject.quickfixes.RepositoryBlockedSyncIssue;
|
||||
import org.jetbrains.idea.maven.model.MavenArtifact;
|
||||
import org.jetbrains.idea.maven.model.MavenProjectProblem;
|
||||
@@ -21,7 +22,7 @@ public class MavenResolveResultProblemProcessor {
|
||||
private static final String BLOCKED_MIRROR_FOR_REPOSITORIES = "Blocked mirror for repositories:";
|
||||
|
||||
public static void notifySyncForProblem(@NotNull Project project,
|
||||
@NotNull MavenResolveResultProblemProcessor.MavenResolveProblemHolder problem) {
|
||||
@NotNull MavenResolveProblemHolder problem) {
|
||||
if (problem.isEmpty()) return;
|
||||
|
||||
MavenSyncConsole syncConsole = MavenProjectsManager.getInstance(project).getSyncConsole();
|
||||
@@ -39,6 +40,26 @@ public class MavenResolveResultProblemProcessor {
|
||||
}
|
||||
}
|
||||
|
||||
public static void notifySyncForProblem(@NotNull Project project, @NotNull MavenProjectProblem problem) {
|
||||
MavenSyncConsole syncConsole = MavenProjectsManager.getInstance(project).getSyncConsole();
|
||||
String message = problem.getDescription();
|
||||
if (message == null) return;
|
||||
|
||||
if (message.contains(BLOCKED_MIRROR_FOR_REPOSITORIES)) {
|
||||
BuildIssue buildIssue = RepositoryBlockedSyncIssue.getIssue(project, problem.getDescription());
|
||||
syncConsole.getListener(MavenServerProgressIndicator.ResolveType.DEPENDENCY)
|
||||
.showBuildIssue(buildIssue.getTitle(), buildIssue);
|
||||
} else if (problem.getMavenArtifact() == null) {
|
||||
MavenProjectsManager.getInstance(project).getSyncConsole()
|
||||
.addWarning(SyncBundle.message("maven.sync.annotation.processor.problem"), message);
|
||||
}
|
||||
|
||||
if (problem.getMavenArtifact() != null) {
|
||||
syncConsole.getListener(MavenServerProgressIndicator.ResolveType.DEPENDENCY)
|
||||
.showArtifactBuildIssue(problem.getMavenArtifact().getMavenId().getKey(), message);
|
||||
}
|
||||
}
|
||||
|
||||
public static void notifyMavenProblems(@NotNull Project project) {
|
||||
MavenProjectsManager projectsManager = MavenProjectsManager.getInstance(project);
|
||||
MavenSyncConsole syncConsole = projectsManager.getSyncConsole();
|
||||
@@ -50,7 +71,7 @@ public class MavenResolveResultProblemProcessor {
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static MavenResolveResultProblemProcessor.MavenResolveProblemHolder getProblems(@NotNull Collection<MavenProjectReaderResult> results) {
|
||||
public static MavenResolveProblemHolder getProblems(@NotNull Collection<MavenProjectReaderResult> results) {
|
||||
Set<MavenProjectProblem> repositoryBlockedProblems = new HashSet<>();
|
||||
Set<MavenProjectProblem> unresolvedArtifactProblems = new HashSet<>();
|
||||
Set<MavenArtifact> unresolvedArtifacts = new HashSet<>();
|
||||
|
||||
+6
@@ -216,6 +216,12 @@ class DummyEmbedder(val myProject: Project) : MavenServerEmbedder {
|
||||
return emptyList()
|
||||
}
|
||||
|
||||
override fun resolveArtifactTransitively(artifacts: MutableList<MavenArtifactInfo>,
|
||||
remoteRepositories: MutableList<MavenRemoteRepository>,
|
||||
token: MavenToken?): MavenArtifactResolveResult {
|
||||
return MavenArtifactResolveResult(emptyList(), null)
|
||||
}
|
||||
|
||||
override fun resolvePlugin(plugin: MavenPlugin,
|
||||
repositories: List<MavenRemoteRepository>,
|
||||
nativeMavenProjectId: Int,
|
||||
|
||||
@@ -227,6 +227,10 @@ public abstract class MavenEmbedderWrapper extends MavenRemoteObjectWrapper<Mave
|
||||
return performCancelable(() -> getOrCreateWrappee().resolve(info, remoteRepositories, ourToken));
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated use {@link MavenEmbedderWrapper#resolveArtifactTransitively()}
|
||||
*/
|
||||
@Deprecated
|
||||
@NotNull
|
||||
public List<MavenArtifact> resolveTransitively(
|
||||
@NotNull final List<MavenArtifactInfo> artifacts,
|
||||
@@ -235,6 +239,13 @@ public abstract class MavenEmbedderWrapper extends MavenRemoteObjectWrapper<Mave
|
||||
return performCancelable(() -> getOrCreateWrappee().resolveTransitively(artifacts, remoteRepositories, ourToken));
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public MavenArtifactResolveResult resolveArtifactTransitively(
|
||||
@NotNull final List<MavenArtifactInfo> artifacts,
|
||||
@NotNull final List<MavenRemoteRepository> remoteRepositories) throws MavenProcessCanceledException {
|
||||
return performCancelable(() -> getOrCreateWrappee().resolveArtifactTransitively(artifacts, remoteRepositories, ourToken));
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public List<String> retrieveVersions(@NotNull final String groupId,
|
||||
@NotNull final String artifactId,
|
||||
|
||||
Reference in New Issue
Block a user