diff options
author | Yigit Boyar <yboyar@google.com> | 2017-04-27 16:18:32 -0700 |
---|---|---|
committer | Yigit Boyar <yboyar@google.com> | 2017-05-03 14:10:13 -0700 |
commit | e01b53c40a3ab65377c93169c620edef48893235 (patch) | |
tree | a95dd38b071710b83b285d296171286ebfe2b560 /compiler/src/main/kotlin/android/databinding | |
parent | d3aa6e368c913fca9f8607cdd7f7992346d6bce0 (diff) | |
download | data-binding-e01b53c40a3ab65377c93169c620edef48893235.tar.gz |
Add @Generated annotation if it is available
People using error prone are having problems with data binding since
it does not generate perfect code. A good way to exclude it is using
@Generated annotation but we can only use it if app has the necessary
annotation (android.jar does not have @Generated).
This CL checks classpath to decide whether to add it or not.
Also changed test app to have it but other apps don't.
Bug: 37136286
Test: existing tests pass
Change-Id: Ie72518bc690fb98a859ac30f0940c1af18fdba6a
Diffstat (limited to 'compiler/src/main/kotlin/android/databinding')
5 files changed, 15 insertions, 0 deletions
diff --git a/compiler/src/main/kotlin/android/databinding/tool/writer/BRWriter.kt b/compiler/src/main/kotlin/android/databinding/tool/writer/BRWriter.kt index 885284ef..2de922e5 100644 --- a/compiler/src/main/kotlin/android/databinding/tool/writer/BRWriter.kt +++ b/compiler/src/main/kotlin/android/databinding/tool/writer/BRWriter.kt @@ -24,6 +24,7 @@ class BRWriter(properties: Set<String>, val useFinal : Boolean) { val klass: String by lazy { kcode("") { val prefix = if (useFinal) "final " else ""; + annotateWithGenerated() block("public class BR") { tab("public static ${prefix}int _all = 0;") indexedProps.forEach { diff --git a/compiler/src/main/kotlin/android/databinding/tool/writer/BindingMapperWriter.kt b/compiler/src/main/kotlin/android/databinding/tool/writer/BindingMapperWriter.kt index 0caf8a6f..812d7ffe 100644 --- a/compiler/src/main/kotlin/android/databinding/tool/writer/BindingMapperWriter.kt +++ b/compiler/src/main/kotlin/android/databinding/tool/writer/BindingMapperWriter.kt @@ -31,6 +31,7 @@ class BindingMapperWriter(var pkg : String, var className: String, val layoutBin nl("package $pkg;") nl("import ${compilerArgs.modulePackage}.BR;") val extends = if (generateAsTest) "extends $appClassName" else "" + annotateWithGenerated() block("class $className $extends") { nl("final static int TARGET_MIN_SDK = ${compilerArgs.minApi};") if (generateTestOverride) { diff --git a/compiler/src/main/kotlin/android/databinding/tool/writer/DynamicUtilWriter.kt b/compiler/src/main/kotlin/android/databinding/tool/writer/DynamicUtilWriter.kt index ba42f23c..7d550c7e 100644 --- a/compiler/src/main/kotlin/android/databinding/tool/writer/DynamicUtilWriter.kt +++ b/compiler/src/main/kotlin/android/databinding/tool/writer/DynamicUtilWriter.kt @@ -11,6 +11,7 @@ class DynamicUtilWriter() { nl("import android.os.Build.VERSION_CODES;") nl("import android.databinding.BindingConversion;") nl("") + annotateWithGenerated() block("public class DynamicUtil") { val analyzer = ModelAnalyzer.getInstance(); ModelClass.UNBOX_MAPPING.forEach { diff --git a/compiler/src/main/kotlin/android/databinding/tool/writer/KCode.kt b/compiler/src/main/kotlin/android/databinding/tool/writer/KCode.kt index 98438f69..e5ff7980 100644 --- a/compiler/src/main/kotlin/android/databinding/tool/writer/KCode.kt +++ b/compiler/src/main/kotlin/android/databinding/tool/writer/KCode.kt @@ -13,6 +13,8 @@ package android.databinding.tool.writer +import android.databinding.tool.reflection.ModelAnalyzer +import android.databinding.tool.reflection.ModelAnalyzer.GENERATED_ANNOTATION import android.databinding.tool.util.StringUtils import java.util.BitSet @@ -55,6 +57,13 @@ class KCode (private val s : String? = null){ return this } + fun annotateWithGenerated() : KCode { + if (ModelAnalyzer.getInstance().hasGeneratedAnnotation()) { + nl("@${GENERATED_ANNOTATION}(\"Android Data Binding\")") + } + return this + } + fun tab(s : String?, init : (KCode.() -> Unit)? = null) : KCode { val c = KCode(s) if (init != null) { diff --git a/compiler/src/main/kotlin/android/databinding/tool/writer/LayoutBinderWriter.kt b/compiler/src/main/kotlin/android/databinding/tool/writer/LayoutBinderWriter.kt index 4de90a02..673505d7 100644 --- a/compiler/src/main/kotlin/android/databinding/tool/writer/LayoutBinderWriter.kt +++ b/compiler/src/main/kotlin/android/databinding/tool/writer/LayoutBinderWriter.kt @@ -355,6 +355,7 @@ class LayoutBinderWriter(val layoutBinder : LayoutBinder) { classDeclaration = "$className extends android.databinding.ViewDataBinding" } nl("@SuppressWarnings(\"unchecked\")") + annotateWithGenerated() block("public class $classDeclaration ${buildImplements()}") { nl(declareIncludeViews()) nl(declareViews()) @@ -695,6 +696,7 @@ class LayoutBinderWriter(val layoutBinder : LayoutBinder) { } fun declareSetVariable() = kcode("") { + nl("@Override") nl("public boolean setVariable(int variableId, @Nullable Object variable) {") { tab("switch(variableId) {") { variables.forEach { @@ -1249,6 +1251,7 @@ class LayoutBinderWriter(val layoutBinder : LayoutBinder) { nl("import android.databinding.ViewDataBinding;") nl("import android.support.annotation.NonNull;") nl("import android.support.annotation.Nullable;") + annotateWithGenerated() nl("public abstract class $baseClassName extends ViewDataBinding {") layoutBinder.sortedTargets.filter{it.id != null}.forEach { if (variations.count{lb -> lb.sortedTargets.any {bt -> bt.isUsed && bt.id == it.id && bt.includedLayout == null}} == variations.size) { |