Files
sdk/pkg/analysis_server/tool/spec/codegen_analysis_server.dart
T
paulberry@google.com d03c364236 Add a test to verify that analysis server code generation is up to date.
This test will run on the Windows, Linux, and MacOS buildbots, so it
should help ensure that code generation works properly on all of those
platforms.

R=jwren@google.com

Review URL: https://codereview.chromium.org//469543002

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@39201 260f80e4-7a28-3924-810f-c04153c831b5
2014-08-13 15:29:04 +00:00

126 lines
3.6 KiB
Dart

// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
/**
* Code generation for the file "AnalysisServer.java".
*/
library server.generator.java;
import 'api.dart';
import 'codegen_java.dart';
import 'codegen_tools.dart';
class CodegenAnalysisServer extends CodegenJavaVisitor {
CodegenAnalysisServer(Api api) : super(api);
@override
void visitApi() {
outputHeader(javaStyle: true);
writeln('package com.google.dart.server;');
writeln();
writeln('import java.util.List;');
writeln('import java.util.Map;');
writeln();
writeln(
'''/**
* The interface {@code AnalysisServer} defines the behavior of objects that interface to an
* analysis server.
*
* @coverage dart.server
*/'''
);
makeClass('public interface AnalysisServer', () {
//
// addAnalysisServerListener(..)
//
publicMethod('addAnalysisServerListener', () {
writeln(
'''/**
* Add the given listener to the list of listeners that will receive notification when new
* analysis results become available.
*
* @param listener the listener to be added
*/'''
);
writeln(
'public void addAnalysisServerListener(AnalysisServerListener listener);');
});
//
// removeAnalysisServerListener(..)
//
publicMethod('removeAnalysisServerListener', () {
writeln(
'''/**
* Remove the given listener from the list of listeners that will receive notification when new
* analysis results become available.
*
* @param listener the listener to be removed
*/'''
);
writeln(
'public void removeAnalysisServerListener(AnalysisServerListener listener);');
});
//
// start(..)
//
publicMethod('start', () {
writeln(
'''/**
* Start the analysis server.
*
* @param millisToRestart the number of milliseconds to wait for an unresponsive server before
* restarting it, or zero if the server should not be restarted.
*/'''
);
writeln('public void start(long millisToRestart) throws Exception;');
});
super.visitApi();
});
}
@override
void visitRequest(Request request) {
String methodName = '${request.domainName}_${request.method}';
publicMethod(methodName, () {
docComment(toHtmlVisitor.collectHtml(() {
toHtmlVisitor.write('{@code ${request.longMethod }}');
toHtmlVisitor.translateHtml(request.html);
toHtmlVisitor.javadocParams(request.params);
}), width: 99, javadocStyle: true);
write('public void $methodName(');
List<String> arguments = [];
if (request.params != null) {
for (TypeObjectField field in request.params.fields) {
arguments.add('${javaType(field.type)} ${javaName(field.name)}');
}
}
if (request.result != null) {
arguments.add('${consumerName(request)} consumer');
}
write(arguments.join(', '));
writeln(');');
});
}
/**
* Get the name of the consumer class for responses to this request.
*/
String consumerName(Request request) {
return camelJoin([request.method, 'consumer'], capitalize: true);
}
}
final GeneratedFile target = javaGeneratedFile(
'../../../../editor/tools/plugins/com.google.dart.server/src/com/google/dart/server/AnalysisServer.java',
(Api api) => new CodegenAnalysisServer(api));
/**
* Translate spec_input.html into AnalysisServer.java.
*/
main() {
target.generate();
}