Use a closure to setup proguard's config files.

This allows to compute the list only when the
task is about the run and to properly handle cases where
only the config files are touched (and trigger a new task
execution).

Change-Id: I55aa4d7bdfc4ef95532757a009921de653f20ced
(cherry picked from commit 89b3a4234b00f4f57011c1a3e6450607f26a57b2)
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 ---