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

Unified Diff: pkg/fasta/lib/src/builder/interface_type_builder.dart

Issue 2629063005: Fasta builders. (Closed)
Patch Set: Created 3 years, 11 months 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/fasta/lib/src/builder/interface_type_builder.dart
diff --git a/pkg/fasta/lib/src/builder/interface_type_builder.dart b/pkg/fasta/lib/src/builder/interface_type_builder.dart
new file mode 100644
index 0000000000000000000000000000000000000000..326d35e237e61de8e486f5e60c06208d6a916e9e
--- /dev/null
+++ b/pkg/fasta/lib/src/builder/interface_type_builder.dart
@@ -0,0 +1,68 @@
+// 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.
+
+library fasta.interface_type_builder;
+
+import 'scope.dart' show
+ Scope;
+
+import 'builder.dart' show
+ Builder,
+ InvalidTypeBuilder,
+ PrefixBuilder,
+ TypeBuilder,
+ TypeDeclarationBuilder;
+
+// TODO(ahe): This isn't really an interface type. Find better name.
Johnni Winther 2017/01/16 13:01:19 NamedTypeBuilder? GenericTypeBuilder?
ahe 2017/01/16 15:26:33 I like NamedTypeBuilder. GenericTypeBuilder is a b
+abstract class InterfaceTypeBuilder<T extends TypeBuilder> extends TypeBuilder {
+ final String name;
+
+ final List<T> arguments;
+
+ TypeDeclarationBuilder get builder;
+
+ void set builder(TypeDeclarationBuilder b);
+
+ InterfaceTypeBuilder(this.name, this.arguments);
+
+ InvalidTypeBuilder buildInvalidType(String name);
+
+ void resolveIn(Scope scope) {
+ Builder member = scope.lookup(name);
+ if (member is TypeDeclarationBuilder) {
+ builder = member;
+ return;
+ }
+ if (name.contains(".")) {
+ int index = name.lastIndexOf(".");
+ String first = name.substring(0, index);
+ String last = name.substring(name.lastIndexOf(".") + 1);
+ var prefix = scope.lookup(first);
+ if (prefix is PrefixBuilder) {
+ member = prefix.exports[last];
+ }
+ if (member is TypeDeclarationBuilder) {
+ builder = member;
+ return;
+ }
+ }
+ builder = buildInvalidType(name);
+ }
+
+ String get debugName => "InterfaceTypeBuilder";
+
+ StringBuffer printOn(StringBuffer buffer) {
+ buffer.write(name);
+ if (arguments == null) return buffer;
+ buffer.write("<");
+ bool first = true;
+ for (T t in arguments) {
+ if (!first) buffer.write(", ");
+ first = false;
+ t.printOn(buffer);
+ }
+ buffer.write(">");
+ return buffer;
+ }
+}

Powered by Google App Engine
This is Rietveld 408576698