diff options
author | Xavier Ducrohet <xav@android.com> | 2013-12-04 17:58:42 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2013-12-04 17:58:42 +0000 |
commit | d37bc59edd2f00fc31889213b2cc280746fc9383 (patch) | |
tree | e5e40dea653bc9aa8be9f53705fdc834da84dc19 | |
parent | 863bbb6c5429fe7b80da4bbd340cc9512e9c79db (diff) | |
parent | 7eefc7bb0c8f880dff7cb2f70b2df45af4c6a8e5 (diff) | |
download | build-d37bc59edd2f00fc31889213b2cc280746fc9383.tar.gz |
Merge "Lint: Merge manifest and gradle model values for min & target sdk"
-rw-r--r-- | gradle/src/main/groovy/com/android/build/gradle/internal/LintGradleProject.java | 55 |
1 files changed, 46 insertions, 9 deletions
diff --git a/gradle/src/main/groovy/com/android/build/gradle/internal/LintGradleProject.java b/gradle/src/main/groovy/com/android/build/gradle/internal/LintGradleProject.java index 09471a0..79304d8 100644 --- a/gradle/src/main/groovy/com/android/build/gradle/internal/LintGradleProject.java +++ b/gradle/src/main/groovy/com/android/build/gradle/internal/LintGradleProject.java @@ -1,7 +1,9 @@ package com.android.build.gradle.internal; +import com.google.common.base.Charsets; import com.google.common.collect.Lists; import com.google.common.collect.Sets; +import com.google.common.io.Files; import com.android.annotations.NonNull; import com.android.annotations.Nullable; @@ -18,8 +20,12 @@ import com.android.sdklib.AndroidTargetHash; import com.android.sdklib.AndroidVersion; import com.android.tools.lint.detector.api.Project; import com.android.utils.Pair; +import com.android.utils.XmlUtils; + +import org.w3c.dom.Document; import java.io.File; +import java.io.IOException; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; @@ -36,11 +42,13 @@ public class LintGradleProject extends Project { private LintGradleProject( @NonNull LintGradleClient client, @NonNull File dir, - @NonNull File referenceDir) { + @NonNull File referenceDir, + @NonNull File manifest) { super(client, dir, referenceDir); mGradleProject = true; mMergeManifests = true; mDirectLibraries = Lists.newArrayList(); + readManifest(manifest); } /** @@ -87,6 +95,18 @@ public class LintGradleProject extends Project { // Deliberately not calling super; that code is for ADT compatibility } + protected void readManifest(File manifest) { + if (manifest.exists()) { + try { + String xml = Files.toString(manifest, Charsets.UTF_8); + Document document = XmlUtils.parseDocumentSilently(xml, true); + readManifest(document); + } catch (IOException e) { + mClient.log(e, "Could not read manifest %1$s", manifest); + } + } + } + @Override public boolean isGradleProject() { return true; @@ -129,7 +149,7 @@ public class LintGradleProject extends Project { @NonNull File referenceDir, @NonNull AndroidProject project, @NonNull Variant variant) { - super(client, dir, referenceDir); + super(client, dir, referenceDir, variant.getMainArtifact().getGeneratedManifest()); mProject = project; mVariant = variant; @@ -303,20 +323,37 @@ public class LintGradleProject extends Project { @Nullable @Override public String getPackage() { - // TODO: Merge with manifest - return mProject.getDefaultConfig().getProductFlavor().getPackageName(); + // For now, lint only needs the manifest package; not the potentially variant specific + // package. As part of the Gradle work on the Lint API we should make two separate + // package lookup methods -- one for the manifest package, one for the build package + if (mPackage == null) { // only used as a fallback in case manifest somehow is null + String packageName = mProject.getDefaultConfig().getProductFlavor().getPackageName(); + if (packageName != null) { + return packageName; + } + } + + return mPackage; // from manifest } @Override public int getMinSdk() { - // TODO: Merge with manifest - return mProject.getDefaultConfig().getProductFlavor().getMinSdkVersion(); + int minSdk = mProject.getDefaultConfig().getProductFlavor().getMinSdkVersion(); + if (minSdk != -1) { + return minSdk; + } + + return mMinSdk; // from manifest } @Override public int getTargetSdk() { - // TODO: Merge with manifest - return mProject.getDefaultConfig().getProductFlavor().getTargetSdkVersion(); + int targetSdk = mProject.getDefaultConfig().getProductFlavor().getTargetSdkVersion(); + if (targetSdk != -1) { + return targetSdk; + } + + return targetSdk; // from manifest } @Override @@ -341,7 +378,7 @@ public class LintGradleProject extends Project { @NonNull File dir, @NonNull File referenceDir, @NonNull AndroidLibrary library) { - super(client, dir, referenceDir); + super(client, dir, referenceDir, library.getManifest()); mLibrary = library; // TODO: Make sure we don't use this project for any source library projects! |