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")
                 )