blob: 307cf0727e436fac1f370d4b9a0b83f74c00d27e [file] [log] [blame]
// 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".
*/
import 'package:analyzer/src/codegen/tools.dart';
import 'package:front_end/src/codegen/tools.dart';
import 'api.dart';
import 'codegen_java.dart';
final GeneratedFile target = javaGeneratedFile(
'tool/spec/generated/java/AnalysisServer.java',
(Api api) => new CodegenAnalysisServer(api));
class CodegenAnalysisServer extends CodegenJavaVisitor {
CodegenAnalysisServer(Api api) : 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);
}
@override
void visitApi() {
outputHeader(javaStyle: true);
writeln('package com.google.dart.server.generated;');
writeln();
writeln('import com.google.dart.server.*;');
writeln('import org.dartlang.analysis.server.protocol.*;');
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);');
});
//
// addStatusListener(..)
//
publicMethod('addStatusListener', () {
writeln('''/**
* Add the given listener to the list of listeners that will receive notification when the server
* is not active
*
* @param listener the listener to be added
*/''');
writeln(
'public void addStatusListener(AnalysisServerStatusListener listener);');
});
//
// isSocketOpen()
//
publicMethod('isSocketOpen', () {
writeln('''/**
* Return {@code true} if the socket is open.
*/''');
writeln('public boolean isSocketOpen();');
});
//
// start(..)
//
publicMethod('start', () {
writeln('''/**
* Start the analysis server.
*/''');
writeln('public void start() 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);
if (request.deprecated) {
toHtmlVisitor.p(() => toHtmlVisitor.write('@deprecated'));
}
}));
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(');');
});
}
}