diff options
author | Eugene Susla <eugenesusla@google.com> | 2020-10-05 17:44:46 -0700 |
---|---|---|
committer | Eugene Susla <eugenesusla@google.com> | 2020-10-05 19:22:05 -0700 |
commit | 77eeec1257d666ee8b81d3e6738f28200adcfc20 (patch) | |
tree | e688fe71cf72f1586461d7eb0f2a9cd7596425c9 /tools/codegen | |
parent | db2bcf83f89b8a253af1cf5f5d60272771482709 (diff) |
Fix codegen for wildcards in type args
Test: tests/Codegen/runTest.sh
Change-Id: I4b1f3c9d07ab2ddfa644983898ada309ff42b23e
Diffstat (limited to 'tools/codegen')
4 files changed, 12 insertions, 3 deletions
diff --git a/tools/codegen/src/com/android/codegen/FileInfo.kt b/tools/codegen/src/com/android/codegen/FileInfo.kt index 909472640f29..a1d0389b0041 100644 --- a/tools/codegen/src/com/android/codegen/FileInfo.kt +++ b/tools/codegen/src/com/android/codegen/FileInfo.kt @@ -272,7 +272,7 @@ class FileInfo( /** Debug info */ fun summary(): String = when(this) { is Code -> "${javaClass.simpleName}(${lines.size} lines): ${lines.getOrNull(0)?.take(70) ?: ""}..." - is DataClass -> "DataClass ${ast.nameAsString}:\n" + + is DataClass -> "DataClass ${ast.nameAsString} nested:${ast.nestedTypes.map { it.nameAsString }}:\n" + chunks.joinToString("\n") { it.summary() } + "\n//end ${ast.nameAsString}" } diff --git a/tools/codegen/src/com/android/codegen/InputSignaturesComputation.kt b/tools/codegen/src/com/android/codegen/InputSignaturesComputation.kt index d6953c00fc0b..69ff18d3f6ab 100644 --- a/tools/codegen/src/com/android/codegen/InputSignaturesComputation.kt +++ b/tools/codegen/src/com/android/codegen/InputSignaturesComputation.kt @@ -41,7 +41,10 @@ private fun ClassPrinter.generateInputSignaturesForClass(classAst: ClassOrInterf } } + ("class ${classAst.nameAsString}" + " extends ${classAst.extendedTypes.map { getFullClassName(it) }.ifEmpty { listOf("java.lang.Object") }.joinToString(", ")}" + - " implements [${classAst.implementedTypes.joinToString(", ") { getFullClassName(it) }}]") + " implements [${classAst.implementedTypes.joinToString(", ") { getFullClassName(it) }}]") + + classAst.nestedNonDataClasses.flatMap { nestedClass -> + generateInputSignaturesForClass(nestedClass) + } } private fun ClassPrinter.annotationsToString(annotatedAst: NodeWithAnnotations<*>): String { @@ -141,6 +144,8 @@ private fun ClassPrinter.getFullClassName(className: String): String { if (className[0].isLowerCase()) return className //primitive + if (className[0] == '?') return className //wildcard + return thisPackagePrefix + className } diff --git a/tools/codegen/src/com/android/codegen/SharedConstants.kt b/tools/codegen/src/com/android/codegen/SharedConstants.kt index 6f740cd663e3..36070b55cb2e 100644 --- a/tools/codegen/src/com/android/codegen/SharedConstants.kt +++ b/tools/codegen/src/com/android/codegen/SharedConstants.kt @@ -1,7 +1,7 @@ package com.android.codegen const val CODEGEN_NAME = "codegen" -const val CODEGEN_VERSION = "1.0.15" +const val CODEGEN_VERSION = "1.0.16" const val CANONICAL_BUILDER_CLASS = "Builder" const val BASE_BUILDER_CLASS = "BaseBuilder" diff --git a/tools/codegen/src/com/android/codegen/Utils.kt b/tools/codegen/src/com/android/codegen/Utils.kt index c19ae3b0b11f..7cfa7847fcff 100644 --- a/tools/codegen/src/com/android/codegen/Utils.kt +++ b/tools/codegen/src/com/android/codegen/Utils.kt @@ -103,6 +103,10 @@ val TypeDeclaration<*>.nestedTypes get() = childNodes.filterIsInstance<TypeDecla val TypeDeclaration<*>.nestedDataClasses get() = nestedTypes.filterIsInstance<ClassOrInterfaceDeclaration>() .filter { it.annotations.any { it.nameAsString.endsWith("DataClass") } } +val TypeDeclaration<*>.nestedNonDataClasses get() + = nestedTypes.filterIsInstance<ClassOrInterfaceDeclaration>() + .filter { it.annotations.none { it.nameAsString.endsWith("DataClass") } } + .filterNot { it.isInterface } val TypeDeclaration<*>.startLine get() = range.get()!!.begin.line inline fun <T> List<T>.forEachSequentialPair(action: (T, T?) -> Unit) { |