diff options
author | TreeHugger Robot <treehugger-gerrit@google.com> | 2018-05-21 22:34:32 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2018-05-21 22:34:32 +0000 |
commit | f3f70558c0d40c24db4f805458d31da475a9de5f (patch) | |
tree | c51c19b29367435cc5bea265e1f7911ec5f6325d /compiler/src/main/kotlin/android/databinding | |
parent | 806ec70fd4410dfdf5b3808b04bf6c9d941b3016 (diff) | |
parent | 744db5c5a111d68c30302deae8b4ba1ea9355603 (diff) | |
download | data-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.kt | 41 |
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("}") } |