diff --git a/javascript/js-type-analysis/src/org/jetbrains/dukat/js/type/constraint/properties/ObjectConstraint.kt b/javascript/js-type-analysis/src/org/jetbrains/dukat/js/type/constraint/properties/ObjectConstraint.kt index 9752c5c70..884924efa 100644 --- a/javascript/js-type-analysis/src/org/jetbrains/dukat/js/type/constraint/properties/ObjectConstraint.kt +++ b/javascript/js-type-analysis/src/org/jetbrains/dukat/js/type/constraint/properties/ObjectConstraint.kt @@ -9,7 +9,19 @@ class ObjectConstraint( val instantiatedClass: PropertyOwnerConstraint? = null ) : PropertyOwnerConstraint(owner) { val propertyNames: Set - get() = properties.keys + get() { + val names = properties.keys.toMutableSet() + + if (instantiatedClass is PropertyOwner) { + val classPrototype = instantiatedClass["prototype"] + + if (classPrototype is ObjectConstraint) { + names.addAll(classPrototype.propertyNames) + } + } + + return names + } private val properties = LinkedHashMap() diff --git a/javascript/js-type-analysis/src/org/jetbrains/dukat/js/type/constraint/resolution/constraintToDeclaration.kt b/javascript/js-type-analysis/src/org/jetbrains/dukat/js/type/constraint/resolution/constraintToDeclaration.kt index c0008a69a..37cdb5ee0 100644 --- a/javascript/js-type-analysis/src/org/jetbrains/dukat/js/type/constraint/resolution/constraintToDeclaration.kt +++ b/javascript/js-type-analysis/src/org/jetbrains/dukat/js/type/constraint/resolution/constraintToDeclaration.kt @@ -188,14 +188,6 @@ private fun ObjectConstraint.mapMembers() : List { } ) - if (instantiatedClass is PropertyOwner) { - val classPrototype = instantiatedClass["prototype"] - - if (classPrototype is ObjectConstraint) { - members.addAll(classPrototype.mapMembers()) - } - } - return members } diff --git a/typescript/ts-lowerings/src/org/jetbrains/dukat/tsLowerings/mergeDuplicates/mergeDuplicates.kt b/typescript/ts-lowerings/src/org/jetbrains/dukat/tsLowerings/mergeDuplicates/mergeDuplicates.kt index 8000fb3cf..0b8644f81 100644 --- a/typescript/ts-lowerings/src/org/jetbrains/dukat/tsLowerings/mergeDuplicates/mergeDuplicates.kt +++ b/typescript/ts-lowerings/src/org/jetbrains/dukat/tsLowerings/mergeDuplicates/mergeDuplicates.kt @@ -9,6 +9,7 @@ import org.jetbrains.dukat.tsmodel.FunctionLikeDeclaration import org.jetbrains.dukat.tsmodel.MemberDeclaration import org.jetbrains.dukat.tsmodel.ModuleDeclaration import org.jetbrains.dukat.tsmodel.ParameterDeclaration +import org.jetbrains.dukat.tsmodel.PropertyDeclaration import org.jetbrains.dukat.tsmodel.SourceFileDeclaration import org.jetbrains.dukat.tsmodel.SourceSetDeclaration import org.jetbrains.dukat.tsmodel.TopLevelDeclaration @@ -133,6 +134,7 @@ private fun List.mergeMembers() : List { is ConstructorDeclaration -> constructors += member.mergeDuplicates() is FunctionDeclaration -> methods += member.mergeDuplicates() is CallSignatureDeclaration -> callSignatures += member.mergeDuplicates() + is PropertyDeclaration -> otherMembers += member.mergeDuplicates() else -> otherMembers += member } } @@ -151,6 +153,10 @@ private fun ParameterDeclaration.mergeDuplicates() = copy( type = type.mergeDuplicates() ) +private fun PropertyDeclaration.mergeDuplicates() = copy( + type = type.mergeDuplicates() +) + private fun ConstructorDeclaration.mergeDuplicates() = copy( parameters = parameters.map { it.mergeDuplicates() } ) diff --git a/typescript/ts-lowerings/src/org/jetbrains/dukat/tsLowerings/mergeDuplicates/normalize.kt b/typescript/ts-lowerings/src/org/jetbrains/dukat/tsLowerings/mergeDuplicates/normalize.kt index cc8ad4794..9ed44b994 100644 --- a/typescript/ts-lowerings/src/org/jetbrains/dukat/tsLowerings/mergeDuplicates/normalize.kt +++ b/typescript/ts-lowerings/src/org/jetbrains/dukat/tsLowerings/mergeDuplicates/normalize.kt @@ -5,6 +5,7 @@ import org.jetbrains.dukat.tsmodel.ConstructorDeclaration import org.jetbrains.dukat.tsmodel.FunctionDeclaration import org.jetbrains.dukat.tsmodel.MemberDeclaration import org.jetbrains.dukat.tsmodel.ParameterDeclaration +import org.jetbrains.dukat.tsmodel.PropertyDeclaration import org.jetbrains.dukat.tsmodel.types.FunctionTypeDeclaration import org.jetbrains.dukat.tsmodel.types.ObjectLiteralDeclaration import org.jetbrains.dukat.tsmodel.types.ParameterValueDeclaration @@ -31,6 +32,7 @@ internal fun MemberDeclaration.normalize(): MemberDeclaration { is CallSignatureDeclaration -> this.normalize() is ConstructorDeclaration -> this.normalize() is FunctionDeclaration -> this.normalize() + is PropertyDeclaration -> this.normalize() else -> this } } @@ -47,6 +49,10 @@ internal fun FunctionDeclaration.normalize(substituteType: ParameterValueDeclara uid = IRRELEVANT_UID ) +internal fun PropertyDeclaration.normalize() = copy( + type = type.normalize() +) + internal fun UnionTypeDeclaration.normalize() = copy( params = params.map { it.normalize() } )