private static ImmutableSet<ResolvedArtifactResult> getArtifacts( Configuration configuration, Spec<ComponentIdentifier> filter, ImmutableList<String> artifactTypes) { ImmutableSet.Builder<ResolvedArtifactResult> artifactResultsBuilder = ImmutableSet.builder(); // We need to individually add these sets to the final set so as to maintain the order. // for eg. All aar artifact should come before jar artifacts. artifactTypes.forEach( artifactType -> artifactResultsBuilder.addAll( getArtifacts(configuration, artifactType, filter) .stream() .filter(it -> !it.getFile().getName().equals("classes.jar")) .collect(Collectors.toSet()))); return artifactResultsBuilder.build(); }
artifacts .stream() .filter(artifact -> canHaveSources(artifact.getFile())) .map(artifact -> artifact.getId().getComponentIdentifier()) .collect(Collectors.toSet()); .withArtifacts(JvmLibrary.class, artifactTypesArray) .execute() .getResolvedComponents(); .map(artifactsResult -> artifactsResult.getArtifacts(type)) .flatMap(Set::stream) .filter(artifactResult -> artifactResult instanceof ResolvedArtifactResult) .map(artifactResult -> (ResolvedArtifactResult) artifactResult) .filter(artifactResult -> FileUtil.isZipFile(artifactResult.getFile())) .collect( Collectors.toMap( resolvedArtifact -> resolvedArtifact.getId().getComponentIdentifier(), resolvedArtifact -> resolvedArtifact));
private Set<String> getCompileArtifactsForAgp2x() { Set<String> compileLibs = new HashSet<>(); Configuration configuration = project.getConfigurations().getByName("compile"); if (configuration.isCanBeResolved()) { ResolvableDependencies incoming = configuration.getIncoming(); ResolutionResult resolutionResult = incoming.getResolutionResult(); Set<ResolvedComponentResult> components = resolutionResult.getAllComponents(); for (ResolvedComponentResult result : components) { ModuleVersionIdentifier identifier = result.getModuleVersion(); if (identifier != null && !"unspecified".equals(identifier.getVersion())) { compileLibs.add( String.join(":", identifier.getGroup(), identifier.getName(), identifier.getVersion())); } } } return compileLibs; }
for (DependencyResult depResult : config.getIncoming().getResolutionResult().getAllDependencies()) idMap.put(depResult.getFrom().getId(), depResult.getFrom().getModuleVersion()); .execute(); for (ComponentArtifactsResult comp : result.getResolvedComponents()) ModuleVersionIdentifier module = idMap.get(comp.getId()); String group = "deobf." + module.getGroup(); for (ArtifactResult art : comp.getArtifacts(SourcesArtifact.class)) remap.setInJar(((ResolvedArtifactResult) art).getFile()); remap.setOutJar(getFile(DIR_DEOBF_DEPS, group, module.getName(), module.getVersion(), "sources")); remap.setFieldsCsv(delayedFile(CSV_FIELD));
Set<ComponentIdentifier> seen, Set<ResolvedComponentResult> dependencies) { for (DependencyResult d : root.getDependencies()) { if (!(d instanceof ResolvedDependencyResult)) { throw new GradleException("Unresolved dependency found for " + d.toString()); ResolvedComponentResult component = ((ResolvedDependencyResult) d).getSelected(); ComponentIdentifier id = component.getId();
ResolutionResult resolutionResult = resolvableDependencies.getResolutionResult(); for (DependencyResult depResult : resolutionResult.getAllDependencies()) { ArtifactVersion fromDep; if (depResult.getFrom() == null || "".equals(depResult.getFrom().getId().getDisplayName())) { String depFromString = ("" + depResult.getFrom().getId().getDisplayName()); if (depFromString.startsWith("project ")) { if (depResult.getRequested() == null) { String toDepString = "" + depResult.getRequested(); try { toDep = ArtifactVersion.Companion.fromGradleRef(toDepString);
@Override public void execute(DependencyResult result) { if (result instanceof ResolvedDependencyResult) { ResolvedDependencyResult resolvedResult = (ResolvedDependencyResult) result; ComponentSelector requested = resolvedResult.getRequested(); if (requested instanceof ModuleComponentSelector) { ModuleComponentSelector requestedSelector = (ModuleComponentSelector) requested; String requestedVersion = requestedSelector.getVersion(); ComponentIdentifier selected = resolvedResult.getSelected().getId(); if (selected instanceof ProjectComponentIdentifier) { ProjectComponentIdentifier selectedProjectComponent = (ProjectComponentIdentifier) selected; ProjectInternal selectedProject = projectFinder.getProject(selectedProjectComponent.getProjectPath()); Object selectedVersionObject = selectedProject.getVersion(); if (selectedVersionObject != null) { String selectedVersion = selectedVersionObject.toString(); if (!matchVersion(requestedVersion, selectedVersion)) { String conflict = String.format("Configuration \"%s\" in project \"%s\" requests version %s of project \"%s\", but its current version (%s) does not fulfill that request", configuration.getName(), getProject().getPath(), requestedVersion, selectedProject.getPath(), selectedVersion); versionConflicts.add(conflict); } } } } } } });
static Set<String> getResolvedModuleIdentifiers(Project project) { return project.getConfigurations().stream() .filter(Configuration::isCanBeResolved) .flatMap(configuration -> { try { ResolutionResult resolutionResult = configuration.getIncoming().getResolutionResult(); return resolutionResult .getAllComponents() .stream() .map(result -> result.getId()) .filter(cid -> !cid.equals(resolutionResult.getRoot().getId())) // remove the project .filter(cid -> cid instanceof ModuleComponentIdentifier) .map(mcid -> ((ModuleComponentIdentifier) mcid).getModuleIdentifier()) .map(mid -> mid.getGroup() + ":" + mid.getName()); } catch (Exception e) { throw new RuntimeException(String.format("Error during resolution of the dependency graph of " + "configuration %s", configuration), e); } }) .collect(Collectors.toSet()); } }
@Override public void execute(DependencyResult dependencyResult) { if (dependencyResult instanceof ResolvedDependencyResult) { ResolvedDependencyResult resolved = (ResolvedDependencyResult) dependencyResult; excludedDependencies.add(new DependencyCandidate(resolved.getSelected() .getModuleVersion().getGroup(), resolved.getSelected() .getModuleVersion().getName())); } else if (dependencyResult instanceof UnresolvedDependencyResult) { DependencyCandidate dependencyCandidate = toDependencyCandidate((UnresolvedDependencyResult) dependencyResult); if (dependencyCandidate != null) { excludedDependencies.add(dependencyCandidate); } } } });
/** * Collects configuration dependencies in post-order. * * @param configuration Gradle configuration to work with * @return set of resolved dependencies in post-order */ public static Set<ResolvedComponentResult> configurationPostOrderDependencies(Configuration configuration) { ResolvedComponentResult root = configuration.getIncoming().getResolutionResult().getRoot(); Set<ResolvedComponentResult> dependencies = new LinkedHashSet<>(); Set<ComponentIdentifier> seen = new HashSet<>(); postOrderDependencies(root, seen, dependencies); return dependencies; }
if (!DependencyUtils.isConsumable(artifact.getFile())) { return; (ProjectComponentIdentifier) artifact.getId().getComponentIdentifier(); VariantAttr variantAttr = artifact.getVariant().getAttributes().getAttribute(VariantAttr.ATTRIBUTE); String variant = variantAttr == null ? null : variantAttr.getName(); aarOrJarArtifacts .stream() .filter(artifact -> DependencyUtils.isConsumable(artifact.getFile())) .collect(Collectors.toSet()); ComponentIdentifier identifier = artifact.getId().getComponentIdentifier(); ResolvedArtifactResult sourcesArtifact = componentIdToSourcesArtifactMap.get(identifier); moduleIdentifier.getModule(), moduleIdentifier.getVersion(), artifact.getFile(), sourcesArtifact != null ? sourcesArtifact.getFile() : null, externalDependenciesExtension, jetifierExtension); } else { String rootProjectPath = project.getRootProject().getProjectDir().getAbsolutePath(); String artifactPath = artifact.getFile().getAbsolutePath(); && !DependencyUtils.isWhiteListed(artifact.getFile())) {
private String getId(ResolvedComponentResult component) { return component.getModuleVersion().getGroup() + ":" + component.getModuleVersion() .getName(); }
private void handleResolvedDependency(ResolvedDependencyResult dependency, Node node, Map<String, Exclusions> pomExclusionsById, LinkedList<Node> queue, Set<ResolvedComponentResult> seen) { ResolvedComponentResult child = dependency .getSelected(); String childId = getId(child); if (!node.excluded(childId) && seen.add(child)) { queue.add(new Node(child, childId, getChildExclusions(node, childId, pomExclusionsById))); } }
.filter( artifact -> !(artifact.getId().getComponentIdentifier() instanceof ProjectComponentIdentifier)) .filter(artifact -> DependencyUtils.isConsumable(artifact.getFile())) .collect(Collectors.toSet()); .map( artifact -> { ComponentIdentifier identifier = artifact.getId().getComponentIdentifier(); ResolvedArtifactResult sourcesArtifact = componentIdToSourcesArtifactMap.get(identifier); moduleIdentifier.getModule(), moduleIdentifier.getVersion(), artifact.getFile(), sourcesArtifact != null ? sourcesArtifact.getFile() : null, externalDependenciesExtension, jetifierExtension); } else { return DependencyFactory.fromLocal( artifact.getFile(), sourcesArtifact != null ? sourcesArtifact.getFile() : null, externalDependenciesExtension, jetifierExtension);
private DependencyCandidate toDependencyCandidate( UnresolvedDependencyResult unresolved) { ComponentSelector attemptedSelector = unresolved.getAttempted(); if (!(attemptedSelector instanceof ModuleComponentSelector)) { return null; } ModuleComponentSelector attemptedModuleSelector = (ModuleComponentSelector) attemptedSelector; return new DependencyCandidate(attemptedModuleSelector .getGroup(), attemptedModuleSelector.getModule()); }
@Nullable public static String findVersionInClasspath(Project project, String group, String module) { return project .getBuildscript() .getConfigurations() .getByName("classpath") .getIncoming() .getArtifacts() .getArtifacts() .stream() .flatMap( artifactResult -> artifactResult.getId().getComponentIdentifier() instanceof ModuleComponentIdentifier ? Stream.of( (ModuleComponentIdentifier) artifactResult.getId().getComponentIdentifier()) : Stream.empty()) .filter( identifier -> (group.equals(identifier.getGroup()) && module.equals(identifier.getModule()))) .findFirst() .map(ModuleComponentIdentifier::getVersion) .orElse(null); }
Set<ComponentIdentifier> seen, Set<ResolvedComponentResult> dependencies) { for (DependencyResult d : root.getDependencies()) { if (!(d instanceof ResolvedDependencyResult)) { throw new GradleException("Unresolved dependency found for " + d.toString()); ResolvedComponentResult component = ((ResolvedDependencyResult) d).getSelected(); ComponentIdentifier id = component.getId();
ResolutionResult resolutionResult = resolvableDependencies.getResolutionResult(); for (DependencyResult depResult : resolutionResult.getAllDependencies()) { ArtifactVersion fromDep; if (depResult.getFrom() == null || "".equals(depResult.getFrom().getId().getDisplayName())) { String depFromString = ("" + depResult.getFrom().getId().getDisplayName()); if (depFromString.startsWith("project ")) { if (depResult.getRequested() == null) { String toDepString = "" + depResult.getRequested(); try { toDep = ArtifactVersion.Companion.fromGradleRef(toDepString);
@Override public void execute(DependencyResult result) { if (result instanceof ResolvedDependencyResult) { ResolvedDependencyResult resolvedResult = (ResolvedDependencyResult) result; ComponentSelector requested = resolvedResult.getRequested(); if (requested instanceof ModuleComponentSelector) { ModuleComponentSelector requestedSelector = (ModuleComponentSelector) requested; String requestedVersion = requestedSelector.getVersion(); ComponentIdentifier selected = resolvedResult.getSelected().getId(); if (selected instanceof ProjectComponentIdentifier) { ProjectComponentIdentifier selectedProjectComponent = (ProjectComponentIdentifier) selected; ProjectInternal selectedProject = projectFinder.getProject(selectedProjectComponent.getProjectPath()); Object selectedVersionObject = selectedProject.getVersion(); if (selectedVersionObject != null) { String selectedVersion = selectedVersionObject.toString(); if (!matchVersion(requestedVersion, selectedVersion)) { String conflict = String.format("Configuration \"%s\" in project \"%s\" requests version %s of project \"%s\", but its current version (%s) does not fulfill that request", configuration.getName(), getProject().getPath(), requestedVersion, selectedProject.getPath(), selectedVersion); versionConflicts.add(conflict); } } } } } } });
/** * Collects configuration dependencies in post-order. * * @param configuration Gradle configuration to work with * @return set of resolved dependencies in post-order */ public static Set<ResolvedComponentResult> configurationPostOrderDependencies(Configuration configuration) { ResolvedComponentResult root = configuration.getIncoming().getResolutionResult().getRoot(); Set<ResolvedComponentResult> dependencies = new LinkedHashSet<>(); Set<ComponentIdentifier> seen = new HashSet<>(); postOrderDependencies(root, seen, dependencies); return dependencies; }