Add XTypeElement#isNested.
Test: Tested with XTypeElementTest
Change-Id: I38ef44bdd8ebe1f93d1d2a932671d769be1c30b9
(cherry picked from commit 8be77e356e8eab4807a85e7b85e8db2b202c6f21)
Merged-In:I38ef44bdd8ebe1f93d1d2a932671d769be1c30b9
diff --git a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/XTypeElement.kt b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/XTypeElement.kt
index 00fb0e1..aa68fc6 100644
--- a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/XTypeElement.kt
+++ b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/XTypeElement.kt
@@ -60,6 +60,11 @@
get() = qualifiedName
/**
+ * Returns `true` if this [XTypeElement] is a nested class/interface.
+ */
+ fun isNested(): Boolean
+
+ /**
* Returns `true` if this [XTypeElement] represents an interface
*/
fun isInterface(): Boolean
diff --git a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/javac/JavacTypeElement.kt b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/javac/JavacTypeElement.kt
index 61630af..4263bf5 100644
--- a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/javac/JavacTypeElement.kt
+++ b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/javac/JavacTypeElement.kt
@@ -89,6 +89,10 @@
return kotlinMetadata?.isClass() ?: (element.kind == ElementKind.CLASS)
}
+ override fun isNested(): Boolean {
+ return element.enclosingType(env) != null
+ }
+
override fun isInterface(): Boolean {
return kotlinMetadata?.isInterface() ?: (element.kind == ElementKind.INTERFACE)
}
diff --git a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KspTypeElement.kt b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KspTypeElement.kt
index 0805475..0ff48a5 100644
--- a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KspTypeElement.kt
+++ b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KspTypeElement.kt
@@ -186,6 +186,10 @@
}
}
+ override fun isNested(): Boolean {
+ return declaration.findEnclosingMemberContainer(env) is XTypeElement
+ }
+
override fun isInterface(): Boolean {
return declaration.classKind == ClassKind.INTERFACE
}
diff --git a/room/room-compiler-processing/src/test/java/androidx/room/compiler/processing/XTypeElementTest.kt b/room/room-compiler-processing/src/test/java/androidx/room/compiler/processing/XTypeElementTest.kt
index dfe7eeb..6c82781 100644
--- a/room/room-compiler-processing/src/test/java/androidx/room/compiler/processing/XTypeElementTest.kt
+++ b/room/room-compiler-processing/src/test/java/androidx/room/compiler/processing/XTypeElementTest.kt
@@ -173,12 +173,14 @@
runProcessorTest(sources = listOf(src)) { invocation ->
invocation.processingEnv.requireTypeElement("foo.bar.Outer").let {
assertThat(it.className).isEqualTo(ClassName.get("foo.bar", "Outer"))
+ assertThat(it.isNested()).isFalse()
assertThat(it.enclosingTypeElement).isNull()
}
invocation.processingEnv.requireTypeElement("foo.bar.Outer.Inner").let {
assertThat(it.className).isEqualTo(ClassName.get("foo.bar", "Outer", "Inner"))
assertThat(it.packageName).isEqualTo("foo.bar")
assertThat(it.name).isEqualTo("Inner")
+ assertThat(it.isNested()).isTrue()
assertThat(it.enclosingTypeElement).isEqualTo(
invocation.processingEnv.requireTypeElement("foo.bar.Outer")
)