Index: pkg/analyzer/lib/source/embedder.dart |
diff --git a/pkg/analyzer/lib/source/embedder.dart b/pkg/analyzer/lib/source/embedder.dart |
index 1b43e00f5d8ae90ecfabffe5b34ade752ebcf9f6..452550897da94887cfaeac82b475e219c0bf97ca 100644 |
--- a/pkg/analyzer/lib/source/embedder.dart |
+++ b/pkg/analyzer/lib/source/embedder.dart |
@@ -10,14 +10,13 @@ import 'dart:core' hide Resource; |
import 'package:analyzer/file_system/file_system.dart'; |
import 'package:analyzer/source/package_map_provider.dart' |
show PackageMapProvider; |
-import 'package:analyzer/src/context/context.dart'; |
-import 'package:analyzer/src/generated/engine.dart'; |
import 'package:analyzer/src/generated/java_core.dart'; |
-import 'package:analyzer/src/generated/java_engine.dart'; |
import 'package:analyzer/src/generated/java_io.dart' show JavaFile; |
import 'package:analyzer/src/generated/sdk.dart'; |
+import 'package:analyzer/src/generated/sdk_io.dart'; |
import 'package:analyzer/src/generated/source.dart'; |
import 'package:analyzer/src/generated/source_io.dart' show FileBasedSource; |
+import 'package:analyzer/src/summary/idl.dart'; |
import 'package:yaml/yaml.dart'; |
const String _DART_COLON_PREFIX = 'dart:'; |
@@ -27,104 +26,28 @@ const String _EMBEDDED_LIB_MAP_KEY = 'embedded_libs'; |
bool definesEmbeddedLibs(Map map) => map[_EMBEDDED_LIB_MAP_KEY] != null; |
/// An SDK backed by URI mappings derived from an `_embedder.yaml` file. |
-class EmbedderSdk implements DartSdk { |
- /// The resolver associated with this SDK. |
- EmbedderUriResolver _resolver; |
- |
- /// The [AnalysisContext] used for this SDK's sources. |
- InternalAnalysisContext _analysisContext; |
- |
- final LibraryMap _librariesMap = new LibraryMap(); |
- |
+class EmbedderSdk extends AbstractDartSdk { |
final Map<String, String> _urlMappings = new HashMap<String, String>(); |
- /// Analysis options for this SDK. |
- AnalysisOptions analysisOptions; |
- |
EmbedderSdk([Map<Folder, YamlMap> embedderYamls]) { |
embedderYamls?.forEach(_processEmbedderYaml); |
- _resolver = new EmbedderUriResolver._forSdk(this); |
} |
- @override |
- AnalysisContext get context { |
- if (_analysisContext == null) { |
- _analysisContext = new SdkAnalysisContext(analysisOptions); |
- SourceFactory factory = new SourceFactory([_resolver]); |
- _analysisContext.sourceFactory = factory; |
- |
- ChangeSet changeSet = new ChangeSet(); |
- for (String uri in uris) { |
- changeSet.addedSource(factory.forUri(uri)); |
- } |
- _analysisContext.applyChanges(changeSet); |
- } |
- return _analysisContext; |
- } |
- |
- @override |
- List<SdkLibrary> get sdkLibraries => _librariesMap.sdkLibraries; |
- |
// TODO(danrubel) Determine SDK version |
@override |
String get sdkVersion => '0'; |
- @override |
- List<String> get uris => _librariesMap.uris; |
- |
/// The url mappings for this SDK. |
Map<String, String> get urlMappings => _urlMappings; |
@override |
- Source fromFileUri(Uri uri) { |
- JavaFile file = new JavaFile.fromUri(uri); |
- String filePath = file.getAbsolutePath(); |
- |
- String path; |
- for (SdkLibrary library in _librariesMap.sdkLibraries) { |
- String libraryPath = library.path.replaceAll('/', JavaFile.separator); |
- if (filePath == libraryPath) { |
- path = library.shortName; |
- break; |
- } |
- } |
- if (path == null) { |
- for (SdkLibrary library in _librariesMap.sdkLibraries) { |
- String libraryPath = library.path.replaceAll('/', JavaFile.separator); |
- int index = libraryPath.lastIndexOf(JavaFile.separator); |
- if (index == -1) { |
- continue; |
- } |
- String prefix = libraryPath.substring(0, index + 1); |
- if (!filePath.startsWith(prefix)) { |
- continue; |
- } |
- var relPath = filePath |
- .substring(prefix.length) |
- .replaceAll(JavaFile.separator, '/'); |
- path = '${library.shortName}/$relPath'; |
- break; |
- } |
- } |
- |
- if (path != null) { |
- try { |
- return new FileBasedSource(file, parseUriWithException(path)); |
- } on URISyntaxException catch (exception, stackTrace) { |
- AnalysisEngine.instance.logger.logInformation( |
- "Failed to create URI: $path", |
- new CaughtException(exception, stackTrace)); |
- return null; |
- } |
- } |
- return null; |
- } |
+ String getRelativePathFromFile(JavaFile file) => file.getAbsolutePath(); |
@override |
- SdkLibrary getSdkLibrary(String dartUri) => _librariesMap.getLibrary(dartUri); |
+ PackageBundle getSummarySdkBundle(bool strongMode) => null; |
@override |
- Source mapDartUri(String dartUri) { |
+ FileBasedSource internalMapDartUri(String dartUri) { |
String libraryName; |
String relativePath; |
int index = dartUri.indexOf('/'); |
@@ -173,7 +96,7 @@ class EmbedderSdk implements DartSdk { |
_urlMappings[name] = libPath; |
SdkLibraryImpl library = new SdkLibraryImpl(name); |
library.path = libPath; |
- _librariesMap.setLibrary(name, library); |
+ libraryMap.setLibrary(name, library); |
} |
/// Given the 'embedderYamls' from [EmbedderYamlLocator] check each one for the |
@@ -211,8 +134,8 @@ class EmbedderUriResolver implements DartUriResolver { |
/// Construct a [EmbedderUriResolver] from a package map |
/// (see [PackageMapProvider]). |
- EmbedderUriResolver(Map<Folder, YamlMap> embedderMap) : |
- this._forSdk(new EmbedderSdk(embedderMap)); |
+ EmbedderUriResolver(Map<Folder, YamlMap> embedderMap) |
+ : this._forSdk(new EmbedderSdk(embedderMap)); |
/// (Provisional API.) |
EmbedderUriResolver._forSdk(this._embedderSdk) { |