Index: pkg/kernel/lib/analyzer/loader.dart |
diff --git a/pkg/kernel/lib/analyzer/loader.dart b/pkg/kernel/lib/analyzer/loader.dart |
index d3743af2cf6ff6a73f5252b2571e89953c42d8eb..82fc133786b8426fa543447819c36ff9c57794f6 100644 |
--- a/pkg/kernel/lib/analyzer/loader.dart |
+++ b/pkg/kernel/lib/analyzer/loader.dart |
@@ -22,7 +22,6 @@ import 'package:package_config/discovery.dart'; |
import 'package:package_config/packages.dart'; |
import '../ast.dart' as ast; |
-import '../repository.dart'; |
import '../target/targets.dart' show Target; |
import '../type_algebra.dart'; |
import 'analyzer.dart'; |
@@ -85,7 +84,7 @@ abstract class ReferenceLevelLoader { |
} |
class DartLoader implements ReferenceLevelLoader { |
- final Repository repository; |
+ final ast.Program program; |
final ApplicationRoot applicationRoot; |
final Bimap<ClassElement, ast.Class> _classes = |
new Bimap<ClassElement, ast.Class>(); |
@@ -107,10 +106,9 @@ class DartLoader implements ReferenceLevelLoader { |
bool get strongMode => context.analysisOptions.strongMode; |
- DartLoader(this.repository, DartOptions options, Packages packages, |
+ DartLoader(this.program, DartOptions options, Packages packages, |
{DartSdk dartSdk, AnalysisContext context}) |
- : this.context = |
- context ?? createContext(options, packages, dartSdk: dartSdk), |
+ : this.context = context ?? createContext(options, packages, dartSdk: dartSdk), |
this.applicationRoot = options.applicationRoot; |
String getLibraryName(LibraryElement element) { |
@@ -119,7 +117,7 @@ class DartLoader implements ReferenceLevelLoader { |
ast.Library getLibraryReference(LibraryElement element) { |
var uri = applicationRoot.relativeUri(element.source.uri); |
- return repository.getLibraryReference(uri) |
+ return program.getLibraryReference(uri) |
..name ??= getLibraryName(element) |
..fileUri = '${element.source.uri}'; |
} |
@@ -339,9 +337,9 @@ class DartLoader implements ReferenceLevelLoader { |
mixedInType: freshParameters.substituteSuper(mixinType), |
fileUri: classNode.fileUri)..fileOffset = element.nameOffset; |
mixinClass.level = ast.ClassLevel.Type; |
+ addMixinClassToLibrary(mixinClass, classNode.enclosingLibrary); |
supertype = new ast.Supertype(mixinClass, |
classNode.typeParameters.map(makeTypeParameterType).toList()); |
- addMixinClassToLibrary(mixinClass, classNode.enclosingLibrary); |
// This class cannot be used from anywhere else, so don't try to |
// generate shared mixin applications using it. |
useSharedMixin = false; |
@@ -409,25 +407,27 @@ class DartLoader implements ReferenceLevelLoader { |
ast.Member _buildMemberReference(Element element) { |
assert(element != null); |
- var node = _buildOrphanedMemberReference(element); |
+ var member = _buildOrphanedMemberReference(element); |
// Set the parent pointer and store it in the enclosing class or library. |
// If the enclosing library is being built from the AST, do not add the |
// member, since the AST builder will put it in there. |
var parent = element.enclosingElement; |
if (parent is ClassElement) { |
var class_ = getClassReference(parent); |
- node.parent = class_; |
+ member.parent = class_; |
if (!isLibraryBeingLoaded(element.library)) { |
- class_.addMember(node); |
+ class_.addMember(member); |
} |
+ class_.canonicalName.getChildFromMember(member).bindTo(member); |
} else { |
var library = getLibraryReference(element.library); |
- node.parent = library; |
+ member.parent = library; |
if (!isLibraryBeingLoaded(element.library)) { |
- library.addMember(node); |
+ library.addMember(member); |
} |
+ library.canonicalName.getChildFromMember(member).bindTo(member); |
} |
- return node; |
+ return member; |
} |
ast.Member _buildOrphanedMemberReference(Element element) { |
@@ -658,8 +658,8 @@ class DartLoader implements ReferenceLevelLoader { |
} |
} |
} |
- for (int i = 0; i < repository.libraries.length; ++i) { |
- var library = repository.libraries[i]; |
+ for (int i = 0; i < program.libraries.length; ++i) { |
+ var library = program.libraries[i]; |
if (compileSdk || library.importUri.scheme != 'dart') { |
ensureLibraryIsLoaded(library); |
} |
@@ -671,7 +671,7 @@ class DartLoader implements ReferenceLevelLoader { |
/// This operation may be expensive and should only be used for diagnostics. |
List<String> getLoadedFileNames() { |
var list = <String>[]; |
- for (var library in repository.libraries) { |
+ for (var library in program.libraries) { |
LibraryElement element = context.computeLibraryElement(context |
.sourceFactory |
.forUri2(applicationRoot.absoluteUri(library.importUri))); |
@@ -716,11 +716,10 @@ class DartLoader implements ReferenceLevelLoader { |
ast.Program loadProgram(Uri mainLibrary, {Target target, bool compileSdk}) { |
Uri uri = applicationRoot.relativeUri(mainLibrary); |
- ast.Library library = repository.getLibraryReference(uri); |
+ ast.Library library = program.getLibraryReference(uri); |
ensureLibraryIsLoaded(library); |
var mainMethod = _getMainMethod(mainLibrary); |
loadEverything(target: target, compileSdk: compileSdk); |
- var program = new ast.Program(repository.libraries); |
if (mainMethod == null) { |
mainMethod = _makeMissingMainMethod(library); |
} |
@@ -746,7 +745,7 @@ class DartLoader implements ReferenceLevelLoader { |
ast.Library loadLibrary(Uri uri) { |
ast.Library library = |
- repository.getLibraryReference(applicationRoot.relativeUri(uri)); |
+ program.getLibraryReference(applicationRoot.relativeUri(uri)); |
ensureLibraryIsLoaded(library); |
return library; |
} |
@@ -777,7 +776,7 @@ class DartLoaderBatch { |
String lastPackagePath; |
bool lastStrongMode; |
- Future<DartLoader> getLoader(Repository repository, DartOptions options, |
+ Future<DartLoader> getLoader(ast.Program program, DartOptions options, |
{String packageDiscoveryPath}) async { |
if (dartSdk == null || |
lastSdk != options.sdk || |
@@ -793,7 +792,7 @@ class DartLoaderBatch { |
packages = await createPackages(options.packagePath, |
discoveryPath: packageDiscoveryPath); |
} |
- return new DartLoader(repository, options, packages, dartSdk: dartSdk); |
+ return new DartLoader(program, options, packages, dartSdk: dartSdk); |
} |
} |