Merge "Use a closure to setup proguard's config files." into idea133-milestone
diff --git a/build-system/builder/src/main/java/com/android/builder/core/VariantConfiguration.java b/build-system/builder/src/main/java/com/android/builder/core/VariantConfiguration.java
index a3cd228..d3da9d9 100644
--- a/build-system/builder/src/main/java/com/android/builder/core/VariantConfiguration.java
+++ b/build-system/builder/src/main/java/com/android/builder/core/VariantConfiguration.java
@@ -1641,8 +1641,8 @@
      * @return a non null list of proguard files.
      */
     @NonNull
-    public List<Object> getProguardFiles(boolean includeLibraries) {
-        List<Object> fullList = Lists.newArrayList();
+    public List<File> getProguardFiles(boolean includeLibraries) {
+        List<File> fullList = Lists.newArrayList();
 
         // add the config files from the build type, main config and flavors
         fullList.addAll(mDefaultConfig.getProguardFiles());
diff --git a/build-system/gradle/src/main/groovy/com/android/build/gradle/BasePlugin.groovy b/build-system/gradle/src/main/groovy/com/android/build/gradle/BasePlugin.groovy
index a1b9fbc..a912fa1 100755
--- a/build-system/gradle/src/main/groovy/com/android/build/gradle/BasePlugin.groovy
+++ b/build-system/gradle/src/main/groovy/com/android/build/gradle/BasePlugin.groovy
@@ -2220,12 +2220,12 @@
      */
     @NonNull
     public File createProguardTasks(
-            @NonNull BaseVariantData<? extends BaseVariantOutputData> variantData,
-            @Nullable BaseVariantData<? extends BaseVariantOutputData> testedVariantData) {
-        VariantConfiguration variantConfig = variantData.variantConfiguration
+            final @NonNull BaseVariantData<? extends BaseVariantOutputData> variantData,
+            final @Nullable BaseVariantData<? extends BaseVariantOutputData> testedVariantData) {
+        final VariantConfiguration variantConfig = variantData.variantConfiguration
 
         // use single output for now.
-        BaseVariantOutputData variantOutputData = variantData.outputs.get(0)
+        final BaseVariantOutputData variantOutputData = variantData.outputs.get(0)
 
         def proguardTask = project.tasks.create(
                 "proguard${variantData.variantConfiguration.fullName.capitalize()}",
@@ -2252,8 +2252,6 @@
         // --- Proguard Config ---
 
         if (testedVariantData != null) {
-            // use single output for now.
-            BaseVariantOutputData testedVariantOutputData = testedVariantData.outputs.get(0)
 
             // don't remove any code in tested app
             proguardTask.dontshrink()
@@ -2264,24 +2262,21 @@
 
             // input the mapping from the tested app so that we can deal with obfuscated code
             proguardTask.applymapping("${project.buildDir}/${FD_OUTPUTS}/proguard/${testedVariantData.variantConfiguration.dirName}/mapping.txt")
+        }
 
+        Closure configFiles = {
+            List<File> proguardFiles = variantConfig.getProguardFiles(true /*includeLibs*/)
+            proguardFiles.add(variantOutputData.processResourcesTask.proguardOutputFile)
             // for tested app, we only care about their aapt config since the base
             // configs are the same files anyway.
-            proguardTask.configuration(testedVariantOutputData.processResourcesTask.proguardOutputFile)
-        }
-
-        // all the config files coming from build type, product flavors, as well as aars
-        // We need to do this in doFirst, as we need to make sure that the files are there
-        // before we call proguard
-        proguardTask.doFirst {
-            List<Object> proguardFiles = variantConfig.getProguardFiles(true /*includeLibs*/)
-            for (Object proguardFile : proguardFiles) {
-                proguardTask.configuration(proguardFile)
+            if (testedVariantData != null) {
+                // use single output for now.
+                proguardFiles.add(testedVariantData.outputs.get(0).processResourcesTask.proguardOutputFile)
             }
-        }
 
-        // also the config file output by aapt
-        proguardTask.configuration(variantOutputData.processResourcesTask.proguardOutputFile)
+            return proguardFiles
+        }
+        proguardTask.configuration(configFiles)
 
         // --- InJars / LibraryJars ---