Skip to content

Commit d31e1a5

Browse files
author
Mathias Lorenzen
committed
fix for more scenarios.
1 parent cfb4d29 commit d31e1a5

File tree

9 files changed

+53
-18
lines changed

9 files changed

+53
-18
lines changed

package-lock.json

Lines changed: 3 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
"jasmine": "^2.6.0"
2424
},
2525
"dependencies": {
26-
"@fluffy-spoon/javascript.csharp-parser": "1.0.108",
26+
"@fluffy-spoon/javascript.csharp-parser": "1.0.115",
2727
"npm": "^5.8.0",
2828
"typescript": "^2.8.1"
2929
}

spec/TypeEmitterSpec.ts

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
var fs = require('fs');
2+
3+
import { Emitter, EmitOptions } from '../src/Emitter';
4+
import { Logger } from '../src/Logger';
5+
import { FileEmitOptions } from '../src/FileEmitter';
6+
import { TypeScriptEmitter } from '../src/TypeScriptEmitter';
7+
import { TypeEmitter, TypeEmitOptions } from '../src/Index';
8+
9+
import { CSharpFile, CSharpClass, CSharpMethod, CSharpType, TypeParser } from '@fluffy-spoon/javascript.csharp-parser';
10+
11+
import typescript = require("typescript");
12+
13+
describe("TypeEmitter", function () {
14+
it("should be able to handle type mapping", function (done) {
15+
var typeEmitter = new TypeEmitter(new TypeScriptEmitter());
16+
var typeParser = new TypeParser();
17+
18+
var csharpType = typeParser.parseType("Task<IEnumerable<string>>");
19+
expect(csharpType.name).toBe("Task<>");
20+
expect(csharpType.isGeneric).toBe(true);
21+
expect(csharpType.genericParameters[0].name).toBe("IEnumerable<>");
22+
expect(csharpType.genericParameters[0].isGeneric).toBe(true);
23+
expect(csharpType.genericParameters[0].genericParameters[0].name).toBe("string");
24+
expect(csharpType.genericParameters[0].genericParameters[0].isGeneric).toBe(false);
25+
26+
expect(typeEmitter.convertTypeToTypeScript(csharpType)).toBe("Promise<Array<string>>");
27+
28+
done();
29+
});
30+
31+
});

spec/cases/Class.case.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ public void MyMethod(string foo, params string[] bar) { }
66

77
public void MyNullParameterMethod(string foo = null) { }
88

9+
public Task<IEnumerable<string>> TaskArrayMethod() { }
10+
911
public string foo;
1012
}
1113

spec/cases/Class.expected.d.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
myProperty: string;
44
myMethod(foo: string, ...bar: Array<string>): void;
55
myNullParameterMethod(foo?: string): void;
6+
taskArrayMethod(): Promise<Array<string>>;
67
}
78

89
declare interface MainClass<Foo> {

spec/legacy/adapters/legacyAdapter.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -239,7 +239,9 @@ function LegacyAdapter(contents: any, options: any) {
239239

240240
if (options.customTypeTranslations) {
241241
emitOptions.defaults.typeEmitOptions = <TypeEmitOptions>{
242-
mapper: (type, suggested) => options.customTypeTranslations[type.name] || suggested
242+
mapper: (type, suggested) => {
243+
return options.customTypeTranslations[type.name] || suggested
244+
}
243245
};
244246
}
245247

src/ClassEmitter.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@ export class ClassEmitter {
141141
.filter(x => !!x);
142142

143143
var genericParameters = new Array<ts.TypeParameterDeclaration>();
144-
if (classObject.genericParameters)
144+
if (classObject.isGeneric)
145145
genericParameters = genericParameters.concat(classObject
146146
.genericParameters
147147
.map(x => this

src/InterfaceEmitter.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ export class InterfaceEmitter {
115115
.filter(x => !!x);
116116

117117
var genericParameters = new Array<ts.TypeParameterDeclaration>();
118-
if (interfaceObject.genericParameters)
118+
if (interfaceObject.isGeneric)
119119
genericParameters = genericParameters.concat(interfaceObject
120120
.genericParameters
121121
.map(x => this

src/TypeEmitter.ts

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -66,15 +66,11 @@ export class TypeEmitter {
6666
this.typeScriptEmitter.emitTypeScriptNode(node);
6767
}
6868

69-
emitGenericParameters(genericParameters: CSharpType[], options: TypeEmitOptions) {
70-
this.typeScriptEmitter.write(this.generateGenericParametersString(genericParameters, options));
71-
}
72-
7369
createTypeScriptExpressionWithTypeArguments(type: CSharpType, options: TypeEmitOptions) {
7470
var typeName = this.getNonGenericMatchingTypeMappingAsString(type, options);
7571
return ts.createExpressionWithTypeArguments(
7672
this.createTypeScriptTypeReferenceNodes(
77-
type.genericParameters || [],
73+
type.genericParameters,
7874
options),
7975
ts.createIdentifier(typeName));
8076
}
@@ -118,7 +114,7 @@ export class TypeEmitter {
118114
createTypeScriptTypeReferenceNodes(types: CSharpType[], options: TypeEmitOptions) {
119115
var nodes = new Array<ts.TypeReferenceNode>();
120116
if(!types)
121-
return nodes;
117+
return [];
122118

123119
for(var type of types) {
124120
var node = ts.createTypeReferenceNode(
@@ -151,7 +147,7 @@ export class TypeEmitter {
151147
continue;
152148

153149
let mapping = this.defaultTypeMap[mappingKey];
154-
if (mappingKeyType.genericParameters) {
150+
if (mappingKeyType.isGeneric) {
155151
mapping = this.substituteMultipleGenericReferencesIntoMapping(
156152
mappingKeyType,
157153
type,
@@ -163,7 +159,7 @@ export class TypeEmitter {
163159
}
164160

165161
let mappedValue = this.getNonGenericTypeName(type);
166-
if(type.genericParameters) {
162+
if(type.isGeneric) {
167163
mappedValue += this.generateGenericParametersString(type.genericParameters, options);
168164
}
169165

@@ -175,7 +171,7 @@ export class TypeEmitter {
175171
return null;
176172

177173
var typeName = type.name;
178-
if (type.genericParameters) {
174+
if (type.isGeneric) {
179175
var lastArrowIndex = typeName.lastIndexOf("<");
180176
typeName = typeName.substr(0, lastArrowIndex);
181177
}
@@ -205,13 +201,16 @@ export class TypeEmitter {
205201
}
206202

207203
private generateGenericParametersString(genericParameters: CSharpType[], options: TypeEmitOptions) {
208-
var mapping = "<";
204+
var mapping = "";
205+
206+
mapping += "<";
209207
for(var genericParameter of genericParameters) {
210208
mapping += this.convertTypeToTypeScript(genericParameter, options);
211209
if(genericParameter !== genericParameters[genericParameters.length-1])
212210
mapping += ", ";
213211
}
214212
mapping += ">";
213+
215214
return mapping;
216215
}
217216

@@ -225,7 +224,7 @@ export class TypeEmitter {
225224
var mappingGenericParameter = mappingKeyType.genericParameters[i];
226225
var mappingRealParameter = concreteType.genericParameters[i];
227226

228-
if (mappingGenericParameter.genericParameters) {
227+
if (mappingGenericParameter.isGeneric) {
229228
mapping = this.substituteMultipleGenericReferencesIntoMapping(
230229
mappingGenericParameter,
231230
mappingRealParameter,

0 commit comments

Comments
 (0)