summaryrefslogtreecommitdiff
path: root/compiler/src/main/kotlin/android/databinding
diff options
context:
space:
mode:
authorTreeHugger Robot <treehugger-gerrit@google.com>2018-05-21 22:34:32 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2018-05-21 22:34:32 +0000
commitf3f70558c0d40c24db4f805458d31da475a9de5f (patch)
treec51c19b29367435cc5bea265e1f7911ec5f6325d /compiler/src/main/kotlin/android/databinding
parent806ec70fd4410dfdf5b3808b04bf6c9d941b3016 (diff)
parent744db5c5a111d68c30302deae8b4ba1ea9355603 (diff)
downloaddata-binding-f3f70558c0d40c24db4f805458d31da475a9de5f.tar.gz
Merge "Fix kotlin.Unit method references in binding layouts." into studio-master-dev
Diffstat (limited to 'compiler/src/main/kotlin/android/databinding')
-rw-r--r--compiler/src/main/kotlin/android/databinding/tool/writer/LayoutBinderWriter.kt41
1 files changed, 24 insertions, 17 deletions
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 18317af9..3581aaf6 100644
--- a/compiler/src/main/kotlin/android/databinding/tool/writer/LayoutBinderWriter.kt
+++ b/compiler/src/main/kotlin/android/databinding/tool/writer/LayoutBinderWriter.kt
@@ -607,7 +607,9 @@ class LayoutBinderWriter(val layoutBinder : LayoutBinder, val libTypes: LibTypes
callbacks.groupBy { it.callbackWrapper }.forEach {
val wrapper = it.key
val lambdas = it.value
- val shouldReturn = !wrapper.method.returnType.isVoid
+ // special case kotlin unit. b/78662035
+ val returnKotlinUnit = wrapper.method.returnType.isKotlinUnit
+ val shouldReturn = !wrapper.method.returnType.isVoid && !returnKotlinUnit
if (shouldReturn) {
lambdas.forEach {
it.callbackExprModel.ext.forceLocalize.add(it.expr)
@@ -621,6 +623,8 @@ class LayoutBinderWriter(val layoutBinder : LayoutBinder, val libTypes: LibTypes
nl(lambda.executionPath.toCode())
if (shouldReturn) {
nl("return ${lambda.expr.scopedName()};")
+ } else if (returnKotlinUnit) {
+ nl("return null;")
}
} else {
block("switch(${CallbackWrapper.SOURCE_ID})") {
@@ -628,10 +632,10 @@ class LayoutBinderWriter(val layoutBinder : LayoutBinder, val libTypes: LibTypes
block("case ${lambda.callbackId}:") {
nl(lambda.callbackExprModel.localizeGlobalVariables(lambda))
nl(lambda.executionPath.toCode())
- if (shouldReturn) {
- nl("return ${lambda.expr.scopedName()};")
- } else {
- nl("break;")
+ when {
+ shouldReturn -> nl("return ${lambda.expr.scopedName()};")
+ returnKotlinUnit -> nl("return null;")
+ else -> nl("break;")
}
}
}
@@ -1191,7 +1195,7 @@ class LayoutBinderWriter(val layoutBinder : LayoutBinder, val libTypes: LibTypes
} else {
extendsImplements = "extends"
}
- nl("public static class ${expr.listenerClassName} $extendsImplements ${listenerType.canonicalName}{") {
+ nl("public static class ${expr.listenerClassName} $extendsImplements $listenerType{") {
if (expr.target.isDynamic) {
tab("private ${expr.target.resolvedType.toJavaCode()} value;")
tab("public ${expr.listenerClassName} setValue(${expr.target.resolvedType.toJavaCode()} value) {") {
@@ -1209,22 +1213,25 @@ class LayoutBinderWriter(val layoutBinder : LayoutBinder, val libTypes: LibTypes
"${it.value.toJavaCode()} arg${it.index}"
}.joinToString(", ")
}) {") {
- val obj: String
- if (expr.target.isDynamic) {
- obj = "this.value"
+ val obj = if (expr.target.isDynamic) {
+ "this.value"
} else {
- obj = expr.target.toCode().generate();
+ expr.target.toCode().generate()
}
- val returnStr: String
- if (!returnType.isVoid) {
- returnStr = "return "
+ val returnSuffix = if(returnType.isKotlinUnit) {
+ "return null;"
} else {
- returnStr = ""
+ ""
}
- val args = parameterTypes.withIndex().map {
+ val returnPrefix = if (!returnType.isVoid && !returnType.isKotlinUnit) {
+ "return "
+ } else {
+ ""
+ }
+ val args = parameterTypes.withIndex().joinToString(", ") {
"arg${it.index}"
- }.joinToString(", ")
- tab("$returnStr$obj.${expr.name}($args);")
+ }
+ tab("$returnPrefix$obj.${expr.name}($args); $returnSuffix")
}
tab("}")
}