Files
sdk/pkg/analysis_server/tool/spec/codegen_analysis_server.dart
T
jwren@google.com 9f2e374200 Make more use of generated code in Java analysis server.
These request/responses are now up to date with the spec:
- server.status
- analysis.setSubscriptions
- analysis.updateContent
- analysis.flushResults
- analysis.highlights
- analysis.navigation
- analysis.overrides

Type generation was updated so getters of boolean types would be isX instead of getX

HighlightRegion, NavigationRegion and Outline now have the method containsInclusive generated.

Occurrences now has the additional method contains(int) generated.

AddContentOverlay, ChangeContentOverlay and RemoveContentOverlay no longer take a String type as an input to the type.

Removal of many non-generated types defined in spec.

R=brianwilkerson@google.com

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

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@39512 260f80e4-7a28-3924-810f-c04153c831b5
2014-08-24 12:11:02 +00:00

128 lines
3.7 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 java.generator.server;
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 com.google.dart.server.generated.types.*;');
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'], doCapitalize: 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();
}