summaryrefslogtreecommitdiff
path: root/compiler/src/main/kotlin/android/databinding
diff options
context:
space:
mode:
authorYigit Boyar <yboyar@google.com>2017-04-27 16:18:32 -0700
committerYigit Boyar <yboyar@google.com>2017-05-03 14:10:13 -0700
commite01b53c40a3ab65377c93169c620edef48893235 (patch)
treea95dd38b071710b83b285d296171286ebfe2b560 /compiler/src/main/kotlin/android/databinding
parentd3aa6e368c913fca9f8607cdd7f7992346d6bce0 (diff)
downloaddata-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')
-rw-r--r--compiler/src/main/kotlin/android/databinding/tool/writer/BRWriter.kt1
-rw-r--r--compiler/src/main/kotlin/android/databinding/tool/writer/BindingMapperWriter.kt1
-rw-r--r--compiler/src/main/kotlin/android/databinding/tool/writer/DynamicUtilWriter.kt1
-rw-r--r--compiler/src/main/kotlin/android/databinding/tool/writer/KCode.kt9
-rw-r--r--compiler/src/main/kotlin/android/databinding/tool/writer/LayoutBinderWriter.kt3
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) {