Index: mojo/public/dart/third_party/analyzer/lib/src/generated/testing/test_type_provider.dart |
diff --git a/mojo/public/dart/third_party/analyzer/lib/src/generated/testing/test_type_provider.dart b/mojo/public/dart/third_party/analyzer/lib/src/generated/testing/test_type_provider.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..d0d9c0095a24172418c44a08a92884dc8eedb001 |
--- /dev/null |
+++ b/mojo/public/dart/third_party/analyzer/lib/src/generated/testing/test_type_provider.dart |
@@ -0,0 +1,628 @@ |
+// Copyright (c) 2014, 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 engine.testing.test_type_provider; |
+ |
+import 'package:analyzer/src/generated/ast.dart'; |
+import 'package:analyzer/src/generated/constant.dart'; |
+import 'package:analyzer/src/generated/element.dart'; |
+import 'package:analyzer/src/generated/resolver.dart'; |
+import 'package:analyzer/src/generated/testing/ast_factory.dart'; |
+import 'package:analyzer/src/generated/testing/element_factory.dart'; |
+ |
+/** |
+ * A type provider that can be used by tests without creating the element model |
+ * for the core library. |
+ */ |
+class TestTypeProvider implements TypeProvider { |
+ /** |
+ * The type representing the built-in type 'bool'. |
+ */ |
+ InterfaceType _boolType; |
+ |
+ /** |
+ * The type representing the type 'bottom'. |
+ */ |
+ DartType _bottomType; |
+ |
+ /** |
+ * The type representing the built-in type 'double'. |
+ */ |
+ InterfaceType _doubleType; |
+ |
+ /** |
+ * The type representing the built-in type 'deprecated'. |
+ */ |
+ InterfaceType _deprecatedType; |
+ |
+ /** |
+ * The type representing the built-in type 'dynamic'. |
+ */ |
+ DartType _dynamicType; |
+ |
+ /** |
+ * The type representing the built-in type 'Function'. |
+ */ |
+ InterfaceType _functionType; |
+ |
+ /** |
+ * The type representing 'Future<dynamic>' |
+ */ |
+ InterfaceType _futureDynamicType; |
+ |
+ /** |
+ * The type representing 'Future<Null>' |
+ */ |
+ InterfaceType _futureNullType; |
+ |
+ /** |
+ * The type representing the built-in type 'Future' |
+ */ |
+ InterfaceType _futureType; |
+ |
+ /** |
+ * The type representing the built-in type 'int'. |
+ */ |
+ InterfaceType _intType; |
+ |
+ /** |
+ * The type representing 'Iterable<dynamic>' |
+ */ |
+ InterfaceType _iterableDynamicType; |
+ |
+ /** |
+ * The type representing the built-in type 'Iterable'. |
+ */ |
+ InterfaceType _iterableType; |
+ |
+ /** |
+ * The type representing the built-in type 'Iterator'. |
+ */ |
+ InterfaceType _iteratorType; |
+ |
+ /** |
+ * The type representing the built-in type 'List'. |
+ */ |
+ InterfaceType _listType; |
+ |
+ /** |
+ * The type representing the built-in type 'Map'. |
+ */ |
+ InterfaceType _mapType; |
+ |
+ /** |
+ * An shared object representing the value 'null'. |
+ */ |
+ DartObjectImpl _nullObject; |
+ |
+ /** |
+ * The type representing the built-in type 'Null'. |
+ */ |
+ InterfaceType _nullType; |
+ |
+ /** |
+ * The type representing the built-in type 'num'. |
+ */ |
+ InterfaceType _numType; |
+ |
+ /** |
+ * The type representing the built-in type 'Object'. |
+ */ |
+ InterfaceType _objectType; |
+ |
+ /** |
+ * The type representing the built-in type 'StackTrace'. |
+ */ |
+ InterfaceType _stackTraceType; |
+ |
+ /** |
+ * The type representing 'Stream<dynamic>'. |
+ */ |
+ InterfaceType _streamDynamicType; |
+ |
+ /** |
+ * The type representing the built-in type 'Stream'. |
+ */ |
+ InterfaceType _streamType; |
+ |
+ /** |
+ * The type representing the built-in type 'String'. |
+ */ |
+ InterfaceType _stringType; |
+ |
+ /** |
+ * The type representing the built-in type 'Symbol'. |
+ */ |
+ InterfaceType _symbolType; |
+ |
+ /** |
+ * The type representing the built-in type 'Type'. |
+ */ |
+ InterfaceType _typeType; |
+ |
+ /** |
+ * The type representing typenames that can't be resolved. |
+ */ |
+ DartType _undefinedType; |
+ |
+ @override |
+ InterfaceType get boolType { |
+ if (_boolType == null) { |
+ ClassElementImpl boolElement = ElementFactory.classElement2("bool"); |
+ _boolType = boolElement.type; |
+ ConstructorElementImpl fromEnvironment = ElementFactory |
+ .constructorElement(boolElement, "fromEnvironment", true); |
+ fromEnvironment.parameters = <ParameterElement>[ |
+ ElementFactory.requiredParameter2("name", stringType), |
+ ElementFactory.namedParameter2("defaultValue", _boolType) |
+ ]; |
+ fromEnvironment.factory = true; |
+ fromEnvironment.isCycleFree = true; |
+ boolElement.constructors = <ConstructorElement>[fromEnvironment]; |
+ } |
+ return _boolType; |
+ } |
+ |
+ @override |
+ DartType get bottomType { |
+ if (_bottomType == null) { |
+ _bottomType = BottomTypeImpl.instance; |
+ } |
+ return _bottomType; |
+ } |
+ |
+ @override |
+ InterfaceType get deprecatedType { |
+ if (_deprecatedType == null) { |
+ ClassElementImpl deprecatedElement = |
+ ElementFactory.classElement2("Deprecated"); |
+ ConstructorElementImpl constructor = ElementFactory.constructorElement( |
+ deprecatedElement, null, true, [stringType]); |
+ constructor.constantInitializers = <ConstructorInitializer>[ |
+ AstFactory.constructorFieldInitializer( |
+ true, 'expires', AstFactory.identifier3('expires')) |
+ ]; |
+ deprecatedElement.constructors = <ConstructorElement>[constructor]; |
+ _deprecatedType = deprecatedElement.type; |
+ } |
+ return _deprecatedType; |
+ } |
+ |
+ @override |
+ InterfaceType get doubleType { |
+ if (_doubleType == null) { |
+ _initializeNumericTypes(); |
+ } |
+ return _doubleType; |
+ } |
+ |
+ @override |
+ DartType get dynamicType { |
+ if (_dynamicType == null) { |
+ _dynamicType = DynamicTypeImpl.instance; |
+ } |
+ return _dynamicType; |
+ } |
+ |
+ @override |
+ InterfaceType get functionType { |
+ if (_functionType == null) { |
+ _functionType = ElementFactory.classElement2("Function").type; |
+ } |
+ return _functionType; |
+ } |
+ |
+ @override |
+ InterfaceType get futureDynamicType { |
+ if (_futureDynamicType == null) { |
+ _futureDynamicType = futureType.substitute4(<DartType>[dynamicType]); |
+ } |
+ return _futureDynamicType; |
+ } |
+ |
+ @override |
+ InterfaceType get futureNullType { |
+ if (_futureNullType == null) { |
+ _futureNullType = futureType.substitute4(<DartType>[nullType]); |
+ } |
+ return _futureNullType; |
+ } |
+ |
+ @override |
+ InterfaceType get futureType { |
+ if (_futureType == null) { |
+ _futureType = ElementFactory.classElement2("Future", ["T"]).type; |
+ } |
+ return _futureType; |
+ } |
+ |
+ @override |
+ InterfaceType get intType { |
+ if (_intType == null) { |
+ _initializeNumericTypes(); |
+ } |
+ return _intType; |
+ } |
+ |
+ @override |
+ InterfaceType get iterableDynamicType { |
+ if (_iterableDynamicType == null) { |
+ _iterableDynamicType = iterableType.substitute4(<DartType>[dynamicType]); |
+ } |
+ return _iterableDynamicType; |
+ } |
+ |
+ @override |
+ InterfaceType get iterableType { |
+ if (_iterableType == null) { |
+ ClassElementImpl iterableElement = |
+ ElementFactory.classElement2("Iterable", ["E"]); |
+ _iterableType = iterableElement.type; |
+ DartType eType = iterableElement.typeParameters[0].type; |
+ _setAccessors(iterableElement, <PropertyAccessorElement>[ |
+ ElementFactory.getterElement( |
+ "iterator", false, iteratorType.substitute4(<DartType>[eType])), |
+ ElementFactory.getterElement("last", false, eType) |
+ ]); |
+ iterableElement.constructors = ConstructorElement.EMPTY_LIST; |
+ _propagateTypeArguments(iterableElement); |
+ } |
+ return _iterableType; |
+ } |
+ |
+ InterfaceType get iteratorType { |
+ if (_iteratorType == null) { |
+ ClassElementImpl iteratorElement = |
+ ElementFactory.classElement2("Iterator", ["E"]); |
+ _iteratorType = iteratorElement.type; |
+ DartType eType = iteratorElement.typeParameters[0].type; |
+ _setAccessors(iteratorElement, <PropertyAccessorElement>[ |
+ ElementFactory.getterElement("current", false, eType) |
+ ]); |
+ iteratorElement.constructors = ConstructorElement.EMPTY_LIST; |
+ _propagateTypeArguments(iteratorElement); |
+ } |
+ return _iteratorType; |
+ } |
+ |
+ @override |
+ InterfaceType get listType { |
+ if (_listType == null) { |
+ ClassElementImpl listElement = |
+ ElementFactory.classElement2("List", ["E"]); |
+ listElement.constructors = <ConstructorElement>[ |
+ ElementFactory.constructorElement2(listElement, null) |
+ ]; |
+ _listType = listElement.type; |
+ DartType eType = listElement.typeParameters[0].type; |
+ InterfaceType iterableType = |
+ this.iterableType.substitute4(<DartType>[eType]); |
+ listElement.interfaces = <InterfaceType>[iterableType]; |
+ _setAccessors(listElement, <PropertyAccessorElement>[ |
+ ElementFactory.getterElement("length", false, intType) |
+ ]); |
+ listElement.methods = <MethodElement>[ |
+ ElementFactory.methodElement("[]", eType, [intType]), |
+ ElementFactory.methodElement( |
+ "[]=", VoidTypeImpl.instance, [intType, eType]), |
+ ElementFactory.methodElement("add", VoidTypeImpl.instance, [eType]) |
+ ]; |
+ _propagateTypeArguments(listElement); |
+ } |
+ return _listType; |
+ } |
+ |
+ @override |
+ InterfaceType get mapType { |
+ if (_mapType == null) { |
+ ClassElementImpl mapElement = |
+ ElementFactory.classElement2("Map", ["K", "V"]); |
+ _mapType = mapElement.type; |
+ DartType kType = mapElement.typeParameters[0].type; |
+ DartType vType = mapElement.typeParameters[1].type; |
+ _setAccessors(mapElement, <PropertyAccessorElement>[ |
+ ElementFactory.getterElement("length", false, intType) |
+ ]); |
+ mapElement.methods = <MethodElement>[ |
+ ElementFactory.methodElement("[]", vType, [objectType]), |
+ ElementFactory.methodElement( |
+ "[]=", VoidTypeImpl.instance, [kType, vType]) |
+ ]; |
+ mapElement.constructors = ConstructorElement.EMPTY_LIST; |
+ _propagateTypeArguments(mapElement); |
+ } |
+ return _mapType; |
+ } |
+ |
+ @override |
+ List<InterfaceType> get nonSubtypableTypes => <InterfaceType>[ |
+ nullType, |
+ numType, |
+ intType, |
+ doubleType, |
+ boolType, |
+ stringType |
+ ]; |
+ |
+ @override |
+ DartObjectImpl get nullObject { |
+ if (_nullObject == null) { |
+ _nullObject = new DartObjectImpl(nullType, NullState.NULL_STATE); |
+ } |
+ return _nullObject; |
+ } |
+ |
+ @override |
+ InterfaceType get nullType { |
+ if (_nullType == null) { |
+ ClassElementImpl nullElement = ElementFactory.classElement2("Null"); |
+ nullElement.constructors = ConstructorElement.EMPTY_LIST; |
+ _nullType = nullElement.type; |
+ } |
+ return _nullType; |
+ } |
+ |
+ @override |
+ InterfaceType get numType { |
+ if (_numType == null) { |
+ _initializeNumericTypes(); |
+ } |
+ return _numType; |
+ } |
+ |
+ @override |
+ InterfaceType get objectType { |
+ if (_objectType == null) { |
+ ClassElementImpl objectElement = ElementFactory.object; |
+ _objectType = objectElement.type; |
+ ConstructorElementImpl constructor = |
+ ElementFactory.constructorElement(objectElement, null, true); |
+ constructor.constantInitializers = <ConstructorInitializer>[]; |
+ objectElement.constructors = <ConstructorElement>[constructor]; |
+ objectElement.methods = <MethodElement>[ |
+ ElementFactory.methodElement("toString", stringType), |
+ ElementFactory.methodElement("==", boolType, [_objectType]), |
+ ElementFactory.methodElement("noSuchMethod", dynamicType, [dynamicType]) |
+ ]; |
+ _setAccessors(objectElement, <PropertyAccessorElement>[ |
+ ElementFactory.getterElement("hashCode", false, intType), |
+ ElementFactory.getterElement("runtimeType", false, typeType) |
+ ]); |
+ } |
+ return _objectType; |
+ } |
+ |
+ @override |
+ InterfaceType get stackTraceType { |
+ if (_stackTraceType == null) { |
+ _stackTraceType = ElementFactory.classElement2("StackTrace").type; |
+ } |
+ return _stackTraceType; |
+ } |
+ |
+ @override |
+ InterfaceType get streamDynamicType { |
+ if (_streamDynamicType == null) { |
+ _streamDynamicType = streamType.substitute4(<DartType>[dynamicType]); |
+ } |
+ return _streamDynamicType; |
+ } |
+ |
+ @override |
+ InterfaceType get streamType { |
+ if (_streamType == null) { |
+ _streamType = ElementFactory.classElement2("Stream", ["T"]).type; |
+ } |
+ return _streamType; |
+ } |
+ |
+ @override |
+ InterfaceType get stringType { |
+ if (_stringType == null) { |
+ _stringType = ElementFactory.classElement2("String").type; |
+ ClassElementImpl stringElement = _stringType.element as ClassElementImpl; |
+ _setAccessors(stringElement, <PropertyAccessorElement>[ |
+ ElementFactory.getterElement("isEmpty", false, boolType), |
+ ElementFactory.getterElement("length", false, intType), |
+ ElementFactory.getterElement( |
+ "codeUnits", false, listType.substitute4(<DartType>[intType])) |
+ ]); |
+ stringElement.methods = <MethodElement>[ |
+ ElementFactory.methodElement("+", _stringType, [_stringType]), |
+ ElementFactory.methodElement("toLowerCase", _stringType), |
+ ElementFactory.methodElement("toUpperCase", _stringType) |
+ ]; |
+ ConstructorElementImpl fromEnvironment = ElementFactory |
+ .constructorElement(stringElement, "fromEnvironment", true); |
+ fromEnvironment.parameters = <ParameterElement>[ |
+ ElementFactory.requiredParameter2("name", stringType), |
+ ElementFactory.namedParameter2("defaultValue", _stringType) |
+ ]; |
+ fromEnvironment.factory = true; |
+ fromEnvironment.isCycleFree = true; |
+ stringElement.constructors = <ConstructorElement>[fromEnvironment]; |
+ } |
+ return _stringType; |
+ } |
+ |
+ @override |
+ InterfaceType get symbolType { |
+ if (_symbolType == null) { |
+ ClassElementImpl symbolClass = ElementFactory.classElement2("Symbol"); |
+ ConstructorElementImpl constructor = ElementFactory.constructorElement( |
+ symbolClass, null, true, [stringType]); |
+ constructor.factory = true; |
+ constructor.isCycleFree = true; |
+ symbolClass.constructors = <ConstructorElement>[constructor]; |
+ _symbolType = symbolClass.type; |
+ } |
+ return _symbolType; |
+ } |
+ |
+ @override |
+ InterfaceType get typeType { |
+ if (_typeType == null) { |
+ _typeType = ElementFactory.classElement2("Type").type; |
+ } |
+ return _typeType; |
+ } |
+ |
+ @override |
+ DartType get undefinedType { |
+ if (_undefinedType == null) { |
+ _undefinedType = UndefinedTypeImpl.instance; |
+ } |
+ return _undefinedType; |
+ } |
+ |
+ /** |
+ * Initialize the numeric types. They are created as a group so that we can |
+ * (a) create the right hierarchy and (b) add members to them. |
+ */ |
+ void _initializeNumericTypes() { |
+ // |
+ // Create the type hierarchy. |
+ // |
+ ClassElementImpl numElement = ElementFactory.classElement2("num"); |
+ _numType = numElement.type; |
+ ClassElementImpl intElement = ElementFactory.classElement("int", _numType); |
+ _intType = intElement.type; |
+ ClassElementImpl doubleElement = |
+ ElementFactory.classElement("double", _numType); |
+ _doubleType = doubleElement.type; |
+ // |
+ // Force the referenced types to be cached. |
+ // |
+ objectType; |
+ boolType; |
+ stringType; |
+ // |
+ // Add the methods. |
+ // |
+ numElement.methods = <MethodElement>[ |
+ ElementFactory.methodElement("+", _numType, [_numType]), |
+ ElementFactory.methodElement("-", _numType, [_numType]), |
+ ElementFactory.methodElement("*", _numType, [_numType]), |
+ ElementFactory.methodElement("%", _numType, [_numType]), |
+ ElementFactory.methodElement("/", _doubleType, [_numType]), |
+ ElementFactory.methodElement("~/", _numType, [_numType]), |
+ ElementFactory.methodElement("-", _numType), |
+ ElementFactory.methodElement("remainder", _numType, [_numType]), |
+ ElementFactory.methodElement("<", _boolType, [_numType]), |
+ ElementFactory.methodElement("<=", _boolType, [_numType]), |
+ ElementFactory.methodElement(">", _boolType, [_numType]), |
+ ElementFactory.methodElement(">=", _boolType, [_numType]), |
+ ElementFactory.methodElement("==", _boolType, [_objectType]), |
+ ElementFactory.methodElement("isNaN", _boolType), |
+ ElementFactory.methodElement("isNegative", _boolType), |
+ ElementFactory.methodElement("isInfinite", _boolType), |
+ ElementFactory.methodElement("abs", _numType), |
+ ElementFactory.methodElement("floor", _numType), |
+ ElementFactory.methodElement("ceil", _numType), |
+ ElementFactory.methodElement("round", _numType), |
+ ElementFactory.methodElement("truncate", _numType), |
+ ElementFactory.methodElement("toInt", _intType), |
+ ElementFactory.methodElement("toDouble", _doubleType), |
+ ElementFactory.methodElement("toStringAsFixed", _stringType, [_intType]), |
+ ElementFactory.methodElement( |
+ "toStringAsExponential", _stringType, [_intType]), |
+ ElementFactory.methodElement( |
+ "toStringAsPrecision", _stringType, [_intType]), |
+ ElementFactory.methodElement("toRadixString", _stringType, [_intType]) |
+ ]; |
+ intElement.methods = <MethodElement>[ |
+ ElementFactory.methodElement("&", _intType, [_intType]), |
+ ElementFactory.methodElement("|", _intType, [_intType]), |
+ ElementFactory.methodElement("^", _intType, [_intType]), |
+ ElementFactory.methodElement("~", _intType), |
+ ElementFactory.methodElement("<<", _intType, [_intType]), |
+ ElementFactory.methodElement(">>", _intType, [_intType]), |
+ ElementFactory.methodElement("-", _intType), |
+ ElementFactory.methodElement("abs", _intType), |
+ ElementFactory.methodElement("round", _intType), |
+ ElementFactory.methodElement("floor", _intType), |
+ ElementFactory.methodElement("ceil", _intType), |
+ ElementFactory.methodElement("truncate", _intType), |
+ ElementFactory.methodElement("toString", _stringType) |
+ ]; |
+ ConstructorElementImpl fromEnvironment = |
+ ElementFactory.constructorElement(intElement, "fromEnvironment", true); |
+ fromEnvironment.parameters = <ParameterElement>[ |
+ ElementFactory.requiredParameter2("name", stringType), |
+ ElementFactory.namedParameter2("defaultValue", _intType) |
+ ]; |
+ fromEnvironment.factory = true; |
+ fromEnvironment.isCycleFree = true; |
+ numElement.constructors = ConstructorElement.EMPTY_LIST; |
+ intElement.constructors = <ConstructorElement>[fromEnvironment]; |
+ doubleElement.constructors = ConstructorElement.EMPTY_LIST; |
+ List<FieldElement> fields = <FieldElement>[ |
+ ElementFactory.fieldElement("NAN", true, false, true, _doubleType), |
+ ElementFactory.fieldElement("INFINITY", true, false, true, _doubleType), |
+ ElementFactory.fieldElement( |
+ "NEGATIVE_INFINITY", true, false, true, _doubleType), |
+ ElementFactory.fieldElement( |
+ "MIN_POSITIVE", true, false, true, _doubleType), |
+ ElementFactory.fieldElement("MAX_FINITE", true, false, true, _doubleType) |
+ ]; |
+ doubleElement.fields = fields; |
+ int fieldCount = fields.length; |
+ List<PropertyAccessorElement> accessors = |
+ new List<PropertyAccessorElement>(fieldCount); |
+ for (int i = 0; i < fieldCount; i++) { |
+ accessors[i] = fields[i].getter; |
+ } |
+ doubleElement.accessors = accessors; |
+ doubleElement.methods = <MethodElement>[ |
+ ElementFactory.methodElement("remainder", _doubleType, [_numType]), |
+ ElementFactory.methodElement("+", _doubleType, [_numType]), |
+ ElementFactory.methodElement("-", _doubleType, [_numType]), |
+ ElementFactory.methodElement("*", _doubleType, [_numType]), |
+ ElementFactory.methodElement("%", _doubleType, [_numType]), |
+ ElementFactory.methodElement("/", _doubleType, [_numType]), |
+ ElementFactory.methodElement("~/", _doubleType, [_numType]), |
+ ElementFactory.methodElement("-", _doubleType), |
+ ElementFactory.methodElement("abs", _doubleType), |
+ ElementFactory.methodElement("round", _doubleType), |
+ ElementFactory.methodElement("floor", _doubleType), |
+ ElementFactory.methodElement("ceil", _doubleType), |
+ ElementFactory.methodElement("truncate", _doubleType), |
+ ElementFactory.methodElement("toString", _stringType) |
+ ]; |
+ } |
+ |
+ /** |
+ * Given a [classElement] representing a class with type parameters, propagate |
+ * those type parameters to all of the accessors, methods and constructors |
+ * defined for the class. |
+ */ |
+ void _propagateTypeArguments(ClassElementImpl classElement) { |
+ List<DartType> typeArguments = |
+ TypeParameterTypeImpl.getTypes(classElement.typeParameters); |
+ for (PropertyAccessorElement accessor in classElement.accessors) { |
+ FunctionTypeImpl functionType = accessor.type as FunctionTypeImpl; |
+ functionType.typeArguments = typeArguments; |
+ } |
+ for (MethodElement method in classElement.methods) { |
+ FunctionTypeImpl functionType = method.type as FunctionTypeImpl; |
+ functionType.typeArguments = typeArguments; |
+ } |
+ for (ConstructorElement constructor in classElement.constructors) { |
+ FunctionTypeImpl functionType = constructor.type as FunctionTypeImpl; |
+ functionType.typeArguments = typeArguments; |
+ } |
+ } |
+ |
+ /** |
+ * Set the accessors for the given class [element] to the given [accessors] |
+ * and also set the fields to those that correspond to the accessors. |
+ */ |
+ void _setAccessors( |
+ ClassElementImpl element, List<PropertyAccessorElement> accessors) { |
+ element.accessors = accessors; |
+ element.fields = accessors |
+ .map((PropertyAccessorElement accessor) => accessor.variable) |
+ .toList(); |
+ } |
+} |