1
1
2
2
package cz .habarta .typescript .generator ;
3
3
4
- import java .lang .reflect .ParameterizedType ;
4
+ import cz .habarta .typescript .generator .util .Pair ;
5
+ import cz .habarta .typescript .generator .util .Utils ;
5
6
import java .lang .reflect .Type ;
6
7
import java .util .ArrayList ;
7
8
import java .util .List ;
@@ -22,47 +23,46 @@ public CustomMappingTypeProcessor(List<Settings.CustomTypeMapping> customMapping
22
23
23
24
@ Override
24
25
public Result processType (Type javaType , Context context ) {
25
- if (javaType instanceof Class ) {
26
- final Class <?> javaClass = (Class <?>) javaType ;
27
- final Settings .CustomTypeMapping mapping = customMappings .get (javaClass .getName ());
28
- if (mapping != null ) {
29
- return new Result (new TsType .BasicType (mapping .tsType .rawName ));
30
- }
26
+ final Pair <Class <?>, List <Type >> rawClassAndTypeArguments = Utils .getRawClassAndTypeArguments (javaType );
27
+ if (rawClassAndTypeArguments == null ) {
28
+ return null ;
29
+ }
30
+ final Class <?> rawClass = rawClassAndTypeArguments .getValue1 ();
31
+ final List <Type > typeArguments = rawClassAndTypeArguments .getValue2 ();
32
+ final Settings .CustomTypeMapping mapping = customMappings .get (rawClass .getName ());
33
+ if (mapping == null ) {
34
+ return null ;
31
35
}
32
- if (javaType instanceof ParameterizedType ) {
33
- final ParameterizedType parameterizedType = (ParameterizedType ) javaType ;
34
- if (parameterizedType .getRawType () instanceof Class ) {
35
- final Class <?> javaClass = (Class <?>) parameterizedType .getRawType ();
36
- final Settings .CustomTypeMapping mapping = customMappings .get (javaClass .getName ());
37
- if (mapping != null ) {
38
- final List <Class <?>> discoveredClasses = new ArrayList <>();
39
- final Function <Integer , TsType > processGenericParameter = index -> {
40
- final Type typeArgument = parameterizedType .getActualTypeArguments ()[index ];
41
- final TypeProcessor .Result typeArgumentResult = context .processType (typeArgument );
42
- discoveredClasses .addAll (typeArgumentResult .getDiscoveredClasses ());
43
- return typeArgumentResult .getTsType ();
44
- };
45
- if (mapping .tsType .typeParameters != null ) {
46
- final List <TsType > tsTypeArguments = new ArrayList <>();
47
- for (String typeParameter : mapping .tsType .typeParameters ) {
48
- final int index = mapping .javaType .typeParameters .indexOf (typeParameter );
49
- final TsType tsType = processGenericParameter .apply (index );
50
- tsTypeArguments .add (tsType );
51
- }
52
- return new Result (new TsType .GenericBasicType (mapping .tsType .rawName , tsTypeArguments ), discoveredClasses );
53
- } else {
54
- final int index = mapping .javaType .typeParameters .indexOf (mapping .tsType .rawName );
55
- if (index != -1 ) {
56
- final TsType tsType = processGenericParameter .apply (index );
57
- return new Result (tsType , discoveredClasses );
58
- } else {
59
- return new Result (new TsType .BasicType (mapping .tsType .rawName ), discoveredClasses );
60
- }
61
- }
36
+
37
+ final List <Class <?>> discoveredClasses = new ArrayList <>();
38
+ final Function <Integer , TsType > processGenericParameter = index -> {
39
+ final Type typeArgument = typeArguments .get (index );
40
+ final TypeProcessor .Result typeArgumentResult = context .processType (typeArgument );
41
+ discoveredClasses .addAll (typeArgumentResult .getDiscoveredClasses ());
42
+ return typeArgumentResult .getTsType ();
43
+ };
44
+ if (mapping .tsType .typeParameters != null ) {
45
+ final List <TsType > tsTypeArguments = new ArrayList <>();
46
+ for (String typeParameter : mapping .tsType .typeParameters ) {
47
+ final TsType tsType ;
48
+ final int index = mapping .javaType .indexOfTypeParameter (typeParameter );
49
+ if (index != -1 ) {
50
+ tsType = processGenericParameter .apply (index );
51
+ } else {
52
+ tsType = new TsType .VerbatimType (typeParameter );
62
53
}
54
+ tsTypeArguments .add (tsType );
55
+ }
56
+ return new Result (new TsType .GenericBasicType (mapping .tsType .rawName , tsTypeArguments ), discoveredClasses );
57
+ } else {
58
+ final int index = mapping .javaType .indexOfTypeParameter (mapping .tsType .rawName );
59
+ if (index != -1 ) {
60
+ final TsType tsType = processGenericParameter .apply (index );
61
+ return new Result (tsType , discoveredClasses );
62
+ } else {
63
+ return new Result (new TsType .BasicType (mapping .tsType .rawName ), discoveredClasses );
63
64
}
64
65
}
65
- return null ;
66
66
}
67
67
68
68
}
0 commit comments