2
2
3
3
import graphql_codegen .Util ;
4
4
5
- import java .util .HashMap ;
6
- import java .util .List ;
7
- import java .util .Map ;
8
- import java .util .Set ;
5
+ import java .util .*;
6
+ import java .util .stream .Collectors ;
7
+ import java .util .stream .Stream ;
9
8
10
9
import static com .google .common .base .Preconditions .checkNotNull ;
11
10
@@ -19,18 +18,20 @@ public class JavaType extends JavaCode {
19
18
private final String superClass ;
20
19
private final List <JavaField > members ;
21
20
private final List <JavaTypeReference > inheritedTypes ;
21
+ private final List <String > genericTypes ; // contains the generic types in "class SomeClass<Type1,Type2>"
22
22
private final boolean serializable ;
23
23
private final String description ;
24
24
25
25
private JavaType (String superClass , Set <String > imports ,
26
26
List <JavaTypeReference > inheritedTypes , List <JavaField > members ,
27
- String name , String packagePath , boolean serializable , String description ) {
27
+ String name , String packagePath , List < String > genericTypes , boolean serializable , String description ) {
28
28
this .superClass = superClass ;
29
29
this .imports = imports ;
30
30
this .inheritedTypes = inheritedTypes ;
31
31
this .members = members ;
32
32
this .name = name ;
33
33
this .packagePath = packagePath ;
34
+ this .genericTypes = genericTypes ;
34
35
this .serializable = serializable ;
35
36
this .description = description ;
36
37
}
@@ -72,27 +73,31 @@ public String getDescription() {
72
73
return description ;
73
74
}
74
75
76
+ public List <String > getGenericTypes () {
77
+ return genericTypes ;
78
+ }
79
+
75
80
public static Builder newJavaTypeBuilder () {
76
81
return new Builder ();
77
82
}
78
83
79
84
public static class Builder {
80
85
private String superClass ;
81
86
private List <JavaTypeReference > inheritedTypes ;
82
- private List <JavaField > members ;
87
+ private List <JavaField > members = new ArrayList <>() ;
83
88
private String name ;
84
89
private String packagePath ;
85
90
private boolean serializable ;
86
91
private String description ;
87
92
private Map <String , String > typeNameToPackageOverrideMap = new HashMap <>();
93
+ private List <String > genericTypes ;
88
94
89
95
public Builder withImportMapOverride (Map <String ,String > typeNameToPackageOverrideMap ) {
90
96
checkNotNull (typeNameToPackageOverrideMap );
91
97
this .typeNameToPackageOverrideMap = typeNameToPackageOverrideMap ;
92
98
return this ;
93
99
}
94
100
95
-
96
101
public Builder addImportOverride (String typeName , String packagePath ) {
97
102
typeNameToPackageOverrideMap .put (typeName , packagePath );
98
103
return this ;
@@ -109,7 +114,7 @@ public Builder withInheritedTypes(List<JavaTypeReference> inheritedTypes) {
109
114
}
110
115
111
116
public Builder withMembers (List <JavaField > members ) {
112
- this .members = members ;
117
+ this .members . addAll ( members ) ;
113
118
return this ;
114
119
}
115
120
@@ -134,7 +139,21 @@ public Builder withDescription(String description) {
134
139
}
135
140
136
141
public JavaType build () {
137
- return new JavaType (superClass , buildImports (members , inheritedTypes , typeNameToPackageOverrideMap ), inheritedTypes , members , name , packagePath , serializable , description );
142
+
143
+ Stream <String > membersStream = members .stream ()
144
+ .filter (javaField -> javaField .getTypeReference () != null && javaField .getTypeReference ().isGeneric ())
145
+ .map (javaField -> javaField .getTypeReference ().getTypeName ());
146
+
147
+ Stream <String > membersGenericStream = members .stream ()
148
+ .filter (javaField -> javaField .getTypeReference () != null && !javaField .getTypeReference ().getGenericParameters ().isEmpty ())
149
+ .flatMap (javaField -> javaField .getTypeReference ().getGenericParameters ().stream ())
150
+ .filter (JavaTypeReference ::isGeneric )
151
+ .map (JavaTypeReference ::getTypeName );
152
+
153
+ genericTypes = Stream .concat (membersGenericStream , membersStream ).collect (Collectors .toList ());
154
+
155
+ return new JavaType (superClass , buildImports (members , inheritedTypes , typeNameToPackageOverrideMap ), inheritedTypes , members , name , packagePath ,
156
+ genericTypes , serializable , description );
138
157
}
139
158
}
140
159
}
0 commit comments