mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-177683 Gradle import uses wrong source/javadoc artifact for dependencies with multiple artifacts
This commit is contained in:
+63
@@ -1243,6 +1243,69 @@ public class GradleDependenciesImportingTest extends GradleImportingTestCase {
|
||||
assertModuleLibDepScope("project2_test", "Gradle: org.hamcrest:hamcrest-core:1.3", DependencyScope.COMPILE);
|
||||
}
|
||||
|
||||
@TargetVersions("2.0+")
|
||||
@Test
|
||||
public void testJavadocAndSourcesForDependencyWithMultipleArtifacts() throws Exception {
|
||||
createProjectSubFile("repo/depGroup/depArtifact/1.0-SNAPSHOT/ivy-1.0-SNAPSHOT.xml",
|
||||
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
|
||||
"<ivy-module version=\"2.0\" xmlns:m=\"http://ant.apache.org/ivy/maven\">\n" +
|
||||
" <info organisation=\"depGroup\" module=\"depArtifact\" revision=\"1.0-SNAPSHOT\" status=\"integration\" publication=\"20170817121528\"/>\n" +
|
||||
" <configurations>\n" +
|
||||
" <conf name=\"compile\" visibility=\"public\"/>\n" +
|
||||
" <conf name=\"default\" visibility=\"public\" extends=\"compile\"/>\n" +
|
||||
" <conf name=\"sources\" visibility=\"public\"/>\n" +
|
||||
" <conf name=\"javadoc\" visibility=\"public\"/>\n" +
|
||||
" </configurations>\n" +
|
||||
" <publications>\n" +
|
||||
" <artifact name=\"depArtifact\" type=\"jar\" ext=\"jar\" conf=\"compile\"/>\n" +
|
||||
" <artifact name=\"depArtifact-api\" type=\"javadoc\" ext=\"jar\" conf=\"javadoc\" m:classifier=\"javadoc\"/>\n" +
|
||||
" <artifact name=\"depArtifact-api\" type=\"source\" ext=\"jar\" conf=\"sources\" m:classifier=\"sources\"/>\n" +
|
||||
" <artifact name=\"depArtifact\" type=\"source\" ext=\"jar\" conf=\"sources\" m:classifier=\"sources\"/>\n" +
|
||||
" <artifact name=\"depArtifact\" type=\"javadoc\" ext=\"jar\" conf=\"javadoc\" m:classifier=\"javadoc\"/>\n" +
|
||||
" </publications>\n" +
|
||||
" <dependencies/>\n" +
|
||||
"</ivy-module>\n");
|
||||
VirtualFile classesJar = createProjectJarSubFile("repo/depGroup/depArtifact/1.0-SNAPSHOT/depArtifact-1.0-SNAPSHOT.jar");
|
||||
VirtualFile javadocJar = createProjectJarSubFile("repo/depGroup/depArtifact/1.0-SNAPSHOT/depArtifact-1.0-SNAPSHOT-javadoc.jar");
|
||||
VirtualFile sourcesJar = createProjectJarSubFile("repo/depGroup/depArtifact/1.0-SNAPSHOT/depArtifact-1.0-SNAPSHOT-sources.jar");
|
||||
createProjectJarSubFile("repo/depGroup/depArtifact/1.0-SNAPSHOT/depArtifact-api-1.0-SNAPSHOT.jar");
|
||||
createProjectJarSubFile("repo/depGroup/depArtifact/1.0-SNAPSHOT/depArtifact-api-1.0-SNAPSHOT-javadoc.jar");
|
||||
createProjectJarSubFile("repo/depGroup/depArtifact/1.0-SNAPSHOT/depArtifact-api-1.0-SNAPSHOT-sources.jar");
|
||||
|
||||
importProject(
|
||||
"apply plugin: 'java'\n" +
|
||||
"\n" +
|
||||
"repositories {\n" +
|
||||
" ivy { url file('repo') }\n" +
|
||||
"}\n" +
|
||||
"\n" +
|
||||
"dependencies {\n" +
|
||||
" compile 'depGroup:depArtifact:1.0-SNAPSHOT'\n" +
|
||||
"}\n" +
|
||||
"apply plugin: 'idea'\n" +
|
||||
"idea.module.downloadJavadoc true"
|
||||
);
|
||||
|
||||
assertModules("project", "project_main", "project_test");
|
||||
|
||||
assertModuleModuleDepScope("project_test", "project_main", DependencyScope.COMPILE);
|
||||
|
||||
final String depName = "Gradle: depGroup:depArtifact:1.0-SNAPSHOT";
|
||||
assertModuleLibDep("project_main", depName, classesJar.getUrl(), sourcesJar.getUrl(), javadocJar.getUrl());
|
||||
assertModuleLibDepScope("project_main", depName, DependencyScope.COMPILE);
|
||||
assertModuleLibDep("project_test", depName, classesJar.getUrl(), sourcesJar.getUrl(), javadocJar.getUrl());
|
||||
assertModuleLibDepScope("project_test", depName, DependencyScope.COMPILE);
|
||||
|
||||
importProjectUsingSingeModulePerGradleProject();
|
||||
assertModules("project");
|
||||
|
||||
// Gradle built-in models has been fixed since 2.3 version, https://issues.gradle.org/browse/GRADLE-3170
|
||||
if(GradleVersion.version(gradleVersion).compareTo(GradleVersion.version("2.3")) >= 0) {
|
||||
assertModuleLibDep("project", depName, classesJar.getUrl(), sourcesJar.getUrl(), javadocJar.getUrl());
|
||||
}
|
||||
assertMergedModuleCompileLibDepScope("project", depName);
|
||||
}
|
||||
|
||||
private void assertMergedModuleCompileLibDepScope(String moduleName, String depName) {
|
||||
if (isGradleOlderThen_3_4()) {
|
||||
assertModuleLibDepScope(moduleName, depName, DependencyScope.COMPILE);
|
||||
|
||||
+25
-15
@@ -19,11 +19,11 @@ package org.jetbrains.plugins.gradle.tooling.util;
|
||||
|
||||
import com.google.common.base.Function;
|
||||
import com.google.common.base.Predicate;
|
||||
import com.google.common.base.Predicates;
|
||||
import com.google.common.collect.ArrayListMultimap;
|
||||
import com.google.common.collect.Lists;
|
||||
import com.google.common.collect.Multimap;
|
||||
import com.google.common.collect.Sets;
|
||||
import com.google.common.io.Files;
|
||||
import groovy.lang.MetaMethod;
|
||||
import groovy.lang.MetaProperty;
|
||||
import org.codehaus.groovy.runtime.DefaultGroovyMethods;
|
||||
@@ -65,7 +65,6 @@ import java.util.regex.Pattern;
|
||||
import static com.google.common.base.Predicates.isNull;
|
||||
import static com.google.common.base.Predicates.not;
|
||||
import static com.google.common.collect.Iterables.filter;
|
||||
import static com.google.common.collect.Iterables.find;
|
||||
import static org.codehaus.groovy.runtime.StringGroovyMethods.capitalize;
|
||||
|
||||
/**
|
||||
@@ -1181,21 +1180,14 @@ public class DependencyResolverImpl implements DependencyResolver {
|
||||
|
||||
ComponentArtifactsResult artifactsResult = componentResultsMap.get(componentIdentifier);
|
||||
if (artifactsResult != null) {
|
||||
final Set<ArtifactResult> sourceArtifacts = artifactsResult.getArtifacts(SourcesArtifact.class);
|
||||
ResolvedArtifactResult sourcesResult = sourceArtifacts != null && !sourceArtifacts.isEmpty()
|
||||
? (ResolvedArtifactResult)find(sourceArtifacts, Predicates.instanceOf(ResolvedArtifactResult.class))
|
||||
: null;
|
||||
if (sourcesResult != null) {
|
||||
((DefaultExternalLibraryDependency)dependency).setSource(sourcesResult.getFile());
|
||||
ArtifactResult sourcesResult = findMatchingArtifact(artifact, artifactsResult, SourcesArtifact.class);
|
||||
if (sourcesResult instanceof ResolvedArtifactResult) {
|
||||
((DefaultExternalLibraryDependency)dependency).setSource(((ResolvedArtifactResult)sourcesResult).getFile());
|
||||
}
|
||||
|
||||
|
||||
final Set<ArtifactResult> javadocArtifacts = artifactsResult.getArtifacts(JavadocArtifact.class);
|
||||
ResolvedArtifactResult javadocResult = javadocArtifacts != null && !javadocArtifacts.isEmpty()
|
||||
? (ResolvedArtifactResult)find(javadocArtifacts, Predicates.instanceOf(ResolvedArtifactResult.class))
|
||||
: null;
|
||||
if (javadocResult != null) {
|
||||
((DefaultExternalLibraryDependency)dependency).setJavadoc(javadocResult.getFile());
|
||||
ArtifactResult javadocResult = findMatchingArtifact(artifact, artifactsResult, JavadocArtifact.class);
|
||||
if (javadocResult instanceof ResolvedArtifactResult) {
|
||||
((DefaultExternalLibraryDependency)dependency).setJavadoc(((ResolvedArtifactResult)javadocResult).getFile());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1235,6 +1227,24 @@ public class DependencyResolverImpl implements DependencyResolver {
|
||||
}
|
||||
}
|
||||
|
||||
private static ArtifactResult findMatchingArtifact(ResolvedArtifact artifact,
|
||||
ComponentArtifactsResult componentArtifacts,
|
||||
Class<? extends Artifact> artifactType) {
|
||||
String baseName = Files.getNameWithoutExtension(artifact.getFile().getName());
|
||||
Set<ArtifactResult> artifactResults = componentArtifacts.getArtifacts(artifactType);
|
||||
|
||||
if (artifactResults.size() == 1) {
|
||||
return artifactResults.iterator().next();
|
||||
}
|
||||
|
||||
for (ArtifactResult result : artifactResults) {
|
||||
if (result instanceof ResolvedArtifactResult && ((ResolvedArtifactResult)result).getFile().getName().startsWith(baseName)) {
|
||||
return result;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private static boolean isProjectDependencyArtifact(ResolvedArtifact artifact) {
|
||||
return isDependencySubstitutionsSupported && artifact.getId().getComponentIdentifier() instanceof ProjectComponentIdentifier;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user