diff --git a/libraries/tools/idl2k/src/main/kotlin/render.kt b/libraries/tools/idl2k/src/main/kotlin/render.kt index 58bcefdde36..d38a826dc53 100644 --- a/libraries/tools/idl2k/src/main/kotlin/render.kt +++ b/libraries/tools/idl2k/src/main/kotlin/render.kt @@ -202,10 +202,9 @@ fun Appendable.render(allTypes: Map, enums: List st.kind == GenerateDefinitionKind.INTERFACE && st.memberAttributes.any { sa -> sa.signature == it.signature } }) } .map { it.dynamicIfUnknownType(allTypesAndEnums) } .groupBy { it.name } @@ -219,10 +218,6 @@ fun Appendable.render(allTypes: Map, enums: List MemberModality.FINAL } - if (iface.name == "XMLDocument" && attribute.name == "onabort") { - println() - } - if (attribute.name in superAttributesByName && attribute.signature !in superSignatures) { System.err.println("Property ${iface.name}.${attribute.name} has different type in super type(s) so will not be generated: ") for ((superTypeName, attributes) in allSuperTypes.map { it.name to it.memberAttributes.filter { it.name == attribute.name }.distinct() }) { @@ -231,10 +226,9 @@ fun Appendable.render(allTypes: Map, enums: List st.kind == GenerateDefinitionKind.INTERFACE && st.memberAttributes.any { it.signature == attribute.signature } } - || allSuperTypes.any { st -> st.kind != GenerateDefinitionKind.INTERFACE && st.memberAttributes.any { it.signature == attribute.signature } })) { + && attribute.kindNotChanged(superAttributesByName) + && (iface.kind == GenerateDefinitionKind.INTERFACE || attribute.hasSuperImplementation(allSuperTypes)) + ) { // then don't generate } else { renderAttributeDeclarationAsProperty(attribute, @@ -288,6 +282,10 @@ fun Appendable.render(allTypes: Map, enums: List>) = superAttributesByName[name].orEmpty().all { it.kind == kind } + +private fun GenerateAttribute.hasSuperImplementation(allSuperTypes: List) = allSuperTypes.any { st -> st.kind != GenerateDefinitionKind.INTERFACE && st.memberAttributes.any { it.signature == signature } } + fun Appendable.renderBuilderFunction(dictionary: GenerateTraitOrClass, allSuperTypes: List, allTypes: Set) { val fields = (dictionary.memberAttributes + allSuperTypes.flatMap { it.memberAttributes }) .distinctBy { it.signature }