Skip to content

Commit

Permalink
fix bug type parameters
Browse files Browse the repository at this point in the history
  • Loading branch information
ltearno committed Oct 9, 2017
1 parent 5b4edcb commit b9e3091
Show file tree
Hide file tree
Showing 5 changed files with 52 additions and 11 deletions.
7 changes: 7 additions & 0 deletions apis/angular4-api/ts2java.config.json
Expand Up @@ -33,6 +33,13 @@
"UnionOfConcatParamsAndDhKeyDeriveParamsAndEcdhKeyDeriveParamsAndHkdfCtrParamsAndPbkdf2ParamsAndString": "UnionOfCryptoParamsAndString3",
"UnionOfDhImportKeyParamsAndEcKeyImportParamsAndHmacImportParamsAndRsaHashedImportParamsAndString": "UnionOfKeyParams",
"UnionOfSVGCircleElementAndSVGEllipseElementAndSVGImageElementAndSVGLineElementAndSVGPathElementAndSVGPolygonElementAndSVGPolylineElementAndSVGRectElementAndSVGTextElementAndSVGUseElement": "UnionOfSeveralSVGElement"
},
"fr.lteconsulting.jsinterop.ng": {
"ɵStyleData": "ThetaStyleData",
"UnionOfStringAndɵStyleData": "UnionOfStringAndThetaStyleData"
},
"fr.lteconsulting.jsinterop": {
"UnionOfArrayOfɵStyleDataAndɵStyleData": "UnionOfArrayOfThetaStyleDataAndThetaStyleData"
}
},
"adding": {
Expand Down
2 changes: 2 additions & 0 deletions prejavatypes/PreJavaTypeClassOrInterface.ts
Expand Up @@ -139,6 +139,8 @@ export class PreJavaTypeClassOrInterface extends PreJavaType {
}

private extractBaseTypes(type: ts.Type, typeParametersToApplyToAnonymousTypes: PreJavaTypeParameter[], context: ProcessContext) {
if (this.name == 'Observable')
console.log(`yyyy`)
/* ts.Type.getBaseTypes() does not return 'implemented' types, only 'extended'. We merge them in the PreJava tree */
if (type.symbol && type.symbol.getDeclarations()) {
type.symbol.getDeclarations().forEach(decl => {
Expand Down
4 changes: 2 additions & 2 deletions processor.export-phase.ts
Expand Up @@ -325,7 +325,7 @@ export class ExportPhase {
flow.push(`public ${type.getSimpleName(null)}() `)
flow.push(`{`).finishLine()
if (theBaseClassConstructorParameters && theBaseClassConstructorParameters.length) {
flow.pushLineStart(' ').push(`super(${theBaseClassConstructorParameters.map(p => 'null').join(', ')}); `).finishLine().pullLineStart()
flow.pushLineStart(' ').push(`super(${theBaseClassConstructorParameters.map(p => `(${javaWriter.importTypeParametrized(p.type)}) null`).join(', ')}); `).finishLine().pullLineStart()
}
flow.push(`} `).finishLine()
}
Expand All @@ -347,7 +347,7 @@ export class ExportPhase {

flow.push(`{`).finishLine()
if (theBaseClassConstructorParameters && theBaseClassConstructorParameters.length) {
flow.pushLineStart(' ').push(`super(${theBaseClassConstructorParameters.map(p => 'null').join(', ')}); `).finishLine().pullLineStart()
flow.pushLineStart(' ').push(`super(${theBaseClassConstructorParameters.map(p => `(${javaWriter.importTypeParametrized(p.type)}) null`).join(', ')}); `).finishLine().pullLineStart()
}
flow.push(`} `).finishLine()
})
Expand Down
38 changes: 30 additions & 8 deletions transformers.ts
Expand Up @@ -27,14 +27,17 @@ type Transformer = (
export function applyTransformations(typeMap: TypescriptToJavaTypemap, renaming: { [key: string]: { [key: string]: string } }) {
console.log(`removing unsupported types`)

let transformers = [
let initialTransformers = [
removeNotSupportedTypes,
simplifyUnions,
removeOverridingProperties
]

let transformers = [
simplifyUnions,
replaceByFunctionAndProcsLambdaTypes,
//removeOverridingProperties,
deduplicateTypes,
removeEmptyTypes,
ensureAllTypesHaveNameAndPackage,
arrangeMultipleImplementationInheritance,
changeDtoInterfacesIntoClasses,
addMethodsFromInterfaceHierarchy,
Expand All @@ -44,21 +47,32 @@ export function applyTransformations(typeMap: TypescriptToJavaTypemap, renaming:
renameTypes
]

let passCounter = 1
while (true) {
let somethingChanged = false

console.log(`transformation, pass ${passCounter}\n`)
let finalTransformers = [
ensureAllTypesHaveNameAndPackage
]

let doPass = (transformers: Transformer[]) => {
let somethingChanged = false
for (let i = 0; i < transformers.length; i++) {
let result = transformers[i](typeMap, this.baseJavaPackage, renaming)
console.log(`transformer ${i} : ${result}`)
if (result)
somethingChanged = true
}
return somethingChanged
}

console.log(`initial pass`)
doPass(initialTransformers)

let passCounter = 1
while (true) {
console.log(`transformation, pass ${passCounter}\n`)

let somethingChanged = doPass(transformers)
if (!somethingChanged)
break

passCounter++
if (passCounter > 10) {
console.log(`ERROR : too many transformation passes !`)
Expand All @@ -68,6 +82,9 @@ export function applyTransformations(typeMap: TypescriptToJavaTypemap, renaming:
break
}

console.log(`final pass`)
doPass(finalTransformers)

console.log(`transformation applied`)
}

Expand Down Expand Up @@ -624,6 +641,9 @@ export let arrangeMultipleImplementationInheritance: Transformer = function (typ
newType.typeParameters = type.typeParameters && type.typeParameters.slice()
newType.sourceTypes = type.sourceTypes

if (newType.name == 'Observable_Interface')
console.log(`yop`)

type.baseTypes = new Set()
type.baseTypes.add(newType)

Expand All @@ -637,6 +657,8 @@ export let arrangeMultipleImplementationInheritance: Transformer = function (typ

let somethingDone = false
while (maxPasses-- >= 0) {
somethingDone = false

for (let type of typeMap.typeSet()) {
if (type instanceof PreJavaTypeClassOrInterface && type.baseTypes && type.baseTypes.size) {
let implementationSuperTypes: PreJavaType[] = []
Expand Down
12 changes: 11 additions & 1 deletion type-map.ts
Expand Up @@ -391,7 +391,17 @@ export class TypescriptToJavaTypemap {
if (objectType && objectType.objectFlags & ts.ObjectFlags.Reference) {
let reference = type as ts.TypeReference
if (reference.target != type) {
return new PreJavaTypeReference(this.getOrCreatePreJavaTypeForTsType(reference.target, false, typeParametersToApplyToAnonymousTypes), reference.typeArguments ? reference.typeArguments.map(typeArgument => this.getOrCreatePreJavaTypeForTsType(typeArgument, false, typeParametersToApplyToAnonymousTypes)) : null)
let referencedType = this.getOrCreatePreJavaTypeForTsType(reference.target, false, typeParametersToApplyToAnonymousTypes)
if (referencedType.getSimpleName(null) == 'Subscribable')
console.log(`oiyu`)
let typeArguments = null
if (reference.typeArguments && reference.typeArguments.length) {
typeArguments = reference.typeArguments
.filter(typeArgument => !('isThisType' in typeArgument))
.map(typeArgument => this.getOrCreatePreJavaTypeForTsType(typeArgument, false, typeParametersToApplyToAnonymousTypes))
}

return new PreJavaTypeReference(referencedType, typeArguments)
}
}

Expand Down

0 comments on commit b9e3091

Please sign in to comment.