Skip to content

Commit 4394495

Browse files
committed
Do not filter out accessors of sythetic properties
1 parent 844aa84 commit 4394495

3 files changed

Lines changed: 50 additions & 11 deletions

File tree

dokka-subprojects/analysis-kotlin-symbols/src/main/kotlin/org/jetbrains/dokka/analysis/kotlin/symbols/translators/DefaultSymbolToDocumentableTranslator.kt

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -461,15 +461,8 @@ internal class DokkaSymbolVisitor(
461461
val javaFields = callables.filterIsInstance<KaJavaFieldSymbol>()
462462
.filterOutSyntheticJavaPropBackingField()
463463

464-
465-
fun List<KaNamedFunctionSymbol>.filterOutSyntheticJavaPropAccessors() = filterNot { fn ->
466-
if ((fn.origin == KaSymbolOrigin.JAVA_SOURCE || fn.origin == KaSymbolOrigin.JAVA_LIBRARY) && fn.psi != null)
467-
syntheticJavaProperties.any { fn.psi == it.javaGetterSymbol.psi || fn.psi == it.javaSetterSymbol?.psi }
468-
else false
469-
}
470-
471464
val functions = callables.filterIsInstance<KaNamedFunctionSymbol>()
472-
.filterOutSyntheticJavaPropAccessors().map { visitFunctionSymbol(it, dri, isJavaContext) }
465+
.map { visitFunctionSymbol(it, dri, isJavaContext) }
473466

474467

475468
val properties = callables.filterIsInstance<KaPropertySymbol>().map { visitPropertySymbol(it, dri, isJavaContext) } +

dokka-subprojects/plugin-base/src/test/kotlin/superFields/DescriptorSuperPropertiesTest.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -318,7 +318,7 @@ class DescriptorSuperPropertiesTest : BaseAbstractTest() {
318318
assertEquals("setA", property.setter?.name)
319319

320320

321-
assertEquals(0, testedClass.functions.size)
321+
assertEquals(2, testedClass.functions.size)
322322

323323
val inheritedFrom = property.extra[InheritedMember]?.inheritedFrom?.values?.single()
324324
assertEquals(DRI(packageName = "test", classNames = "A"), inheritedFrom)
@@ -328,6 +328,7 @@ class DescriptorSuperPropertiesTest : BaseAbstractTest() {
328328
}
329329
}
330330

331+
@OnlySymbols("do not filter out accessors of Java synthetic properties")
331332
@Test
332333
fun `should inherit property visibility from getter`() {
333334
val configuration = dokkaConfiguration {
@@ -362,7 +363,7 @@ class DescriptorSuperPropertiesTest : BaseAbstractTest() {
362363
) {
363364
documentablesMergingStage = { module ->
364365
val testedClass = module.packages.single().classlikes.single { it.name == "B" }
365-
assertEquals(0, testedClass.functions.size)
366+
assertEquals(2, testedClass.functions.size)
366367

367368
val property = testedClass.properties.single { it.name == "a" }
368369

dokka-subprojects/plugin-base/src/test/kotlin/translators/DefaultPsiToDocumentableTranslatorTest.kt

Lines changed: 46 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -412,7 +412,51 @@ class DefaultPsiToDocumentableTranslatorTest : BaseAbstractTest() {
412412
}
413413
}
414414

415+
@OnlyJavaPsi("do not filter out accessors of Java synthetic properties")
415416
@Test
417+
fun `javaPSI - should ignore additional non-accessor setters`() {
418+
testInline(
419+
"""
420+
|/src/main/java/test/A.java
421+
|package test;
422+
|public class A {
423+
| private int a = 1;
424+
|
425+
| public int getA() { return a; }
426+
|
427+
| public void setA(long a) { }
428+
| public void setA(Number a) {}
429+
|
430+
| // the qualifying setter is intentionally in the middle
431+
| // to rule out the order making a difference
432+
| public void setA(int a) { }
433+
|
434+
| public void setA(String a) {}
435+
| public void setA() {}
436+
|
437+
|}
438+
""".trimIndent(),
439+
configuration
440+
) {
441+
documentablesMergingStage = { module ->
442+
val testClass = module.packages.single().classlikes.single { it.name == "A" }
443+
444+
val property = testClass.properties.single { it.name == "a" }
445+
assertNotNull(property.getter)
446+
447+
val setter = property.setter
448+
assertNotNull(setter)
449+
assertEquals(1, setter.parameters.size)
450+
assertEquals(PrimitiveJavaType("int"), setter.parameters[0].type)
451+
452+
val regularSetterFunctions = testClass.functions.filter { it.name == "setA" }
453+
assertEquals(4, regularSetterFunctions.size)
454+
}
455+
}
456+
}
457+
458+
@Test
459+
@OnlyJavaSymbols("do not filter out accessors of Java synthetic properties")
416460
fun `should ignore additional non-accessor setters`() {
417461
testInline(
418462
"""
@@ -531,6 +575,7 @@ class DefaultPsiToDocumentableTranslatorTest : BaseAbstractTest() {
531575
}
532576

533577
@Test
578+
@OnlyJavaSymbols("do not filter out accessors of Java synthetic properties")
534579
fun `should not mark a multi-param setter overload as an accessor`() {
535580
testInline(
536581
"""
@@ -554,7 +599,7 @@ class DefaultPsiToDocumentableTranslatorTest : BaseAbstractTest() {
554599

555600

556601
// the setField function should not qualify to be an accessor due to the second param
557-
assertEquals(1, testClass.functions.size)
602+
assertEquals(2, testClass.functions.size)
558603
assertEquals("setField", testClass.functions[0].name)
559604
}
560605
}

0 commit comments

Comments
 (0)