Index: lib/src/js/type_printer.dart |
diff --git a/lib/src/js/type_printer.dart b/lib/src/js/type_printer.dart |
deleted file mode 100644 |
index 5f47711e294adab525c5cd6d5abc9f6d252bf135..0000000000000000000000000000000000000000 |
--- a/lib/src/js/type_printer.dart |
+++ /dev/null |
@@ -1,226 +0,0 @@ |
-// Copyright (c) 2016, 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. |
- |
-part of js_ast; |
- |
-abstract class _TypePrinterBase implements TypeRefVisitor { |
- void out(String s); |
- void visit(Node node); |
- |
- void outSeparated(String separator, Iterable items, [action(dynamic item)]) { |
- action ??= visit; |
- var first = true; |
- for (var item in items) { |
- if (first) { |
- first = false; |
- } else { |
- out(separator); |
- } |
- action(item); |
- } |
- } |
- |
- void outTypeArg(Iterable<TypeRef> typeArgs) { |
- if (typeArgs.isNotEmpty) { |
- // TODO(ochafik): Double-check precedence issues when we start emitting |
- // type arguments outside type literals (generic method call, etc). |
- out('<'); |
- outSeparated(", ", typeArgs); |
- out('>'); |
- } |
- } |
- |
- @override |
- visitQualifiedTypeRef(QualifiedTypeRef node) { |
- outSeparated(".", node.path); |
- } |
-} |
- |
-abstract class TypeScriptTypePrinter extends _TypePrinterBase { |
- |
- void _outTypeAnnotation(TypeRef type) { |
- if (type is OptionalTypeRef) { |
- out("?: "); |
- visit(type.type); |
- } else { |
- out(": "); |
- visit(type); |
- } |
- } |
- |
- @override |
- visitGenericTypeRef(GenericTypeRef node) { |
- if (node.rawType is FunctionTypeRef) { |
- outTypeArg(node.typeArgs); |
- visit(node.rawType); |
- } else { |
- visit(node.rawType); |
- outTypeArg(node.typeArgs); |
- } |
- } |
- |
- @override |
- visitArrayTypeRef(ArrayTypeRef node) { |
- if (node.elementType == null) { |
- out("Array"); |
- } else { |
- visit(node.elementType); |
- out("[]"); |
- } |
- } |
- |
- @override |
- visitOptionalTypeRef(OptionalTypeRef node) { |
- visit(node.type); |
- } |
- |
- @override |
- visitRecordTypeRef(RecordTypeRef node) { |
- out('{'); |
- outSeparated(", ", node.types.keys, (Identifier name) { |
- var type = node.types[name]; |
- visit(name); |
- _outTypeAnnotation(type); |
- }); |
- out('}'); |
- } |
- |
- @override |
- visitUnionTypeRef(UnionTypeRef node) { |
- outSeparated("|", node.types.where((t) => !t.isNull)); |
- } |
- |
- @override |
- visitFunctionTypeRef(FunctionTypeRef node) { |
- if (node.returnType == null) { |
- out('Function'); |
- } else { |
- out('('); |
- if (node.paramTypes == null) { |
- out('...any'); |
- } else { |
- outSeparated(", ", node.paramTypes.keys, (name) { |
- var paramType = node.paramTypes[name]; |
- visit(name); |
- _outTypeAnnotation(paramType); |
- }); |
- } |
- out(') => '); |
- visit(node.returnType); |
- } |
- } |
- |
- @override |
- visitAnyTypeRef(AnyTypeRef node) { |
- out("any"); |
- } |
- |
- @override |
- visitUnknownTypeRef(UnknownTypeRef node) { |
- out("any"); |
- } |
-} |
- |
-class ClosureTypePrinter extends _TypePrinterBase implements NodeVisitor { |
- final _buffer = new StringBuffer(); |
- |
- @override |
- void out(String s) => _buffer.write(s); |
- |
- @override |
- void visit(Node node) => node.accept(this); |
- |
- noSuchMethod(Invocation i) => super.noSuchMethod(i); |
- |
- @override |
- visitGenericTypeRef(GenericTypeRef node) { |
- visit(node.rawType); |
- outTypeArg(node.typeArgs); |
- } |
- |
- @override |
- visitIdentifier(Identifier node) { |
- //out(localNamer.getName(node)); |
- out(node.name); |
- } |
- |
- @override |
- visitAccess(PropertyAccess node) { |
- var selector = node.selector; |
- assert(selector is LiteralString); |
- if (selector is! LiteralString) { |
- out("?"); |
- return; |
- } |
- visit(node.receiver); |
- out("."); |
- out(selector.valueWithoutQuotes); |
- } |
- |
- @override toString() => _buffer.toString(); |
- |
- @override |
- visitArrayTypeRef(ArrayTypeRef node) { |
- out("Array"); |
- if (node.elementType != null) { |
- out("<"); |
- visit(node.elementType); |
- out(">"); |
- } |
- } |
- |
- @override |
- visitOptionalTypeRef(OptionalTypeRef node) { |
- visit(node.type); |
- out("="); |
- } |
- |
- @override |
- visitRecordTypeRef(RecordTypeRef node) { |
- out('{'); |
- outSeparated(", ", node.types.keys, (Identifier name) { |
- var type = node.types[name]; |
- visit(name); |
- out(": "); |
- visit(type is OptionalTypeRef ? type.orUndefined() : type); |
- }); |
- out('}'); |
- } |
- |
- @override |
- visitAnyTypeRef(AnyTypeRef node) { |
- out("*"); |
- } |
- |
- @override |
- visitUnknownTypeRef(UnknownTypeRef node) { |
- out("?"); |
- } |
- |
- @override |
- visitUnionTypeRef(UnionTypeRef node) { |
- out("("); |
- outSeparated("|", node.types); |
- out(")"); |
- } |
- |
- @override |
- visitFunctionTypeRef(FunctionTypeRef node) { |
- if (node.returnType == null) { |
- out('Function'); |
- } else { |
- out('function('); |
- if (node.paramTypes == null) { |
- out("...*"); |
- } else { |
- outSeparated(", ", node.paramTypes.values); |
- } |
- out(')'); |
- if (node.returnType != null) { |
- out(":"); |
- visit(node.returnType); |
- } |
- } |
- } |
-} |