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

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

Issue 725143004: Format and sort analyzer and analysis_server packages. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 1 month 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
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 ea003cb61138d4664e76a480ca17e93d9f5d3edb..e459087e6d9705bd29fae76c0c13e6cf90e31252 100644
--- a/pkg/analysis_server/tool/spec/codegen_java_types.dart
+++ b/pkg/analysis_server/tool/spec/codegen_java_types.dart
@@ -15,12 +15,64 @@ import 'codegen_tools.dart';
import 'from_html.dart';
import 'implied_types.dart';
-/**
- * Type references in the spec that are named something else in Java.
- */
-const Map<String, String> _typeRenames = const {
- 'Override': 'OverrideMember',
-};
+final String pathToGenTypes =
+ '../../../../editor/tools/plugins/com.google.dart.server/src/com/google/dart/server/generated/types/';
+
+final GeneratedDirectory targetDir = new GeneratedDirectory(pathToGenTypes, () {
+ Api api = readApi();
+ Map<String, ImpliedType> impliedTypes = computeImpliedTypes(api);
+ Map<String, FileContentsComputer> map =
+ new Map<String, FileContentsComputer>();
+ for (ImpliedType impliedType in impliedTypes.values) {
+ String typeNameInSpec = capitalize(impliedType.camelName);
+ bool isRefactoringFeedback = impliedType.kind == 'refactoringFeedback';
+ bool isRefactoringOption = impliedType.kind == 'refactoringOptions';
+ if (impliedType.kind == 'typeDefinition' ||
+ isRefactoringFeedback ||
+ isRefactoringOption) {
+ TypeDecl type = impliedType.type;
+ if (type is TypeObject || type is TypeEnum) {
+ // This is for situations such as 'Override' where the name in the spec
+ // doesn't match the java object that we generate:
+ String typeNameInJava = typeNameInSpec;
+ if (_typeRenames.containsKey(typeNameInSpec)) {
+ typeNameInJava = _typeRenames[typeNameInSpec];
+ }
+ map['${typeNameInJava}.java'] = () {
+ String superclassName = null;
+ if (isRefactoringFeedback) {
+ superclassName = 'RefactoringFeedback';
+ }
+ if (isRefactoringOption) {
+ superclassName = 'RefactoringOptions';
+ }
+ // configure accessors
+ bool generateGetters = true;
+ bool generateSetters = false;
+ if (isRefactoringOption ||
+ typeNameInSpec == 'RefactoringMethodParameter') {
+ generateSetters = true;
+ }
+ // create the visitor
+ CodegenJavaType visitor = new CodegenJavaType(
+ api,
+ typeNameInJava,
+ superclassName,
+ generateGetters,
+ generateSetters);
+ return visitor.collectCode(() {
+ dom.Element doc = type.html;
+ if (impliedType.apiNode is TypeDefinition) {
+ doc = (impliedType.apiNode as TypeDefinition).html;
+ }
+ visitor.emitType(type, doc);
+ });
+ };
+ }
+ }
+ }
+ return map;
+});
/**
* A map between the field names and values for the Element object such as:
@@ -52,6 +104,20 @@ const Map<String, String> _extraMethodsOnElement = const {
'isTopLevelOrStatic': 'TOP_LEVEL_STATIC',
};
+/**
+ * Type references in the spec that are named something else in Java.
+ */
+const Map<String, String> _typeRenames = const {
+ 'Override': 'OverrideMember',
+};
+
+/**
+ * Translate spec_input.html into AnalysisServer.java.
+ */
+main() {
+ targetDir.generate();
+}
+
class CodegenJavaType extends CodegenJavaVisitor {
final String className;
final String superclassName;
@@ -62,6 +128,13 @@ class CodegenJavaType extends CodegenJavaVisitor {
this.generateGetters, this.generateSetters)
: super(api);
+ /**
+ * Get the name of the consumer class for responses to this request.
+ */
+ String consumerName(Request request) {
+ return camelJoin([request.method, 'consumer'], doCapitalize: true);
+ }
+
void emitType(TypeDecl type, dom.Element html) {
outputHeader(javaStyle: true);
writeln('package com.google.dart.server.generated.types;');
@@ -73,6 +146,140 @@ class CodegenJavaType extends CodegenJavaVisitor {
}
}
+ String _getAsTypeMethodName(TypeDecl typeDecl) {
+ String name = javaType(typeDecl, true);
+ if (name == 'String') {
+ return 'getAsString';
+ } else if (name == 'boolean' || name == 'Boolean') {
+ return 'getAsBoolean';
+ } else if (name == 'int' || name == 'Integer') {
+ return 'getAsInt';
+ } else if (name == 'long' || name == 'Long') {
+ return 'getAsLong';
+ } else if (name.startsWith('List')) {
+ return 'getAsJsonArray';
+ } else {
+ // TODO (jwren) cleanup
+ return 'getAsJsonArray';
+ }
+ }
+
+ String _getEqualsLogicForField(TypeObjectField field, String other) {
+ String name = javaName(field.name);
+ if (isPrimitive(field.type) && !field.optional) {
+ return '${other}.${name} == ${name}';
+ } else if (isArray(field.type)) {
+ return 'Arrays.equals(other.${name}, ${name})';
+ } else {
+ return 'ObjectUtilities.equals(${other}.${name}, ${name})';
+ }
+ }
+
+ /**
+ * 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}, ", ")';
+ } else {
+ return name;
+ }
+ }
+
+ bool _isTypeFieldInUpdateContentUnionType(String className,
+ String fieldName) {
+ if ((className == 'AddContentOverlay' ||
+ className == 'ChangeContentOverlay' ||
+ className == 'RemoveContentOverlay') &&
+ fieldName == 'type') {
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ /**
+ * 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('}');
+ });
+ });
+ }
+
+ /**
+ * 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)) {
+ writeln('jsonObject.add("${name}", ${name}.toJson());');
+ } else if (field.type is TypeList) {
+ TypeDecl listItemType = (field.type as TypeList).itemType;
+ String jsonArrayName = 'jsonArray${capitalize(name)}';
+ writeln('JsonArray ${jsonArrayName} = new JsonArray();');
+ writeln('for (${javaType(listItemType)} elt : ${name}) {');
+ indent(() {
+ if (isDeclaredInSpec(listItemType)) {
+ writeln('${jsonArrayName}.add(elt.toJson());');
+ } else {
+ writeln('${jsonArrayName}.add(new JsonPrimitive(elt));');
+ }
+ });
+ writeln('}');
+ writeln('jsonObject.add("${name}", ${jsonArrayName});');
+ } else {
+ writeln('jsonObject.addProperty("${name}", ${name});');
+ }
+ }
+
+ void _writeTypeEnum(TypeDecl type, dom.Element html) {
+ javadocComment(toHtmlVisitor.collectHtml(() {
+ toHtmlVisitor.translateHtml(html);
+ toHtmlVisitor.br();
+ toHtmlVisitor.write('@coverage dart.server.generated.types');
+ }));
+ makeClass('public class ${className}', () {
+ TypeEnum typeEnum = type as TypeEnum;
+ List<TypeEnumValue> values = typeEnum.values;
+ //
+ // enum fields
+ //
+ for (TypeEnumValue value in values) {
+ privateField(javaName(value.value), () {
+ javadocComment(toHtmlVisitor.collectHtml(() {
+ toHtmlVisitor.translateHtml(value.html);
+ }));
+ writeln(
+ 'public static final String ${value.value} = \"${value.value}\";');
+ });
+ }
+ });
+ }
+
void _writeTypeObject(TypeDecl type, dom.Element html) {
writeln('import java.util.Arrays;');
writeln('import java.util.List;');
@@ -512,211 +719,4 @@ class CodegenJavaType extends CodegenJavaVisitor {
});
}
-
- void _writeTypeEnum(TypeDecl type, dom.Element html) {
- javadocComment(toHtmlVisitor.collectHtml(() {
- toHtmlVisitor.translateHtml(html);
- toHtmlVisitor.br();
- toHtmlVisitor.write('@coverage dart.server.generated.types');
- }));
- makeClass('public class ${className}', () {
- TypeEnum typeEnum = type as TypeEnum;
- List<TypeEnumValue> values = typeEnum.values;
- //
- // enum fields
- //
- for (TypeEnumValue value in values) {
- privateField(javaName(value.value), () {
- javadocComment(toHtmlVisitor.collectHtml(() {
- toHtmlVisitor.translateHtml(value.html);
- }));
- writeln(
- 'public static final String ${value.value} = \"${value.value}\";');
- });
- }
- });
- }
-
- /**
- * 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) && !field.optional) {
- return '${other}.${name} == ${name}';
- } else if (isArray(field.type)) {
- return 'Arrays.equals(other.${name}, ${name})';
- } else {
- return 'ObjectUtilities.equals(${other}.${name}, ${name})';
- }
- }
-
- bool _isTypeFieldInUpdateContentUnionType(String className,
- String fieldName) {
- if ((className == 'AddContentOverlay' ||
- className == 'ChangeContentOverlay' ||
- className == 'RemoveContentOverlay') &&
- fieldName == 'type') {
- return true;
- } else {
- return false;
- }
- }
-
- String _getAsTypeMethodName(TypeDecl typeDecl) {
- String name = javaType(typeDecl, true);
- if (name == 'String') {
- return 'getAsString';
- } else if (name == 'boolean' || name == 'Boolean') {
- return 'getAsBoolean';
- } else if (name == 'int' || name == 'Integer') {
- return 'getAsInt';
- } else if (name == 'long' || name == 'Long') {
- return 'getAsLong';
- } else if (name.startsWith('List')) {
- return 'getAsJsonArray';
- } else {
- // TODO (jwren) cleanup
- return 'getAsJsonArray';
- }
- }
-
- /**
- * 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}, ", ")';
- } else {
- return name;
- }
- }
-
- /**
- * 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)) {
- writeln('jsonObject.add("${name}", ${name}.toJson());');
- } else if (field.type is TypeList) {
- TypeDecl listItemType = (field.type as TypeList).itemType;
- String jsonArrayName = 'jsonArray${capitalize(name)}';
- writeln('JsonArray ${jsonArrayName} = new JsonArray();');
- writeln('for (${javaType(listItemType)} elt : ${name}) {');
- indent(() {
- if (isDeclaredInSpec(listItemType)) {
- writeln('${jsonArrayName}.add(elt.toJson());');
- } else {
- writeln('${jsonArrayName}.add(new JsonPrimitive(elt));');
- }
- });
- writeln('}');
- writeln('jsonObject.add("${name}", ${jsonArrayName});');
- } else {
- writeln('jsonObject.addProperty("${name}", ${name});');
- }
- }
-
- /**
- * Get the name of the consumer class for responses to this request.
- */
- String consumerName(Request request) {
- return camelJoin([request.method, 'consumer'], doCapitalize: true);
- }
-}
-
-final String pathToGenTypes =
- '../../../../editor/tools/plugins/com.google.dart.server/src/com/google/dart/server/generated/types/';
-
-final GeneratedDirectory targetDir = new GeneratedDirectory(pathToGenTypes, () {
- Api api = readApi();
- Map<String, ImpliedType> impliedTypes = computeImpliedTypes(api);
- Map<String, FileContentsComputer> map =
- new Map<String, FileContentsComputer>();
- for (ImpliedType impliedType in impliedTypes.values) {
- String typeNameInSpec = capitalize(impliedType.camelName);
- bool isRefactoringFeedback = impliedType.kind == 'refactoringFeedback';
- bool isRefactoringOption = impliedType.kind == 'refactoringOptions';
- if (impliedType.kind == 'typeDefinition' ||
- isRefactoringFeedback ||
- isRefactoringOption) {
- TypeDecl type = impliedType.type;
- if (type is TypeObject || type is TypeEnum) {
- // This is for situations such as 'Override' where the name in the spec
- // doesn't match the java object that we generate:
- String typeNameInJava = typeNameInSpec;
- if (_typeRenames.containsKey(typeNameInSpec)) {
- typeNameInJava = _typeRenames[typeNameInSpec];
- }
- map['${typeNameInJava}.java'] = () {
- String superclassName = null;
- if (isRefactoringFeedback) {
- superclassName = 'RefactoringFeedback';
- }
- if (isRefactoringOption) {
- superclassName = 'RefactoringOptions';
- }
- // configure accessors
- bool generateGetters = true;
- bool generateSetters = false;
- if (isRefactoringOption ||
- typeNameInSpec == 'RefactoringMethodParameter') {
- generateSetters = true;
- }
- // create the visitor
- CodegenJavaType visitor = new CodegenJavaType(
- api,
- typeNameInJava,
- superclassName,
- generateGetters,
- generateSetters);
- return visitor.collectCode(() {
- dom.Element doc = type.html;
- if (impliedType.apiNode is TypeDefinition) {
- doc = (impliedType.apiNode as TypeDefinition).html;
- }
- visitor.emitType(type, doc);
- });
- };
- }
- }
- }
- return map;
-});
-
-/**
- * Translate spec_input.html into AnalysisServer.java.
- */
-main() {
- targetDir.generate();
}
« no previous file with comments | « pkg/analysis_server/tool/spec/codegen_java.dart ('k') | pkg/analysis_server/tool/spec/codegen_matchers.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698