Chromium Code Reviews| Index: pkg/analyzer/test/generated/analysis_context_factory.dart |
| diff --git a/pkg/analyzer/test/generated/analysis_context_factory.dart b/pkg/analyzer/test/generated/analysis_context_factory.dart |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..ad6f41875e5ee4aed3021571022ad4323ba56737 |
| --- /dev/null |
| +++ b/pkg/analyzer/test/generated/analysis_context_factory.dart |
| @@ -0,0 +1,562 @@ |
| +// Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file |
|
Brian Wilkerson
2016/03/09 16:54:09
I don't know whether it matters, but in the past w
Bob Nystrom
2016/03/09 18:42:30
I was looking at this as a new file, since the old
|
| +// 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 analyzer.test.generated.analysis_context_factory; |
| + |
| +import 'dart:collection'; |
| + |
| +import 'package:analyzer/dart/ast/ast.dart'; |
| +import 'package:analyzer/dart/ast/token.dart'; |
| +import 'package:analyzer/dart/element/element.dart'; |
| +import 'package:analyzer/dart/element/type.dart'; |
| +import 'package:analyzer/src/context/context.dart'; |
| +import 'package:analyzer/src/dart/element/element.dart'; |
| +import 'package:analyzer/src/dart/element/type.dart'; |
| +import 'package:analyzer/src/generated/engine.dart'; |
| +import 'package:analyzer/src/generated/java_engine_io.dart'; |
| +import 'package:analyzer/src/generated/java_io.dart'; |
| +import 'package:analyzer/src/generated/resolver.dart'; |
| +import 'package:analyzer/src/generated/sdk.dart'; |
| +import 'package:analyzer/src/generated/sdk_io.dart' show DirectoryBasedDartSdk; |
| +import 'package:analyzer/src/generated/source_io.dart'; |
| +import 'package:analyzer/src/generated/testing/ast_factory.dart'; |
| +import 'package:analyzer/src/generated/testing/element_factory.dart'; |
| +import 'package:analyzer/src/generated/testing/test_type_provider.dart'; |
| +import 'package:analyzer/src/generated/utilities_dart.dart'; |
| +import 'package:analyzer/src/string_source.dart'; |
| +import 'package:unittest/unittest.dart'; |
| + |
| +/** |
| + * The class `AnalysisContextFactory` defines utility methods used to create analysis contexts |
| + * for testing purposes. |
| + */ |
| +class AnalysisContextFactory { |
| + static String _DART_MATH = "dart:math"; |
| + |
| + static String _DART_INTERCEPTORS = "dart:_interceptors"; |
| + |
| + static String _DART_JS_HELPER = "dart:_js_helper"; |
| + |
| + /** |
| + * Create an analysis context that has a fake core library already resolved. |
| + * Return the context that was created. |
| + */ |
| + static InternalAnalysisContext contextWithCore() { |
| + AnalysisContextForTests context = new AnalysisContextForTests(); |
| + return initContextWithCore(context); |
| + } |
| + |
| + /** |
| + * Create an analysis context that uses the given [options] and has a fake |
| + * core library already resolved. Return the context that was created. |
| + */ |
| + static InternalAnalysisContext contextWithCoreAndOptions( |
| + AnalysisOptions options) { |
| + AnalysisContextForTests context = new AnalysisContextForTests(); |
| + context._internalSetAnalysisOptions(options); |
| + return initContextWithCore(context); |
| + } |
| + |
| + static InternalAnalysisContext contextWithCoreAndPackages( |
| + Map<String, String> packages) { |
| + AnalysisContextForTests context = new AnalysisContextForTests(); |
| + return initContextWithCore(context, new TestPackageUriResolver(packages)); |
| + } |
| + |
| + /** |
| + * Initialize the given analysis context with a fake core library already resolved. |
| + * |
| + * @param context the context to be initialized (not `null`) |
| + * @return the analysis context that was created |
| + */ |
| + static InternalAnalysisContext initContextWithCore( |
| + InternalAnalysisContext context, |
| + [UriResolver contributedResolver]) { |
| + DirectoryBasedDartSdk sdk = new _AnalysisContextFactory_initContextWithCore( |
| + new JavaFile("/fake/sdk"), |
| + enableAsync: context.analysisOptions.enableAsync); |
| + List<UriResolver> resolvers = <UriResolver>[ |
| + new DartUriResolver(sdk), |
| + new FileUriResolver() |
| + ]; |
| + if (contributedResolver != null) { |
| + resolvers.add(contributedResolver); |
| + } |
| + SourceFactory sourceFactory = new SourceFactory(resolvers); |
| + context.sourceFactory = sourceFactory; |
| + AnalysisContext coreContext = sdk.context; |
| + (coreContext.analysisOptions as AnalysisOptionsImpl).strongMode = |
| + context.analysisOptions.strongMode; |
| + // |
| + // dart:core |
| + // |
| + TestTypeProvider provider = new TestTypeProvider(); |
| + CompilationUnitElementImpl coreUnit = |
| + new CompilationUnitElementImpl("core.dart"); |
| + Source coreSource = sourceFactory.forUri(DartSdk.DART_CORE); |
| + coreContext.setContents(coreSource, ""); |
| + coreUnit.librarySource = coreUnit.source = coreSource; |
| + ClassElementImpl proxyClassElement = ElementFactory.classElement2("_Proxy"); |
| + proxyClassElement.constructors = <ConstructorElement>[ |
| + ElementFactory.constructorElement(proxyClassElement, '', true) |
| + ..isCycleFree = true |
| + ..constantInitializers = <ConstructorInitializer>[] |
| + ]; |
| + ClassElement objectClassElement = provider.objectType.element; |
| + coreUnit.types = <ClassElement>[ |
| + provider.boolType.element, |
| + provider.deprecatedType.element, |
| + provider.doubleType.element, |
| + provider.functionType.element, |
| + provider.intType.element, |
| + provider.iterableType.element, |
| + provider.iteratorType.element, |
| + provider.listType.element, |
| + provider.mapType.element, |
| + provider.nullType.element, |
| + provider.numType.element, |
| + objectClassElement, |
| + proxyClassElement, |
| + provider.stackTraceType.element, |
| + provider.stringType.element, |
| + provider.symbolType.element, |
| + provider.typeType.element |
| + ]; |
| + coreUnit.functions = <FunctionElement>[ |
| + ElementFactory.functionElement3("identical", provider.boolType.element, |
| + <ClassElement>[objectClassElement, objectClassElement], null), |
| + ElementFactory.functionElement3("print", VoidTypeImpl.instance.element, |
| + <ClassElement>[objectClassElement], null) |
| + ]; |
| + TopLevelVariableElement proxyTopLevelVariableElt = ElementFactory |
| + .topLevelVariableElement3("proxy", true, false, proxyClassElement.type); |
| + ConstTopLevelVariableElementImpl deprecatedTopLevelVariableElt = |
| + ElementFactory.topLevelVariableElement3( |
| + "deprecated", true, false, provider.deprecatedType); |
| + { |
| + ClassElement deprecatedElement = provider.deprecatedType.element; |
| + InstanceCreationExpression initializer = AstFactory |
| + .instanceCreationExpression2( |
| + Keyword.CONST, |
| + AstFactory.typeName(deprecatedElement), |
| + [AstFactory.string2('next release')]); |
| + ConstructorElement constructor = deprecatedElement.constructors.single; |
| + initializer.staticElement = constructor; |
| + initializer.constructorName.staticElement = constructor; |
| + deprecatedTopLevelVariableElt.constantInitializer = initializer; |
| + } |
| + coreUnit.accessors = <PropertyAccessorElement>[ |
| + proxyTopLevelVariableElt.getter, |
| + deprecatedTopLevelVariableElt.getter |
| + ]; |
| + coreUnit.topLevelVariables = <TopLevelVariableElement>[ |
| + proxyTopLevelVariableElt, |
| + deprecatedTopLevelVariableElt |
| + ]; |
| + LibraryElementImpl coreLibrary = new LibraryElementImpl.forNode( |
| + coreContext, AstFactory.libraryIdentifier2(["dart", "core"])); |
| + coreLibrary.definingCompilationUnit = coreUnit; |
| + // |
| + // dart:async |
| + // |
| + Source asyncSource; |
| + LibraryElementImpl asyncLibrary; |
| + if (context.analysisOptions.enableAsync) { |
| + asyncLibrary = new LibraryElementImpl.forNode( |
| + coreContext, AstFactory.libraryIdentifier2(["dart", "async"])); |
| + CompilationUnitElementImpl asyncUnit = |
| + new CompilationUnitElementImpl("async.dart"); |
| + asyncSource = sourceFactory.forUri(DartSdk.DART_ASYNC); |
| + coreContext.setContents(asyncSource, ""); |
| + asyncUnit.librarySource = asyncUnit.source = asyncSource; |
| + asyncLibrary.definingCompilationUnit = asyncUnit; |
| + // Future |
| + ClassElementImpl futureElement = |
| + ElementFactory.classElement2("Future", ["T"]); |
| + futureElement.enclosingElement = asyncUnit; |
| + // factory Future.value([value]) |
| + ConstructorElementImpl futureConstructor = |
| + ElementFactory.constructorElement2(futureElement, "value"); |
| + futureConstructor.parameters = <ParameterElement>[ |
| + ElementFactory.positionalParameter2("value", provider.dynamicType) |
| + ]; |
| + futureConstructor.factory = true; |
| + futureElement.constructors = <ConstructorElement>[futureConstructor]; |
| + // Future then(onValue(T value), { Function onError }); |
| + TypeDefiningElement futureThenR = DynamicElementImpl.instance; |
| + if (context.analysisOptions.strongMode) { |
| + futureThenR = ElementFactory.typeParameterWithType('R'); |
| + } |
| + FunctionElementImpl thenOnValue = ElementFactory.functionElement3( |
| + 'onValue', futureThenR, [futureElement.typeParameters[0]], null); |
| + thenOnValue.synthetic = true; |
| + |
| + DartType futureRType = futureElement.type.instantiate([futureThenR.type]); |
| + MethodElementImpl thenMethod = ElementFactory |
| + .methodElementWithParameters(futureElement, "then", futureRType, [ |
| + ElementFactory.requiredParameter2("onValue", thenOnValue.type), |
| + ElementFactory.namedParameter2("onError", provider.functionType) |
| + ]); |
| + if (!futureThenR.type.isDynamic) { |
| + thenMethod.typeParameters = [futureThenR]; |
| + } |
| + thenOnValue.enclosingElement = thenMethod; |
| + thenOnValue.type = new FunctionTypeImpl(thenOnValue); |
| + (thenMethod.parameters[0] as ParameterElementImpl).type = |
| + thenOnValue.type; |
| + thenMethod.type = new FunctionTypeImpl(thenMethod); |
| + |
| + futureElement.methods = <MethodElement>[thenMethod]; |
| + // Completer |
| + ClassElementImpl completerElement = |
| + ElementFactory.classElement2("Completer", ["T"]); |
| + ConstructorElementImpl completerConstructor = |
| + ElementFactory.constructorElement2(completerElement, null); |
| + completerElement.constructors = <ConstructorElement>[ |
| + completerConstructor |
| + ]; |
| + // StreamSubscription |
| + ClassElementImpl streamSubscriptionElement = |
| + ElementFactory.classElement2("StreamSubscription", ["T"]); |
| + // Stream |
| + ClassElementImpl streamElement = |
| + ElementFactory.classElement2("Stream", ["T"]); |
| + streamElement.constructors = <ConstructorElement>[ |
| + ElementFactory.constructorElement2(streamElement, null) |
| + ]; |
| + DartType returnType = streamSubscriptionElement.type |
| + .instantiate(streamElement.type.typeArguments); |
| + FunctionElementImpl listenOnData = ElementFactory.functionElement3( |
| + 'onData', |
| + VoidTypeImpl.instance.element, |
| + <TypeDefiningElement>[streamElement.typeParameters[0]], |
| + null); |
| + listenOnData.synthetic = true; |
| + List<DartType> parameterTypes = <DartType>[listenOnData.type,]; |
| + // TODO(brianwilkerson) This is missing the optional parameters. |
| + MethodElementImpl listenMethod = |
| + ElementFactory.methodElement('listen', returnType, parameterTypes); |
| + streamElement.methods = <MethodElement>[listenMethod]; |
| + listenMethod.type = new FunctionTypeImpl(listenMethod); |
| + |
| + FunctionElementImpl listenParamFunction = parameterTypes[0].element; |
| + listenParamFunction.enclosingElement = listenMethod; |
| + listenParamFunction.type = new FunctionTypeImpl(listenParamFunction); |
| + ParameterElementImpl listenParam = listenMethod.parameters[0]; |
| + listenParam.type = listenParamFunction.type; |
| + |
| + asyncUnit.types = <ClassElement>[ |
| + completerElement, |
| + futureElement, |
| + streamElement, |
| + streamSubscriptionElement |
| + ]; |
| + } |
| + // |
| + // dart:html |
| + // |
| + CompilationUnitElementImpl htmlUnit = |
| + new CompilationUnitElementImpl("html_dartium.dart"); |
| + Source htmlSource = sourceFactory.forUri(DartSdk.DART_HTML); |
| + coreContext.setContents(htmlSource, ""); |
| + htmlUnit.librarySource = htmlUnit.source = htmlSource; |
| + ClassElementImpl elementElement = ElementFactory.classElement2("Element"); |
| + InterfaceType elementType = elementElement.type; |
| + ClassElementImpl canvasElement = |
| + ElementFactory.classElement("CanvasElement", elementType); |
| + ClassElementImpl contextElement = |
| + ElementFactory.classElement2("CanvasRenderingContext"); |
| + InterfaceType contextElementType = contextElement.type; |
| + ClassElementImpl context2dElement = ElementFactory.classElement( |
| + "CanvasRenderingContext2D", contextElementType); |
| + canvasElement.methods = <MethodElement>[ |
| + ElementFactory.methodElement( |
| + "getContext", contextElementType, [provider.stringType]) |
| + ]; |
| + canvasElement.accessors = <PropertyAccessorElement>[ |
| + ElementFactory.getterElement("context2D", false, context2dElement.type) |
| + ]; |
| + canvasElement.fields = canvasElement.accessors |
| + .map((PropertyAccessorElement accessor) => accessor.variable) |
| + .toList(); |
| + ClassElementImpl documentElement = |
| + ElementFactory.classElement("Document", elementType); |
| + ClassElementImpl htmlDocumentElement = |
| + ElementFactory.classElement("HtmlDocument", documentElement.type); |
| + htmlDocumentElement.methods = <MethodElement>[ |
| + ElementFactory |
| + .methodElement("query", elementType, <DartType>[provider.stringType]) |
| + ]; |
| + htmlUnit.types = <ClassElement>[ |
| + ElementFactory.classElement("AnchorElement", elementType), |
| + ElementFactory.classElement("BodyElement", elementType), |
| + ElementFactory.classElement("ButtonElement", elementType), |
| + canvasElement, |
| + contextElement, |
| + context2dElement, |
| + ElementFactory.classElement("DivElement", elementType), |
| + documentElement, |
| + elementElement, |
| + htmlDocumentElement, |
| + ElementFactory.classElement("InputElement", elementType), |
| + ElementFactory.classElement("SelectElement", elementType) |
| + ]; |
| + htmlUnit.functions = <FunctionElement>[ |
| + ElementFactory.functionElement3("query", elementElement, |
| + <ClassElement>[provider.stringType.element], ClassElement.EMPTY_LIST) |
| + ]; |
| + TopLevelVariableElementImpl document = |
| + ElementFactory.topLevelVariableElement3( |
| + "document", false, true, htmlDocumentElement.type); |
| + htmlUnit.topLevelVariables = <TopLevelVariableElement>[document]; |
| + htmlUnit.accessors = <PropertyAccessorElement>[document.getter]; |
| + LibraryElementImpl htmlLibrary = new LibraryElementImpl.forNode( |
| + coreContext, AstFactory.libraryIdentifier2(["dart", "dom", "html"])); |
| + htmlLibrary.definingCompilationUnit = htmlUnit; |
| + // |
| + // dart:math |
| + // |
| + CompilationUnitElementImpl mathUnit = |
| + new CompilationUnitElementImpl("math.dart"); |
| + Source mathSource = sourceFactory.forUri(_DART_MATH); |
| + coreContext.setContents(mathSource, ""); |
| + mathUnit.librarySource = mathUnit.source = mathSource; |
| + FunctionElement cosElement = ElementFactory.functionElement3( |
| + "cos", |
| + provider.doubleType.element, |
| + <ClassElement>[provider.numType.element], |
| + ClassElement.EMPTY_LIST); |
| + TopLevelVariableElement ln10Element = ElementFactory |
| + .topLevelVariableElement3("LN10", true, false, provider.doubleType); |
| + TypeParameterElement maxT = |
| + ElementFactory.typeParameterWithType('T', provider.numType); |
| + FunctionElementImpl maxElement = ElementFactory.functionElement3( |
| + "max", maxT, [maxT, maxT], ClassElement.EMPTY_LIST); |
| + maxElement.typeParameters = [maxT]; |
| + maxElement.type = new FunctionTypeImpl(maxElement); |
| + TopLevelVariableElement piElement = ElementFactory.topLevelVariableElement3( |
| + "PI", true, false, provider.doubleType); |
| + ClassElementImpl randomElement = ElementFactory.classElement2("Random"); |
| + randomElement.abstract = true; |
| + ConstructorElementImpl randomConstructor = |
| + ElementFactory.constructorElement2(randomElement, null); |
| + randomConstructor.factory = true; |
| + ParameterElementImpl seedParam = new ParameterElementImpl("seed", 0); |
| + seedParam.parameterKind = ParameterKind.POSITIONAL; |
| + seedParam.type = provider.intType; |
| + randomConstructor.parameters = <ParameterElement>[seedParam]; |
| + randomElement.constructors = <ConstructorElement>[randomConstructor]; |
| + FunctionElement sinElement = ElementFactory.functionElement3( |
| + "sin", |
| + provider.doubleType.element, |
| + <ClassElement>[provider.numType.element], |
| + ClassElement.EMPTY_LIST); |
| + FunctionElement sqrtElement = ElementFactory.functionElement3( |
| + "sqrt", |
| + provider.doubleType.element, |
| + <ClassElement>[provider.numType.element], |
| + ClassElement.EMPTY_LIST); |
| + mathUnit.accessors = <PropertyAccessorElement>[ |
| + ln10Element.getter, |
| + piElement.getter |
| + ]; |
| + mathUnit.functions = <FunctionElement>[ |
| + cosElement, |
| + maxElement, |
| + sinElement, |
| + sqrtElement |
| + ]; |
| + mathUnit.topLevelVariables = <TopLevelVariableElement>[ |
| + ln10Element, |
| + piElement |
| + ]; |
| + mathUnit.types = <ClassElement>[randomElement]; |
| + LibraryElementImpl mathLibrary = new LibraryElementImpl.forNode( |
| + coreContext, AstFactory.libraryIdentifier2(["dart", "math"])); |
| + mathLibrary.definingCompilationUnit = mathUnit; |
| + // |
| + // Set empty sources for the rest of the libraries. |
| + // |
| + Source source = sourceFactory.forUri(_DART_INTERCEPTORS); |
| + coreContext.setContents(source, ""); |
| + source = sourceFactory.forUri(_DART_JS_HELPER); |
| + coreContext.setContents(source, ""); |
| + // |
| + // Record the elements. |
| + // |
| + HashMap<Source, LibraryElement> elementMap = |
| + new HashMap<Source, LibraryElement>(); |
| + elementMap[coreSource] = coreLibrary; |
| + if (asyncSource != null) { |
| + elementMap[asyncSource] = asyncLibrary; |
| + } |
| + elementMap[htmlSource] = htmlLibrary; |
| + elementMap[mathSource] = mathLibrary; |
| + // |
| + // Set the public and export namespaces. We don't use exports in the fake |
| + // core library so public and export namespaces are the same. |
| + // |
| + for (LibraryElementImpl library in elementMap.values) { |
| + Namespace namespace = |
| + new NamespaceBuilder().createPublicNamespaceForLibrary(library); |
| + library.exportNamespace = namespace; |
| + library.publicNamespace = namespace; |
| + } |
| + context.recordLibraryElements(elementMap); |
| + // Create the synthetic element for `loadLibrary`. |
| + for (LibraryElementImpl library in elementMap.values) { |
| + library.createLoadLibraryFunction(context.typeProvider); |
| + } |
| + return context; |
| + } |
| +} |
| + |
| +/** |
| + * An analysis context that has a fake SDK that is much smaller and faster for |
| + * testing purposes. |
| + */ |
| +class AnalysisContextForTests extends AnalysisContextImpl { |
| + @override |
| + void set analysisOptions(AnalysisOptions options) { |
| + AnalysisOptions currentOptions = analysisOptions; |
| + bool needsRecompute = currentOptions.analyzeFunctionBodiesPredicate != |
| + options.analyzeFunctionBodiesPredicate || |
| + currentOptions.generateImplicitErrors != |
| + options.generateImplicitErrors || |
| + currentOptions.generateSdkErrors != options.generateSdkErrors || |
| + currentOptions.dart2jsHint != options.dart2jsHint || |
| + (currentOptions.hint && !options.hint) || |
| + currentOptions.preserveComments != options.preserveComments || |
| + currentOptions.enableStrictCallChecks != options.enableStrictCallChecks; |
| + if (needsRecompute) { |
| + fail( |
| + "Cannot set options that cause the sources to be reanalyzed in a test context"); |
| + } |
| + super.analysisOptions = options; |
| + } |
| + |
| + @override |
| + bool exists(Source source) => |
| + super.exists(source) || sourceFactory.dartSdk.context.exists(source); |
| + |
| + @override |
| + TimestampedData<String> getContents(Source source) { |
| + if (source.isInSystemLibrary) { |
| + return sourceFactory.dartSdk.context.getContents(source); |
| + } |
| + return super.getContents(source); |
| + } |
| + |
| + @override |
| + int getModificationStamp(Source source) { |
| + if (source.isInSystemLibrary) { |
| + return sourceFactory.dartSdk.context.getModificationStamp(source); |
| + } |
| + return super.getModificationStamp(source); |
| + } |
| + |
| + /** |
| + * Set the analysis options, even if they would force re-analysis. This method should only be |
| + * invoked before the fake SDK is initialized. |
| + * |
| + * @param options the analysis options to be set |
| + */ |
| + void _internalSetAnalysisOptions(AnalysisOptions options) { |
| + super.analysisOptions = options; |
| + } |
| +} |
| + |
| +/** |
| + * Helper for creating and managing single [AnalysisContext]. |
| + */ |
| +class AnalysisContextHelper { |
| + AnalysisContext context; |
| + |
| + /** |
| + * Creates new [AnalysisContext] using [AnalysisContextFactory]. |
| + */ |
| + AnalysisContextHelper([AnalysisOptionsImpl options]) { |
| + if (options == null) { |
| + options = new AnalysisOptionsImpl(); |
| + } |
| + options.cacheSize = 256; |
| + context = AnalysisContextFactory.contextWithCoreAndOptions(options); |
| + } |
| + |
| + Source addSource(String path, String code) { |
| + Source source = new FileBasedSource(FileUtilities2.createFile(path)); |
| + if (path.endsWith(".dart") || path.endsWith(".html")) { |
| + ChangeSet changeSet = new ChangeSet(); |
| + changeSet.addedSource(source); |
| + context.applyChanges(changeSet); |
| + } |
| + context.setContents(source, code); |
| + return source; |
| + } |
| + |
| + CompilationUnitElement getDefiningUnitElement(Source source) => |
| + context.getCompilationUnitElement(source, source); |
| + |
| + CompilationUnit resolveDefiningUnit(Source source) { |
| + LibraryElement libraryElement = context.computeLibraryElement(source); |
| + return context.resolveCompilationUnit(source, libraryElement); |
| + } |
| + |
| + void runTasks() { |
| + AnalysisResult result = context.performAnalysisTask(); |
| + while (result.changeNotices != null) { |
| + result = context.performAnalysisTask(); |
| + } |
| + } |
| +} |
| + |
| +class TestPackageUriResolver extends UriResolver { |
| + Map<Uri, Source> sourceMap = new HashMap<Uri, Source>(); |
| + |
| + TestPackageUriResolver(Map<String, String> map) { |
| + map.forEach((String uri, String contents) { |
| + sourceMap[Uri.parse(uri)] = |
| + new StringSource(contents, '/test_pkg_source.dart'); |
| + }); |
| + } |
| + |
| + @override |
| + Source resolveAbsolute(Uri uri, [Uri actualUri]) => sourceMap[uri]; |
| + |
| + @override |
| + Uri restoreAbsolute(Source source) => throw new UnimplementedError(); |
| +} |
| + |
| +class _AnalysisContextFactory_initContextWithCore |
| + extends DirectoryBasedDartSdk { |
| + final bool enableAsync; |
| + _AnalysisContextFactory_initContextWithCore(JavaFile arg0, |
| + {this.enableAsync: true}) |
| + : super(arg0); |
| + |
| + @override |
| + LibraryMap initialLibraryMap(bool useDart2jsPaths) { |
| + LibraryMap map = new LibraryMap(); |
| + if (enableAsync) { |
| + _addLibrary(map, DartSdk.DART_ASYNC, false, "async.dart"); |
| + } |
| + _addLibrary(map, DartSdk.DART_CORE, false, "core.dart"); |
| + _addLibrary(map, DartSdk.DART_HTML, false, "html_dartium.dart"); |
| + _addLibrary(map, AnalysisContextFactory._DART_MATH, false, "math.dart"); |
| + _addLibrary(map, AnalysisContextFactory._DART_INTERCEPTORS, true, |
| + "_interceptors.dart"); |
| + _addLibrary( |
| + map, AnalysisContextFactory._DART_JS_HELPER, true, "_js_helper.dart"); |
| + return map; |
| + } |
| + |
| + void _addLibrary(LibraryMap map, String uri, bool isInternal, String path) { |
| + SdkLibraryImpl library = new SdkLibraryImpl(uri); |
| + if (isInternal) { |
| + library.category = "Internal"; |
| + } |
| + library.path = path; |
| + map.setLibrary(uri, library); |
| + } |
| +} |