/* * Copyright 2016 the original author or authors. * * 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.gradle.plugins.ide.eclipse.model.internal; import com.google.common.collect.Lists; import org.gradle.api.artifacts.ModuleVersionIdentifier; import org.gradle.composite.internal.CompositeBuildIdeProjectResolver; import org.gradle.api.internal.project.ProjectInternal; import org.gradle.internal.service.ServiceRegistry; import org.gradle.plugins.ide.eclipse.model.AbstractClasspathEntry; import org.gradle.plugins.ide.eclipse.model.AbstractLibrary; import org.gradle.plugins.ide.eclipse.model.EclipseClasspath; import org.gradle.plugins.ide.eclipse.model.FileReference; import org.gradle.plugins.ide.eclipse.model.Library; import org.gradle.plugins.ide.eclipse.model.Variable; import org.gradle.plugins.ide.internal.IdeDependenciesExtractor; import org.gradle.plugins.ide.internal.resolver.model.IdeExtendedRepoFileDependency; import org.gradle.plugins.ide.internal.resolver.model.IdeLocalFileDependency; import org.gradle.plugins.ide.internal.resolver.model.IdeProjectDependency; import org.gradle.plugins.ide.internal.resolver.model.UnresolvedIdeRepoFileDependency; import java.io.File; import java.util.ArrayList; import java.util.Collection; import java.util.List; public class EclipseDependenciesCreator { private final IdeDependenciesExtractor dependenciesExtractor; private final EclipseClasspath classpath; private final ProjectDependencyBuilder projectDependencyBuilder; public EclipseDependenciesCreator(EclipseClasspath classpath) { this.dependenciesExtractor = new IdeDependenciesExtractor(); this.classpath = classpath; ServiceRegistry serviceRegistry = ((ProjectInternal) classpath.getProject()).getServices(); this.projectDependencyBuilder = new ProjectDependencyBuilder(CompositeBuildIdeProjectResolver.from(serviceRegistry)); } public List<AbstractClasspathEntry> createDependencyEntries() { List<AbstractClasspathEntry> result = Lists.newArrayList(); result.addAll(createProjectDependencies()); if (!classpath.isProjectDependenciesOnly()) { result.addAll(createLibraryDependencies()); } return result; } public Collection<UnresolvedIdeRepoFileDependency> unresolvedExternalDependencies() { return dependenciesExtractor.unresolvedExternalDependencies(classpath.getPlusConfigurations(), classpath.getMinusConfigurations()); } private List<AbstractClasspathEntry> createProjectDependencies() { ArrayList<AbstractClasspathEntry> projects = Lists.newArrayList(); Collection<IdeProjectDependency> projectDependencies = dependenciesExtractor.extractProjectDependencies(classpath.getProject(), classpath.getPlusConfigurations(), classpath.getMinusConfigurations()); for (IdeProjectDependency projectDependency : projectDependencies) { projects.add(projectDependencyBuilder.build(projectDependency)); } return projects; } private List<AbstractClasspathEntry> createLibraryDependencies() { ArrayList<AbstractClasspathEntry> libraries = Lists.newArrayList(); boolean downloadSources = classpath.isDownloadSources(); boolean downloadJavadoc = classpath.isDownloadJavadoc(); Collection<IdeExtendedRepoFileDependency> repoFileDependencies = dependenciesExtractor.extractRepoFileDependencies(classpath.getProject().getDependencies(), classpath.getPlusConfigurations(), classpath.getMinusConfigurations(), downloadSources, downloadJavadoc); for (IdeExtendedRepoFileDependency dependency : repoFileDependencies) { libraries.add(createLibraryEntry(dependency.getFile(), dependency.getSourceFile(), dependency.getJavadocFile(), classpath, dependency.getId())); } Collection<IdeLocalFileDependency> localFileDependencies = dependenciesExtractor.extractLocalFileDependencies(classpath.getPlusConfigurations(), classpath.getMinusConfigurations()); for (IdeLocalFileDependency it : localFileDependencies) { libraries.add(createLibraryEntry(it.getFile(), null, null, classpath, null)); } return libraries; } private static AbstractLibrary createLibraryEntry(File binary, File source, File javadoc, EclipseClasspath classpath, ModuleVersionIdentifier id) { FileReferenceFactory referenceFactory = classpath.getFileReferenceFactory(); FileReference binaryRef = referenceFactory.fromFile(binary); FileReference sourceRef = referenceFactory.fromFile(source); FileReference javadocRef = referenceFactory.fromFile(javadoc); final AbstractLibrary out = binaryRef.isRelativeToPathVariable() ? new Variable(binaryRef) : new Library(binaryRef); out.setJavadocPath(javadocRef); out.setSourcePath(sourceRef); out.setExported(false); out.setModuleVersion(id); return out; } }