- 
                Notifications
    You must be signed in to change notification settings 
- Fork 460
Closed
Labels
bugfeedback: GoogleAn issue/PR submitted by colleagues at Google, most likely related to the Android API reference docsAn issue/PR submitted by colleagues at Google, most likely related to the Android API reference docsgood first issueA beginner-friendly issue for which some assistance is expectedA beginner-friendly issue for which some assistance is expected
Description
Describe the bug
You do not autogenerate the default Java constructor. We autogenerate it downstream, but that causes us issues with the explicitly-hidden-constructor case.
(the first set of assertions is the Documentable tree, the second set is the component tree we/dackka generate from it)
@Test
fun `Default constructors are autogenerated when no explicit constructor is present`() {
    val moduleJ = """
        public class Foo {}
    """.trimIndent().render(java = true)
    val classlikeJ = moduleJ.page("Foo").data.content
    val moduleK = """
        public class Foo {}
    """.trimIndent().render(java = false)
    val classlikeK = moduleK.page("Foo").data.content
    // test the Documentables tree. The correct behavior would be both isNotEmpty
    for (module in listOf(moduleJ, moduleK)) {
        val classlike = module.explicitClasslike("Foo")
        if (module == moduleK)
            assertThat((classlike as DClass).constructors).isEmpty()
        else
            assertThat((classlike as DClass).constructors).isNotEmpty()
    }
    // test the Documentables tree. The correct behavior is both isNotEmpty
    for (classlike in listOf(classlikeJ, classlikeK)) {
        assertThat(classlike.data.publicConstructorsDetails).isNotEmpty()
    }
}
@Test
fun `Default constructors are not autogenerated when private-constuctor pattern is used`() {
    val moduleJ = """
        public class Foo { private Foo() {} }
    """.trimIndent().render(java = true)
    val classlikeJ = moduleJ.page("Foo").data.content
    val moduleK = """
        public class Foo private constructor() {}
    """.trimIndent().render(java = false)
    val classlikeK = moduleK.page("Foo").data.content
    // test the Documentables tree. The correct behavior is both isEmpty
    for (module in listOf(moduleJ, moduleK)) {
        val classlike = module.explicitClasslike("Foo")
        assertThat((classlike as DClass).constructors).isEmpty()
    }
    // test our Components tree. The correct behavior is both isEmpty.
    // Our fix for the next test breaks us in this case. I think this is unavoidably upstream.
    for (classlike in listOf(classlikeJ, classlikeK)) {
        if (classlike == classlikeK)
            assertThat(classlike.data.publicConstructorsDetails).isNotEmpty()
        else
            assertThat(classlike.data.publicConstructorsDetails).isEmpty()        }
}
Metadata
Metadata
Assignees
Labels
bugfeedback: GoogleAn issue/PR submitted by colleagues at Google, most likely related to the Android API reference docsAn issue/PR submitted by colleagues at Google, most likely related to the Android API reference docsgood first issueA beginner-friendly issue for which some assistance is expectedA beginner-friendly issue for which some assistance is expected