| /* |
| * Copyright (C) 2013 The Android Open Source Project |
| * |
| * 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 com.android.tools.idea.gradle.eclipse; |
| |
| import com.android.annotations.NonNull; |
| import com.android.annotations.Nullable; |
| import com.android.ide.common.repository.GradleCoordinate; |
| import com.android.sdklib.AndroidVersion; |
| import com.android.tools.lint.client.api.DefaultConfiguration; |
| import com.google.common.collect.Lists; |
| |
| import java.io.File; |
| import java.nio.charset.Charset; |
| import java.util.Collections; |
| import java.util.List; |
| |
| /** |
| * An imported module from Eclipse |
| */ |
| class EclipseImportModule extends ImportModule { |
| private final EclipseProject myProject; |
| private List<ImportModule> myDirectDependencies; |
| private List<ImportModule> myAllDependencies; |
| |
| public EclipseImportModule(@NonNull GradleImport importer, @NonNull EclipseProject project) { |
| super(importer); |
| myProject = project; |
| myProject.setModule(this); |
| } |
| |
| @Nullable |
| @Override |
| protected File getLintXml() { |
| File lintXml = new File(myProject.getDir(), DefaultConfiguration.CONFIG_FILE_NAME); |
| return lintXml.exists() ? lintXml : null; |
| } |
| |
| @Override |
| @NonNull |
| protected File resolveFile(@NonNull File file) { |
| if (file.isAbsolute()) { |
| return file; |
| } |
| else { |
| return new File(myProject.getDir(), file.getPath()); |
| } |
| } |
| |
| @Override |
| protected void initDependencies() { |
| super.initDependencies(); |
| |
| for (String reference : myProject.getInferredLibraries()) { |
| if (reference.equals(APPCOMPAT_ARTIFACT)) { |
| GradleCoordinate dependency = getAppCompatDependency(); |
| if (dependency != null) { |
| myDependencies.add(dependency); |
| myImporter.getSummary().reportReplacedLib(reference, Collections.singletonList(dependency)); |
| } |
| } else if (reference.equals(SUPPORT_ARTIFACT)) { |
| GradleCoordinate dependency = getSupportLibDependency(); |
| if (dependency != null) { |
| myDependencies.add(dependency); |
| myImporter.getSummary().reportReplacedLib(reference, Collections.singletonList(dependency)); |
| } |
| } else if (reference.equals(GRIDLAYOUT_ARTIFACT)) { |
| GradleCoordinate dependency = getGridLayoutDependency(); |
| if (dependency != null) { |
| myDependencies.add(dependency); |
| myImporter.getSummary().reportReplacedLib(reference, Collections.singletonList(dependency)); |
| } |
| } else if (reference.equals(MEDIA_ROUTER_ARTIFACT)) { |
| GradleCoordinate dependency = getMediaRouterDependency(); |
| if (dependency != null) { |
| myDependencies.add(dependency); |
| myImporter.getSummary().reportReplacedLib(reference, Collections.singletonList(dependency)); |
| } |
| } |
| } |
| |
| for (File jar : myProject.getJarPaths()) { |
| if (myImporter.isReplaceJars()) { |
| GradleCoordinate dependency = guessDependency(jar); |
| if (dependency != null) { |
| myDependencies.add(dependency); |
| myImporter.getSummary().reportReplacedJar(jar, dependency); |
| continue; |
| } |
| } |
| myJarDependencies.add(getJarOutputRelativePath(jar)); |
| } |
| |
| for (File jar : myProject.getTestJarPaths()) { |
| if (myImporter.isReplaceJars()) { |
| GradleCoordinate dependency = guessDependency(jar); |
| if (dependency != null) { |
| myTestDependencies.add(dependency); |
| myImporter.getSummary().reportReplacedJar(jar, dependency); |
| continue; |
| } |
| } |
| // Test jars unconditionally get copied into the libs/ folder |
| myTestJarDependencies.add(getTestJarOutputRelativePath(jar)); |
| } |
| } |
| |
| public void addDependencies(@NonNull List<GradleCoordinate> dependencies) { |
| for (GradleCoordinate dependency : dependencies) { |
| if (!myDependencies.contains(dependency)) { |
| myDependencies.addAll(dependencies); |
| } |
| } |
| } |
| |
| @Override |
| protected boolean dependsOnLibrary(@NonNull String pkg) { |
| if (!isAndroidProject()) { |
| return false; |
| } |
| if (pkg.equals(myProject.getPackage())) { |
| return true; |
| } |
| |
| for (EclipseProject project : myProject.getAllLibraries()) { |
| if (project.isAndroidProject() && pkg.equals(project.getPackage())) { |
| return true; |
| } |
| } |
| |
| return false; |
| } |
| |
| @NonNull |
| @Override |
| protected List<ImportModule> getDirectDependencies() { |
| if (myDirectDependencies == null) { |
| myDirectDependencies = Lists.newArrayList(); |
| for (EclipseProject project : myProject.getDirectLibraries()) { |
| EclipseImportModule module = project.getModule(); |
| if (module != null) { |
| myDirectDependencies.add(module); |
| } |
| } |
| } |
| |
| return myDirectDependencies; |
| } |
| |
| @NonNull |
| @Override |
| protected List<ImportModule> getAllDependencies() { |
| if (myAllDependencies == null) { |
| myAllDependencies = Lists.newArrayList(); |
| for (EclipseProject project : myProject.getAllLibraries()) { |
| EclipseImportModule module = project.getModule(); |
| if (module != null) { |
| myAllDependencies.add(module); |
| } |
| } |
| } |
| |
| return myAllDependencies; |
| } |
| |
| @Override |
| protected Charset getProjectEncoding(@NonNull File file) { |
| return myProject.getProjectEncoding(); |
| } |
| |
| @Override |
| protected Charset getFileEncoding(@NonNull File file) { |
| return myProject.getFileEncoding(file); |
| } |
| |
| @NonNull |
| @Override |
| public File getDir() { |
| return myProject.getDir(); |
| } |
| |
| @Override |
| protected boolean isAndroidProject() { |
| return myProject.isAndroidProject(); |
| } |
| |
| @Override |
| protected boolean isLibrary() { |
| return myProject.isLibrary(); |
| } |
| |
| @Nullable |
| @Override |
| protected String getPackage() { |
| return myProject.getPackage(); |
| } |
| |
| @NonNull |
| @Override |
| protected String getOriginalName() { |
| return myProject.getName(); |
| } |
| |
| @Override |
| public boolean isApp() { |
| return myProject.isAndroidProject() && !myProject.isLibrary(); |
| } |
| |
| @Override |
| public boolean isAndroidLibrary() { |
| return myProject.isAndroidProject() && myProject.isLibrary(); |
| } |
| |
| @Override |
| public boolean isJavaLibrary() { |
| return !myProject.isAndroidProject(); |
| } |
| |
| @Override |
| public boolean isNdkProject() { |
| return myProject.isNdkProject(); |
| } |
| |
| @Override |
| @Nullable |
| protected File getManifestFile() { |
| return myProject.getManifestFile(); |
| } |
| |
| @Override |
| @Nullable |
| protected File getResourceDir() { |
| return myProject.getResourceDir(); |
| } |
| |
| @Override |
| @Nullable |
| protected File getAssetsDir() { |
| return myProject.getAssetsDir(); |
| } |
| |
| @Override |
| @NonNull |
| protected List<File> getSourcePaths() { |
| return myProject.getSourcePaths(); |
| } |
| |
| @Override |
| @NonNull |
| protected List<File> getJarPaths() { |
| return myProject.getJarPaths(); |
| } |
| |
| @Override |
| @NonNull |
| protected List<File> getTestJarPaths() { |
| return myProject.getTestJarPaths(); |
| } |
| |
| @Override |
| @NonNull |
| protected List<File> getNativeLibs() { |
| return myProject.getNativeLibs(); |
| } |
| |
| @Override |
| @Nullable |
| protected File getNativeSources() { |
| return myProject.getNativeSources(); |
| } |
| |
| @Nullable |
| @Override |
| protected String getNativeModuleName() { |
| return myProject.getNativeModuleName(); |
| } |
| |
| @Override |
| @NonNull |
| protected List<File> getLocalProguardFiles() { |
| return myProject.getLocalProguardFiles(); |
| } |
| |
| @NonNull |
| @Override |
| protected List<File> getSdkProguardFiles() { |
| return myProject.getSdkProguardFiles(); |
| } |
| |
| @NonNull |
| @Override |
| protected File getCanonicalModuleDir() { |
| return myProject.getCanonicalDir(); |
| } |
| |
| @Nullable |
| @Override |
| protected File getOutputDir() { |
| return myProject.getOutputDir(); |
| } |
| |
| @NonNull |
| @Override |
| protected String getLanguageLevel() { |
| return myProject.getLanguageLevel(); |
| } |
| |
| @NonNull |
| @Override |
| protected AndroidVersion getCompileSdkVersion() { |
| return myProject.getCompileSdkVersion(); |
| } |
| |
| @Nullable |
| @Override |
| protected String getAddOn() { |
| return myProject.getAddOn(); |
| } |
| |
| @NonNull |
| @Override |
| protected AndroidVersion getTargetSdkVersion() { |
| return myProject.getTargetSdkVersion(); |
| } |
| |
| @NonNull |
| @Override |
| protected AndroidVersion getMinSdkVersion() { |
| return myProject.getMinSdkVersion(); |
| } |
| |
| @Override |
| protected boolean dependsOn(@NonNull ImportModule other) { |
| return myProject.getAllLibraries().contains(((EclipseImportModule)other).myProject); |
| } |
| |
| @NonNull |
| public EclipseProject getProject() { |
| return myProject; |
| } |
| |
| @Nullable |
| @Override |
| protected File getInstrumentationDir() { |
| return myProject.getInstrumentationDir(); |
| } |
| } |