diff options
Diffstat (limited to 'gradlePlugin/src/main/java')
-rw-r--r-- | gradlePlugin/src/main/java/android/databinding/tool/DataBindingExcludeGeneratedTask.java | 124 |
1 files changed, 124 insertions, 0 deletions
diff --git a/gradlePlugin/src/main/java/android/databinding/tool/DataBindingExcludeGeneratedTask.java b/gradlePlugin/src/main/java/android/databinding/tool/DataBindingExcludeGeneratedTask.java new file mode 100644 index 00000000..cfc7a98a --- /dev/null +++ b/gradlePlugin/src/main/java/android/databinding/tool/DataBindingExcludeGeneratedTask.java @@ -0,0 +1,124 @@ +/* + * Copyright (C) 2015 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 android.databinding.tool; + +import com.google.common.base.Preconditions; + +import org.apache.commons.io.FileUtils; +import org.apache.commons.io.IOUtils; +import org.gradle.api.DefaultTask; +import org.gradle.api.tasks.Input; +import org.gradle.api.tasks.TaskAction; +import org.gradle.api.tasks.bundling.Jar; + +import android.databinding.tool.util.L; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.util.List; + +/** + * Task to exclude generated classes from the Jar task of a library project + */ +public class DataBindingExcludeGeneratedTask extends DefaultTask { + private String appPackage; + private String infoClassQualifiedName; + @Input + private File generatedClassListFile; + private boolean isLibrary; + + private org.gradle.api.tasks.bundling.Jar packageTask; + private final String EXCLUDE_PATTERN = "android/databinding/layouts/*.*"; + + public void setAppPackage(String appPackage) { + this.appPackage = appPackage; + } + + public void setInfoClassQualifiedName(String infoClassQualifiedName) { + this.infoClassQualifiedName = infoClassQualifiedName; + } + + public void setLibrary(boolean isLibrary) { + this.isLibrary = isLibrary; + } + + public void setPackageTask(Jar packageTask) { + this.packageTask = packageTask; + } + + public void setGeneratedClassListFile(File generatedClassListFile) { + this.generatedClassListFile = generatedClassListFile; + } + + public String getAppPackage() { + return appPackage; + } + + public String getInfoClassQualifiedName() { + return infoClassQualifiedName; + } + + public File getGeneratedClassListFile() { + return generatedClassListFile; + } + + @TaskAction + public void excludeGenerated() { + L.d("Excluding generated classes from jar. Is library ? %s", isLibrary); + String appPkgAsClass = appPackage.replace('.', '/'); + String infoClassAsClass = infoClassQualifiedName.replace('.', '/'); + exclude(infoClassAsClass + ".class"); + exclude(EXCLUDE_PATTERN); + if (isLibrary) { + exclude(appPkgAsClass + "/BR.*"); + List<String> generatedClasses = readGeneratedClasses(); + for (String klass : generatedClasses) { + exclude(klass.replace('.', '/') + ".class"); + } + } + L.d("Excluding generated classes from library jar is done."); + } + + private void exclude(String pattern) { + L.d("exclude %s", pattern); + packageTask.exclude(pattern); + } + + private List<String> readGeneratedClasses() { + Preconditions.checkNotNull(generatedClassListFile, "Data binding exclude generated task" + + " is not configured properly"); + Preconditions.checkArgument(generatedClassListFile.exists(), + "Generated class list does not exist %s", generatedClassListFile.getAbsolutePath()); + FileInputStream fis = null; + try { + fis = new FileInputStream(generatedClassListFile); + return IOUtils.readLines(fis); + } catch (FileNotFoundException e) { + L.e(e, "Unable to read generated class list from %s", + generatedClassListFile.getAbsoluteFile()); + } catch (IOException e) { + L.e(e, "Unexpected exception while reading %s", + generatedClassListFile.getAbsoluteFile()); + } finally { + IOUtils.closeQuietly(fis); + } + Preconditions.checkState(false, "Could not read data binding generated class list"); + return null; + } +} |