Skip to content

Commit 94d0313

Browse files
author
gursajan
committed
changed comments to descriptions and fixed tests
1 parent 578985f commit 94d0313

16 files changed

Lines changed: 121 additions & 197 deletions

‎src/main/java/graphql/introspection/IntrospectionResultToSchema.java‎

Lines changed: 16 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import graphql.PublicApi;
55
import graphql.language.Argument;
66
import graphql.language.AstValueHelper;
7-
import graphql.language.Comment;
7+
import graphql.language.Description;
88
import graphql.language.Directive;
99
import graphql.language.Document;
1010
import graphql.language.EnumTypeDefinition;
@@ -145,7 +145,7 @@ UnionTypeDefinition createUnion(Map<String, Object> input) {
145145

146146
UnionTypeDefinition.Builder unionTypeDefinition = UnionTypeDefinition.newUnionTypeDefinition();
147147
unionTypeDefinition.name((String) input.get("name"));
148-
unionTypeDefinition.comments(toComment((String) input.get("description")));
148+
unionTypeDefinition.description(toDescription((String) input.get("description")));
149149

150150
List<Map<String, Object>> possibleTypes = (List<Map<String, Object>>) input.get("possibleTypes");
151151

@@ -162,14 +162,14 @@ EnumTypeDefinition createEnum(Map<String, Object> input) {
162162
assertTrue(input.get("kind").equals("ENUM"), "wrong input");
163163

164164
EnumTypeDefinition.Builder enumTypeDefinition = EnumTypeDefinition.newEnumTypeDefinition().name((String) input.get("name"));
165-
enumTypeDefinition.comments(toComment((String) input.get("description")));
165+
enumTypeDefinition.description(toDescription((String) input.get("description")));
166166

167167
List<Map<String, Object>> enumValues = (List<Map<String, Object>>) input.get("enumValues");
168168

169169
for (Map<String, Object> enumValue : enumValues) {
170170

171171
EnumValueDefinition.Builder enumValueDefinition = EnumValueDefinition.newEnumValueDefinition().name((String) enumValue.get("name"));
172-
enumValueDefinition.comments(toComment((String) enumValue.get("description")));
172+
enumTypeDefinition.description(toDescription((String) input.get("description")));
173173

174174
createDeprecatedDirective(enumValue, enumValueDefinition);
175175

@@ -184,7 +184,7 @@ InterfaceTypeDefinition createInterface(Map<String, Object> input) {
184184
assertTrue(input.get("kind").equals("INTERFACE"), "wrong input");
185185

186186
InterfaceTypeDefinition.Builder interfaceTypeDefinition = InterfaceTypeDefinition.newInterfaceTypeDefinition().name((String) input.get("name"));
187-
interfaceTypeDefinition.comments(toComment((String) input.get("description")));
187+
interfaceTypeDefinition.description(toDescription((String) input.get("description")));
188188
List<Map<String, Object>> fields = (List<Map<String, Object>>) input.get("fields");
189189
interfaceTypeDefinition.definitions(createFields(fields));
190190

@@ -198,7 +198,7 @@ InputObjectTypeDefinition createInputObject(Map<String, Object> input) {
198198

199199
InputObjectTypeDefinition.Builder inputObjectTypeDefinition = InputObjectTypeDefinition.newInputObjectDefinition()
200200
.name((String) input.get("name"))
201-
.comments(toComment((String) input.get("description")));
201+
.description(toDescription((String) input.get("description")));
202202

203203
List<Map<String, Object>> fields = (List<Map<String, Object>>) input.get("inputFields");
204204
List<InputValueDefinition> inputValueDefinitions = createInputValueDefinitions(fields);
@@ -212,7 +212,7 @@ ObjectTypeDefinition createObject(Map<String, Object> input) {
212212
assertTrue(input.get("kind").equals("OBJECT"), "wrong input");
213213

214214
ObjectTypeDefinition.Builder objectTypeDefinition = ObjectTypeDefinition.newObjectTypeDefinition().name((String) input.get("name"));
215-
objectTypeDefinition.comments(toComment((String) input.get("description")));
215+
objectTypeDefinition.description(toDescription((String) input.get("description")));
216216
if (input.containsKey("interfaces")) {
217217
objectTypeDefinition.implementz(
218218
((List<Map<String, Object>>) input.get("interfaces")).stream()
@@ -231,7 +231,7 @@ private List<FieldDefinition> createFields(List<Map<String, Object>> fields) {
231231
List<FieldDefinition> result = new ArrayList<>();
232232
for (Map<String, Object> field : fields) {
233233
FieldDefinition.Builder fieldDefinition = FieldDefinition.newFieldDefinition().name((String) field.get("name"));
234-
fieldDefinition.comments(toComment((String) field.get("description")));
234+
fieldDefinition.description(toDescription((String) field.get("description")));
235235
fieldDefinition.type(createTypeIndirection((Map<String, Object>) field.get("type")));
236236

237237
createDeprecatedDirective(field, fieldDefinition);
@@ -264,7 +264,7 @@ private List<InputValueDefinition> createInputValueDefinitions(List<Map<String,
264264
for (Map<String, Object> arg : args) {
265265
Type argType = createTypeIndirection((Map<String, Object>) arg.get("type"));
266266
InputValueDefinition.Builder inputValueDefinition = InputValueDefinition.newInputValueDefinition().name((String) arg.get("name")).type(argType);
267-
inputValueDefinition.comments(toComment((String) arg.get("description")));
267+
inputValueDefinition.description(toDescription((String) arg.get("description")));
268268

269269
String valueLiteral = (String) arg.get("defaultValue");
270270
if (valueLiteral != null) {
@@ -296,18 +296,17 @@ private Type createTypeIndirection(Map<String, Object> type) {
296296
}
297297
}
298298

299-
private List<Comment> toComment(String description) {
299+
private Description toDescription(String description) {
300300
if (description == null) {
301-
return Collections.emptyList();
301+
return null;
302302
}
303-
List<Comment> comments = new ArrayList<>();
303+
304304
String[] lines = description.split("\n");
305-
int lineNumber = 0;
306-
for (String line : lines) {
307-
Comment comment = new Comment(line, new SourceLocation(++lineNumber, 1));
308-
comments.add(comment);
305+
if (lines.length > 1) {
306+
return new Description(description, null, true);
307+
} else {
308+
return new Description(description, null, false);
309309
}
310-
return comments;
311310
}
312311

313312
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package graphql.language;
2+
3+
import java.util.List;
4+
import java.util.Map;
5+
6+
public abstract class AbstractDescribedNode<T extends Node> extends AbstractNode<T> implements DescribedNode<T> {
7+
8+
private Description description;
9+
10+
public AbstractDescribedNode(SourceLocation sourceLocation, List<Comment> comments, IgnoredChars ignoredChars, Map<String, String> additionalData, Description description) {
11+
super(sourceLocation, comments, ignoredChars, additionalData);
12+
this.description = description;
13+
}
14+
15+
@Override
16+
public Description getDescription() {
17+
return description;
18+
}
19+
}

‎src/main/java/graphql/language/AstPrinter.java‎

Lines changed: 32 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ private NodePrinter<DirectiveLocation> directiveLocation() {
110110

111111
private NodePrinter<EnumTypeDefinition> enumTypeDefinition() {
112112
return (out, node) -> {
113-
out.printf("%s", comments(node));
113+
out.printf("%s", description(node));
114114
out.printf("%s",
115115
spaced(
116116
"enum",
@@ -127,7 +127,7 @@ private NodePrinter<EnumValue> enumValue() {
127127

128128
private NodePrinter<EnumValueDefinition> enumValueDefinition() {
129129
return (out, node) -> {
130-
out.printf("%s", comments(node));
130+
out.printf("%s", description(node));
131131
out.printf("%s",
132132
spaced(
133133
node.getName(),
@@ -158,12 +158,12 @@ private NodePrinter<Field> field() {
158158
private NodePrinter<FieldDefinition> fieldDefinition() {
159159
final String argSep = compactMode ? "," : ", ";
160160
return (out, node) -> {
161-
out.printf("%s", comments(node));
162161
String args;
163-
if (hasComments(node.getInputValueDefinitions()) && !compactMode) {
162+
if (hasDescription(node.getInputValueDefinitions()) && !compactMode) {
163+
out.printf("%s", description(node));
164164
args = join(node.getInputValueDefinitions(), "\n");
165165
out.printf("%s", node.getName() +
166-
wrap("(\n", args, "\n)") +
166+
wrap("(\n", args, ")") +
167167
": " +
168168
spaced(
169169
type(node.getType()),
@@ -173,7 +173,7 @@ private NodePrinter<FieldDefinition> fieldDefinition() {
173173
} else {
174174
args = join(node.getInputValueDefinitions(), argSep);
175175
out.printf("%s", node.getName() +
176-
wrap("(", args, ")") +
176+
wrap( "(", args, ")") +
177177
": " +
178178
spaced(
179179
type(node.getType()),
@@ -184,8 +184,16 @@ private NodePrinter<FieldDefinition> fieldDefinition() {
184184
};
185185
}
186186

187-
private boolean hasComments(List<? extends Node> nodes) {
188-
return nodes.stream().anyMatch(it -> it.getComments().size() > 0);
187+
// private boolean hasDescription(Node<?> node) {
188+
// Description description = ((AbstractDescribedNode) node).getDescription();
189+
// if (description == null || description.getContent() == null || description.getContent().length() == 0 ) {
190+
// return false;
191+
// }
192+
// return true;
193+
// }
194+
195+
private boolean hasDescription(List<? extends Node> nodes) {
196+
return nodes.stream().anyMatch(it -> ((AbstractDescribedNode) it).getDescription() != null);
189197
}
190198

191199
private NodePrinter<FragmentDefinition> fragmentDefinition() {
@@ -217,7 +225,6 @@ private NodePrinter<InlineFragment> inlineFragment() {
217225
String directives = directives(node.getDirectives());
218226
String selectionSet = node(node.getSelectionSet());
219227

220-
out.printf("%s", comments(node));
221228
out.printf("%s", spaced(
222229
"...",
223230
typeCondition,
@@ -229,7 +236,7 @@ private NodePrinter<InlineFragment> inlineFragment() {
229236

230237
private NodePrinter<InputObjectTypeDefinition> inputObjectTypeDefinition() {
231238
return (out, node) -> {
232-
out.printf("%s", comments(node));
239+
out.printf("%s", description(node));
233240
out.printf("%s", spaced(
234241
"input",
235242
node.getName(),
@@ -245,7 +252,7 @@ private NodePrinter<InputValueDefinition> inputValueDefinition() {
245252
String defaultValueEquals = compactMode ? "=" : "= ";
246253
return (out, node) -> {
247254
Value defaultValue = node.getDefaultValue();
248-
out.printf("%s", comments(node));
255+
out.printf("%s", description(node));
249256
out.printf("%s", spaced(
250257
node.getName() + nameTypeSep + type(node.getType()),
251258
wrap(defaultValueEquals, defaultValue, ""),
@@ -257,7 +264,7 @@ private NodePrinter<InputValueDefinition> inputValueDefinition() {
257264

258265
private NodePrinter<InterfaceTypeDefinition> interfaceTypeDefinition() {
259266
return (out, node) -> {
260-
out.printf("%s", comments(node));
267+
out.printf("%s", description(node));
261268
out.printf("%s", spaced(
262269
"interface",
263270
node.getName(),
@@ -300,7 +307,7 @@ private NodePrinter<OperationTypeDefinition> operationTypeDefinition() {
300307

301308
private NodePrinter<ObjectTypeDefinition> objectTypeDefinition() {
302309
return (out, node) -> {
303-
out.printf("%s", comments(node));
310+
out.printf("%s", description(node));
304311
out.printf("%s", spaced(
305312
"type",
306313
node.getName(),
@@ -313,14 +320,13 @@ private NodePrinter<ObjectTypeDefinition> objectTypeDefinition() {
313320

314321
private NodePrinter<SelectionSet> selectionSet() {
315322
return (out, node) -> {
316-
out.printf("%s", comments(node));
317323
out.printf("%s", block(node.getSelections()));
318324
};
319325
}
320326

321327
private NodePrinter<ScalarTypeDefinition> scalarTypeDefinition() {
322328
return (out, node) -> {
323-
out.printf("%s", comments(node));
329+
out.printf("%s", description(node));
324330
out.printf("%s", spaced(
325331
"scalar",
326332
node.getName(),
@@ -331,7 +337,6 @@ private NodePrinter<ScalarTypeDefinition> scalarTypeDefinition() {
331337

332338
private NodePrinter<SchemaDefinition> schemaDefinition() {
333339
return (out, node) -> {
334-
out.printf("%s", comments(node));
335340
out.printf("%s", spaced(
336341
"schema",
337342
directives(node.getDirectives()),
@@ -387,7 +392,7 @@ private NodePrinter<UnionTypeDefinition> unionTypeDefinition() {
387392
String barSep = compactMode ? "|" : " | ";
388393
String equals = compactMode ? "=" : "= ";
389394
return (out, node) -> {
390-
out.printf("%s", comments(node));
395+
out.printf("%s", description(node));
391396
out.printf("%s", spaced(
392397
"union",
393398
node.getName(),
@@ -489,16 +494,21 @@ private String value(Value value) {
489494
return "";
490495
}
491496

492-
private String comments(Node<?> node) {
493-
List<Comment> comments = nvl(node.getComments());
494-
if (isEmpty(comments) || compactMode) {
497+
private String description(Node<?> node) {
498+
Description description = ((AbstractDescribedNode) node).getDescription();
499+
if (description == null || description.getContent() == null || compactMode) {
495500
return "";
496501
}
497-
String s = comments.stream().map(c -> "#" + c.getContent()).collect(joining("\n", "", "\n"));
502+
String s;
503+
boolean startNewLine = description.getContent().charAt(0) == '\n';
504+
if (description.isMultiLine()) {
505+
s = "\"\"\"" + (startNewLine ? "" : "\n") + description.getContent() + "\n\"\"\"\n";
506+
} else {
507+
s = "\"" + description.getContent() + "\"\n";
508+
}
498509
return s;
499510
}
500511

501-
502512
private String directives(List<Directive> directives) {
503513
return join(nvl(directives), " ");
504514
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package graphql.language;
2+
3+
public interface DescribedNode<T extends Node> extends Node<T> {
4+
5+
/**
6+
* @return the description of this node
7+
*/
8+
Description getDescription();
9+
10+
}

‎src/main/java/graphql/language/DirectiveDefinition.java‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
import static java.util.Collections.emptyMap;
1818

1919
@PublicApi
20-
public class DirectiveDefinition extends AbstractNode<DirectiveDefinition> implements SDLDefinition<DirectiveDefinition>, NamedNode<DirectiveDefinition> {
20+
public class DirectiveDefinition extends AbstractDescribedNode<DirectiveDefinition> implements SDLDefinition<DirectiveDefinition>, NamedNode<DirectiveDefinition> {
2121
private final String name;
2222
private final Description description;
2323
private final List<InputValueDefinition> inputValueDefinitions;
@@ -35,7 +35,7 @@ protected DirectiveDefinition(String name,
3535
List<Comment> comments,
3636
IgnoredChars ignoredChars,
3737
Map<String, String> additionalData) {
38-
super(sourceLocation, comments, ignoredChars, additionalData);
38+
super(sourceLocation, comments, ignoredChars, additionalData, description);
3939
this.name = name;
4040
this.description = description;
4141
this.inputValueDefinitions = inputValueDefinitions;

‎src/main/java/graphql/language/EnumTypeDefinition.java‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
import static java.util.Collections.emptyMap;
1717

1818
@PublicApi
19-
public class EnumTypeDefinition extends AbstractNode<EnumTypeDefinition> implements TypeDefinition<EnumTypeDefinition>, DirectivesContainer<EnumTypeDefinition>, NamedNode<EnumTypeDefinition> {
19+
public class EnumTypeDefinition extends AbstractDescribedNode<EnumTypeDefinition> implements TypeDefinition<EnumTypeDefinition>, DirectivesContainer<EnumTypeDefinition>, NamedNode<EnumTypeDefinition> {
2020
private final String name;
2121
private final Description description;
2222
private final List<EnumValueDefinition> enumValueDefinitions;
@@ -33,7 +33,7 @@ protected EnumTypeDefinition(String name,
3333
SourceLocation sourceLocation,
3434
List<Comment> comments,
3535
IgnoredChars ignoredChars, Map<String, String> additionalData) {
36-
super(sourceLocation, comments, ignoredChars, additionalData);
36+
super(sourceLocation, comments, ignoredChars, additionalData, description);
3737
this.name = name;
3838
this.description = description;
3939
this.directives = (null == directives) ? new ArrayList<>() : directives;

‎src/main/java/graphql/language/EnumValueDefinition.java‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
import static java.util.Collections.emptyMap;
1818

1919
@PublicApi
20-
public class EnumValueDefinition extends AbstractNode<EnumValueDefinition> implements DirectivesContainer<EnumValueDefinition>, NamedNode<EnumValueDefinition> {
20+
public class EnumValueDefinition extends AbstractDescribedNode<EnumValueDefinition> implements DirectivesContainer<EnumValueDefinition>, NamedNode<EnumValueDefinition> {
2121
private final String name;
2222
private final Description description;
2323
private final List<Directive> directives;
@@ -31,7 +31,7 @@ protected EnumValueDefinition(String name,
3131
SourceLocation sourceLocation,
3232
List<Comment> comments,
3333
IgnoredChars ignoredChars, Map<String, String> additionalData) {
34-
super(sourceLocation, comments, ignoredChars, additionalData);
34+
super(sourceLocation, comments, ignoredChars, additionalData, description);
3535
this.name = name;
3636
this.description = description;
3737
this.directives = (null == directives) ? new ArrayList<>() : directives;

‎src/main/java/graphql/language/FieldDefinition.java‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
import static java.util.Collections.emptyMap;
1818

1919
@PublicApi
20-
public class FieldDefinition extends AbstractNode<FieldDefinition> implements DirectivesContainer<FieldDefinition>, NamedNode<FieldDefinition> {
20+
public class FieldDefinition extends AbstractDescribedNode<FieldDefinition> implements DirectivesContainer<FieldDefinition>, NamedNode<FieldDefinition> {
2121
private final String name;
2222
private final Type type;
2323
private final Description description;
@@ -38,7 +38,7 @@ protected FieldDefinition(String name,
3838
List<Comment> comments,
3939
IgnoredChars ignoredChars,
4040
Map<String, String> additionalData) {
41-
super(sourceLocation, comments, ignoredChars, additionalData);
41+
super(sourceLocation, comments, ignoredChars, additionalData, description);
4242
this.description = description;
4343
this.name = name;
4444
this.type = type;

‎src/main/java/graphql/language/InputObjectTypeDefinition.java‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
import static graphql.language.NodeChildrenContainer.newNodeChildrenContainer;
1717

1818
@PublicApi
19-
public class InputObjectTypeDefinition extends AbstractNode<InputObjectTypeDefinition> implements TypeDefinition<InputObjectTypeDefinition>, DirectivesContainer<InputObjectTypeDefinition>, NamedNode<InputObjectTypeDefinition> {
19+
public class InputObjectTypeDefinition extends AbstractDescribedNode<InputObjectTypeDefinition> implements TypeDefinition<InputObjectTypeDefinition>, DirectivesContainer<InputObjectTypeDefinition>, NamedNode<InputObjectTypeDefinition> {
2020

2121
private final String name;
2222
private final Description description;
@@ -35,7 +35,7 @@ protected InputObjectTypeDefinition(String name,
3535
List<Comment> comments,
3636
IgnoredChars ignoredChars,
3737
Map<String, String> additionalData) {
38-
super(sourceLocation, comments, ignoredChars, additionalData);
38+
super(sourceLocation, comments, ignoredChars, additionalData, description);
3939
this.name = name;
4040
this.description = description;
4141
this.directives = directives;

0 commit comments

Comments
 (0)