Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(302)

Unified Diff: pkg/analysis_server/tool/spec/codegen_java_types.dart

Issue 515953002: Fixes in the Outline type generation and some cleanup in codegen_java_types.dart (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: review Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « editor/tools/plugins/com.google.dart.server/src/com/google/dart/server/generated/types/Outline.java ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/analysis_server/tool/spec/codegen_java_types.dart
diff --git a/pkg/analysis_server/tool/spec/codegen_java_types.dart b/pkg/analysis_server/tool/spec/codegen_java_types.dart
index de990aed4d6d6664371c088257a344953120686c..6cbe5104b91eb394e915d32986d0d960b7cce110 100644
--- a/pkg/analysis_server/tool/spec/codegen_java_types.dart
+++ b/pkg/analysis_server/tool/spec/codegen_java_types.dart
@@ -113,29 +113,27 @@ class CodegenJavaType extends CodegenJavaVisitor {
});
//
- // Extra fields on the Element type such as:
- // private static final int ABSTRACT = 0x01;
- //
- if (className == 'Element') {
- _extraFieldsOnElement.forEach((String name, String value) {
- publicField(javaName(name), () {
- writeln('private static final int ${name} = ${value};');
- });
- });
- }
-
- //
// "private static String name;" fields:
//
TypeObject typeObject = typeDef.type as TypeObject;
List<TypeObjectField> fields = typeObject.fields;
for (TypeObjectField field in fields) {
- privateField(javaName(field.name), () {
- javadocComment(toHtmlVisitor.collectHtml(() {
- toHtmlVisitor.translateHtml(field.html);
- }));
- writeln(
- 'private final ${javaType(field.type)} ${javaName(field.name)};');
+ if (!(className == 'Outline' && javaName(field.name) == 'children')) {
+ privateField(javaName(field.name), () {
+ javadocComment(toHtmlVisitor.collectHtml(() {
+ toHtmlVisitor.translateHtml(field.html);
+ }));
+ writeln(
+ 'private final ${javaType(field.type)} ${javaName(field.name)};');
+ });
+ }
+ }
+ if (className == 'Outline') {
+ privateField(javaName('parent'), () {
+ writeln('private final Outline parent;');
+ });
+ privateField(javaName('children'), () {
+ writeln('private List<Outline> children;');
});
}
@@ -149,26 +147,36 @@ class CodegenJavaType extends CodegenJavaVisitor {
write('public ${className}(');
// write out parameters to constructor
List<String> parameters = new List();
+ if (className == 'Outline') {
+ parameters.add('Outline parent');
+ }
for (TypeObjectField field in fields) {
- if (!_isTypeFieldInUpdateContentUnionType(className, field.name)) {
+ if (!_isTypeFieldInUpdateContentUnionType(className, field.name) &&
+ !(className == 'Outline' && javaName(field.name) == 'children')) {
parameters.add('${javaType(field.type)} ${javaName(field.name)}');
}
}
write(parameters.join(', '));
writeln(') {');
// write out the assignments in the body of the constructor
- for (TypeObjectField field in fields) {
- if (!_isTypeFieldInUpdateContentUnionType(className, field.name)) {
- writeln(
- ' this.${javaName(field.name)} = ${javaName(field.name)};');
- } else if (className == 'AddContentOverlay') {
- writeln(' this.type = "add";');
- } else if (className == 'ChangeContentOverlay') {
- writeln(' this.type = "change";');
- } else if (className == 'RemoveContentOverlay') {
- writeln(' this.type = "remove";');
+ indent(() {
+ if (className == 'Outline') {
+ writeln('this.parent = parent;');
}
- }
+ for (TypeObjectField field in fields) {
+ if (!_isTypeFieldInUpdateContentUnionType(className, field.name) &&
+ !(className == 'Outline' && javaName(field.name) == 'children')) {
+ writeln(
+ 'this.${javaName(field.name)} = ${javaName(field.name)};');
+ } else if (className == 'AddContentOverlay') {
+ writeln('this.type = "add";');
+ } else if (className == 'ChangeContentOverlay') {
+ writeln('this.type = "change";');
+ } else if (className == 'RemoveContentOverlay') {
+ writeln('this.type = "remove";');
+ }
+ }
+ });
writeln('}');
});
@@ -198,73 +206,111 @@ class CodegenJavaType extends CodegenJavaVisitor {
// String x = jsonObject.get("x").getAsString();
// return new Y(x);
// }
- publicMethod('fromJson', () {
- writeln('public static ${className} fromJson(JsonObject jsonObject) {');
- indent(() {
- for (TypeObjectField field in fields) {
- write('${javaType(field.type)} ${javaName(field.name)} = ');
- if (field.optional) {
- write(
- 'jsonObject.get("${javaName(field.name)}") == null ? null : ');
- }
- if (isDeclaredInSpec(field.type)) {
- write('${javaType(field.type)}.fromJson(');
- write(
- 'jsonObject.get("${javaName(field.name)}").getAsJsonObject())');
- } else {
- if (isList(field.type)) {
- if (javaType(field.type).endsWith('<String>')) {
- write(
- 'JsonUtilities.decodeStringList(jsonObject.get("${javaName(field.name)}").${_getAsTypeMethodName(field.type)}())');
+ if (className != 'Outline') {
+ publicMethod('fromJson', () {
+ writeln(
+ 'public static ${className} fromJson(JsonObject jsonObject) {');
+ indent(() {
+ for (TypeObjectField field in fields) {
+ write('${javaType(field.type)} ${javaName(field.name)} = ');
+ if (field.optional) {
+ write(
+ 'jsonObject.get("${javaName(field.name)}") == null ? null : ');
+ }
+ if (isDeclaredInSpec(field.type)) {
+ write('${javaType(field.type)}.fromJson(');
+ write(
+ 'jsonObject.get("${javaName(field.name)}").getAsJsonObject())');
+ } else {
+ if (isList(field.type)) {
+ if (javaType(field.type).endsWith('<String>')) {
+ write(
+ 'JsonUtilities.decodeStringList(jsonObject.get("${javaName(field.name)}").${_getAsTypeMethodName(field.type)}())');
+ } else {
+ write(
+ '${javaType((field.type as TypeList).itemType)}.fromJsonArray(jsonObject.get("${javaName(field.name)}").${_getAsTypeMethodName(field.type)}())');
+ }
+ } else if (isArray(field.type)) {
+ if (javaType(field.type).startsWith('Integer')) {
+ write(
+ 'JsonUtilities.decodeIntegerArray(jsonObject.get("${javaName(field.name)}").${_getAsTypeMethodName(field.type)}())');
+ }
} else {
write(
- '${javaType((field.type as TypeList).itemType)}.fromJsonArray(jsonObject.get("${javaName(field.name)}").${_getAsTypeMethodName(field.type)}())');
- }
- } else if (isArray(field.type)) {
- if (javaType(field.type).startsWith('Integer')) {
- write(
- 'JsonUtilities.decodeIntegerArray(jsonObject.get("${javaName(field.name)}").${_getAsTypeMethodName(field.type)}())');
+ 'jsonObject.get("${javaName(field.name)}").${_getAsTypeMethodName(field.type)}()');
}
- } else {
- write(
- 'jsonObject.get("${javaName(field.name)}").${_getAsTypeMethodName(field.type)}()');
}
+ writeln(';');
}
- writeln(';');
- }
- write('return new ${className}(');
- List<String> parameters = new List();
- for (TypeObjectField field in fields) {
- if (!_isTypeFieldInUpdateContentUnionType(className, field.name)) {
- parameters.add('${javaName(field.name)}');
+ write('return new ${className}(');
+ List<String> parameters = new List();
+ for (TypeObjectField field in fields) {
+ if (!_isTypeFieldInUpdateContentUnionType(
+ className,
+ field.name)) {
+ parameters.add('${javaName(field.name)}');
+ }
}
- }
- write(parameters.join(', '));
- writeln(');');
+ write(parameters.join(', '));
+ writeln(');');
+ });
+ writeln('}');
});
- writeln('}');
- });
+ } else {
+ publicMethod('fromJson', () {
+ writeln(
+ '''private Outline fromJson(Outline parent, JsonObject outlineObject) {
+ JsonObject elementObject = outlineObject.get("element").getAsJsonObject();
+ Element element = Element.fromJson(elementObject);
+ int offset = outlineObject.get("offset").getAsInt();
+ int length = outlineObject.get("length").getAsInt();
+
+ // create outline object
+ Outline outline = new Outline(parent, element, offset, length);
+
+ // compute children recursively
+ List<Outline> childrenList = Lists.newArrayList();
+ JsonElement childrenJsonArray = outlineObject.get("children");
+ if (childrenJsonArray instanceof JsonArray) {
+ Iterator<JsonElement> childrenElementIterator = ((JsonArray) childrenJsonArray).iterator();
+ while (childrenElementIterator.hasNext()) {
+ JsonObject childObject = childrenElementIterator.next().getAsJsonObject();
+ childrenList.add(fromJson(outline, childObject));
+ }
+ }
+ outline.setChildren(childrenList);
+ return outline;
+ }''');
+ });
+ publicMethod('setChildren', () {
+ writeln('''public void setChildren(List<Outline> children) {
+ this.children = children;
+ }''');
+ });
+ }
//
// fromJson(JsonArray) factory constructor
//
- publicMethod('fromJsonArray', () {
- writeln(
- 'public static List<${className}> fromJsonArray(JsonArray jsonArray) {');
- indent(() {
- writeln('if (jsonArray == null) {');
- writeln(' return EMPTY_LIST;');
- writeln('}');
+ if (className != 'Outline') {
+ publicMethod('fromJsonArray', () {
writeln(
- 'ArrayList<${className}> list = new ArrayList<${className}>(jsonArray.size());');
- writeln('Iterator<JsonElement> iterator = jsonArray.iterator();');
- writeln('while (iterator.hasNext()) {');
- writeln(' list.add(fromJson(iterator.next().getAsJsonObject()));');
+ 'public static List<${className}> fromJsonArray(JsonArray jsonArray) {');
+ indent(() {
+ writeln('if (jsonArray == null) {');
+ writeln(' return EMPTY_LIST;');
+ writeln('}');
+ writeln(
+ 'ArrayList<${className}> list = new ArrayList<${className}>(jsonArray.size());');
+ writeln('Iterator<JsonElement> iterator = jsonArray.iterator();');
+ writeln('while (iterator.hasNext()) {');
+ writeln(' list.add(fromJson(iterator.next().getAsJsonObject()));');
+ writeln('}');
+ writeln('return list;');
+ });
writeln('}');
- writeln('return list;');
});
- writeln('}');
- });
+ }
//
// toJson() method, example:
@@ -274,27 +320,29 @@ class CodegenJavaType extends CodegenJavaVisitor {
// jsonObject.addProperty("y", y);
// return jsonObject;
// }
- publicMethod('toJson', () {
- writeln('public JsonObject toJson() {');
- indent(() {
- writeln('JsonObject jsonObject = new JsonObject();');
- for (TypeObjectField field in fields) {
- if (!isObject(field.type)) {
- if (field.optional) {
- writeln('if (${javaName(field.name)} != null) {');
- indent(() {
+ if (className != 'Outline') {
+ publicMethod('toJson', () {
+ writeln('public JsonObject toJson() {');
+ indent(() {
+ writeln('JsonObject jsonObject = new JsonObject();');
+ for (TypeObjectField field in fields) {
+ if (!isObject(field.type)) {
+ if (field.optional) {
+ writeln('if (${javaName(field.name)} != null) {');
+ indent(() {
+ _writeOutJsonObjectAddStatement(field);
+ });
+ writeln('}');
+ } else {
_writeOutJsonObjectAddStatement(field);
- });
- writeln('}');
- } else {
- _writeOutJsonObjectAddStatement(field);
+ }
}
}
- }
- writeln('return jsonObject;');
+ writeln('return jsonObject;');
+ });
+ writeln('}');
});
- writeln('}');
- });
+ }
//
// equals() method
@@ -310,7 +358,7 @@ class CodegenJavaType extends CodegenJavaVisitor {
indent(() {
List<String> equalsForField = new List<String>();
for (TypeObjectField field in fields) {
- equalsForField.add(_equalsLogicForField(field, 'other'));
+ equalsForField.add(_getEqualsLogicForField(field, 'other'));
}
write(equalsForField.join(' && \n'));
});
@@ -382,7 +430,7 @@ class CodegenJavaType extends CodegenJavaVisitor {
writeln('builder.append(\"[\");');
for (int i = 0; i < fields.length; i++) {
writeln("builder.append(\"${javaName(fields[i].name)}=\");");
- write("builder.append(${_toStringForField(fields[i])}");
+ write("builder.append(${_getToStringForField(fields[i])}");
if (i + 1 != fields.length) {
// this is not the last field
write(' + \", \"');
@@ -395,20 +443,8 @@ class CodegenJavaType extends CodegenJavaVisitor {
writeln('}');
});
- //
- // Extra methods for the Element type such as:
- // public boolean isFinal() {
- // return (flags & FINAL) != 0;
- // }
- //
if (className == 'Element') {
- _extraMethodsOnElement.forEach((String methodName, String fieldName) {
- publicMethod(methodName, () {
- writeln('public boolean ${methodName}() {');
- writeln(' return (flags & ${fieldName}) != 0;');
- writeln('}');
- });
- });
+ _writeExtraContentInElementType();
}
});
@@ -438,7 +474,36 @@ class CodegenJavaType extends CodegenJavaVisitor {
});
}
- String _equalsLogicForField(TypeObjectField field, String other) {
+ /**
+ * This method writes extra fields and methods to the Element type.
+ */
+ void _writeExtraContentInElementType() {
+ //
+ // Extra fields on the Element type such as:
+ // private static final int ABSTRACT = 0x01;
+ //
+ _extraFieldsOnElement.forEach((String name, String value) {
+ publicField(javaName(name), () {
+ writeln('private static final int ${name} = ${value};');
+ });
+ });
+
+ //
+ // Extra methods for the Element type such as:
+ // public boolean isFinal() {
+ // return (flags & FINAL) != 0;
+ // }
+ //
+ _extraMethodsOnElement.forEach((String methodName, String fieldName) {
+ publicMethod(methodName, () {
+ writeln('public boolean ${methodName}() {');
+ writeln(' return (flags & ${fieldName}) != 0;');
+ writeln('}');
+ });
+ });
+ }
+
+ String _getEqualsLogicForField(TypeObjectField field, String other) {
String name = javaName(field.name);
if (isPrimitive(field.type)) {
return '${other}.${name} == ${name}';
@@ -477,7 +542,11 @@ class CodegenJavaType extends CodegenJavaVisitor {
}
}
- String _toStringForField(TypeObjectField field) {
+ /**
+ * For some [TypeObjectField] return the [String] source for the field value
+ * for the toString generation.
+ */
+ String _getToStringForField(TypeObjectField field) {
String name = javaName(field.name);
if (isArray(field.type) || isList(field.type)) {
return 'StringUtils.join(${name}, ", ")';
@@ -486,6 +555,10 @@ class CodegenJavaType extends CodegenJavaVisitor {
}
}
+ /**
+ * For some [TypeObjectField] write out the source that adds the field
+ * information to the 'jsonObject'.
+ */
void _writeOutJsonObjectAddStatement(TypeObjectField field) {
String name = javaName(field.name);
if (isDeclaredInSpec(field.type)) {
« no previous file with comments | « editor/tools/plugins/com.google.dart.server/src/com/google/dart/server/generated/types/Outline.java ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698