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

Unified Diff: editor/tools/plugins/com.google.dart.engine/src/com/google/dart/engine/internal/resolver/LibraryResolver2.java

Issue 594843006: Fix for issue 14497 (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 3 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: editor/tools/plugins/com.google.dart.engine/src/com/google/dart/engine/internal/resolver/LibraryResolver2.java
diff --git a/editor/tools/plugins/com.google.dart.engine/src/com/google/dart/engine/internal/resolver/LibraryResolver2.java b/editor/tools/plugins/com.google.dart.engine/src/com/google/dart/engine/internal/resolver/LibraryResolver2.java
index 7d214240135fc0dc4a9d62ab373d89e7dba64f08..68e0442372b88b943443a3ff4f45a99e22392b8d 100644
--- a/editor/tools/plugins/com.google.dart.engine/src/com/google/dart/engine/internal/resolver/LibraryResolver2.java
+++ b/editor/tools/plugins/com.google.dart.engine/src/com/google/dart/engine/internal/resolver/LibraryResolver2.java
@@ -15,8 +15,10 @@ package com.google.dart.engine.internal.resolver;
import com.google.dart.engine.ast.Combinator;
import com.google.dart.engine.ast.CompilationUnit;
+import com.google.dart.engine.ast.CompilationUnitMember;
import com.google.dart.engine.ast.Directive;
import com.google.dart.engine.ast.ExportDirective;
+import com.google.dart.engine.ast.FunctionTypeAlias;
import com.google.dart.engine.ast.HideCombinator;
import com.google.dart.engine.ast.ImportDirective;
import com.google.dart.engine.ast.NamespaceDirective;
@@ -24,6 +26,7 @@ import com.google.dart.engine.ast.NodeList;
import com.google.dart.engine.ast.ShowCombinator;
import com.google.dart.engine.ast.SimpleIdentifier;
import com.google.dart.engine.ast.StringLiteral;
+import com.google.dart.engine.ast.TypeAlias;
import com.google.dart.engine.context.AnalysisContext;
import com.google.dart.engine.context.AnalysisException;
import com.google.dart.engine.element.Element;
@@ -76,6 +79,28 @@ import java.util.List;
*/
public class LibraryResolver2 {
/**
+ * Instances of the class {@code TypeAliasInfo} hold information about a {@link TypeAlias}.
+ */
+ private static class TypeAliasInfo {
+ private ResolvableLibrary library;
+ private Source source;
+ private FunctionTypeAlias typeAlias;
+
+ /**
+ * Initialize a newly created information holder with the given information.
+ *
+ * @param library the library containing the type alias
+ * @param source the source of the file containing the type alias
+ * @param typeAlias the type alias being remembered
+ */
+ public TypeAliasInfo(ResolvableLibrary library, Source source, FunctionTypeAlias typeAlias) {
+ this.library = library;
+ this.source = source;
+ this.typeAlias = typeAlias;
+ }
+ }
+
+ /**
* Report that the core library could not be resolved in the given analysis context and throw an
* exception.
*
@@ -236,6 +261,7 @@ public class LibraryResolver2 {
instrumentation.metric("buildDirectiveModels", "complete");
typeProvider = new TypeProviderImpl(coreElement);
buildEnumMembers();
+ buildTypeAliases();
buildTypeHierarchies();
instrumentation.metric("buildTypeHierarchies", "complete");
//
@@ -468,6 +494,42 @@ public class LibraryResolver2 {
}
/**
+ * Resolve the types referenced by function type aliases across all of the function type aliases
+ * defined in the current cycle.
+ *
+ * @throws AnalysisException if any of the function type aliases could not be resolved
+ */
+ private void buildTypeAliases() throws AnalysisException {
+ TimeCounterHandle timeCounter = PerformanceStatistics.resolve.start();
+ try {
+ List<TypeAliasInfo> typeAliases = new ArrayList<TypeAliasInfo>();
+ for (ResolvableLibrary library : librariesInCycle) {
+ for (ResolvableCompilationUnit unit : library.getResolvableCompilationUnits()) {
+ for (CompilationUnitMember member : unit.getCompilationUnit().getDeclarations()) {
+ if (member instanceof FunctionTypeAlias) {
+ typeAliases.add(new TypeAliasInfo(
+ library,
+ unit.getSource(),
+ (FunctionTypeAlias) member));
+ }
+ }
+ }
+ }
+ // TODO(brianwilkerson) We need to sort the type aliases such that all aliases referenced by
+ // an alias T are resolved before we resolve T.
+ for (TypeAliasInfo info : typeAliases) {
+ TypeResolverVisitor visitor = new TypeResolverVisitor(
+ info.library,
+ info.source,
+ typeProvider);
+ info.typeAlias.accept(visitor);
+ }
+ } finally {
+ timeCounter.stop();
+ }
+ }
+
+ /**
* Resolve the type hierarchy across all of the types declared in the libraries in the current
* cycle.
*

Powered by Google App Engine
This is Rietveld 408576698