| Index: packages/analyzer/lib/src/generated/testing/element_factory.dart
|
| diff --git a/packages/analyzer/lib/src/generated/testing/element_factory.dart b/packages/analyzer/lib/src/generated/testing/element_factory.dart
|
| index 736fa0d63e8c29f3264ac63cf9e4c45be5b7de89..20759994272b092d6409e64524bb15772a770910 100644
|
| --- a/packages/analyzer/lib/src/generated/testing/element_factory.dart
|
| +++ b/packages/analyzer/lib/src/generated/testing/element_factory.dart
|
| @@ -2,17 +2,19 @@
|
| // 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.element_factory;
|
| +library analyzer.src.generated.testing.element_factory;
|
|
|
| import 'dart:collection';
|
|
|
| -import 'package:analyzer/src/generated/ast.dart';
|
| +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/dart/element/element.dart';
|
| +import 'package:analyzer/src/dart/element/type.dart';
|
| import 'package:analyzer/src/generated/constant.dart';
|
| -import 'package:analyzer/src/generated/element.dart';
|
| import 'package:analyzer/src/generated/engine.dart';
|
| -import 'package:analyzer/src/generated/java_core.dart';
|
| import 'package:analyzer/src/generated/resolver.dart';
|
| -import 'package:analyzer/src/generated/scanner.dart';
|
| import 'package:analyzer/src/generated/source.dart';
|
| import 'package:analyzer/src/generated/testing/ast_factory.dart';
|
| import 'package:analyzer/src/generated/utilities_dart.dart';
|
| @@ -42,26 +44,10 @@ class ElementFactory {
|
| String typeName, InterfaceType superclassType,
|
| [List<String> parameterNames]) {
|
| ClassElementImpl element = new ClassElementImpl(typeName, 0);
|
| + element.constructors = const <ConstructorElement>[];
|
| element.supertype = superclassType;
|
| - InterfaceTypeImpl type = new InterfaceTypeImpl(element);
|
| - element.type = type;
|
| if (parameterNames != null) {
|
| - int count = parameterNames.length;
|
| - if (count > 0) {
|
| - List<TypeParameterElementImpl> typeParameters =
|
| - new List<TypeParameterElementImpl>(count);
|
| - List<TypeParameterTypeImpl> typeParameterTypes =
|
| - new List<TypeParameterTypeImpl>(count);
|
| - for (int i = 0; i < count; i++) {
|
| - TypeParameterElementImpl typeParameter =
|
| - typeParameterElement(parameterNames[i]);
|
| - typeParameters[i] = typeParameter;
|
| - typeParameterTypes[i] = new TypeParameterTypeImpl(typeParameter);
|
| - typeParameter.type = typeParameterTypes[i];
|
| - }
|
| - element.typeParameters = typeParameters;
|
| - type.typeArguments = typeParameterTypes;
|
| - }
|
| + element.typeParameters = typeParameters(parameterNames);
|
| }
|
| return element;
|
| }
|
| @@ -101,10 +87,18 @@ class ElementFactory {
|
| static ConstructorElementImpl constructorElement(
|
| ClassElement definingClass, String name, bool isConst,
|
| [List<DartType> argumentTypes]) {
|
| - DartType type = definingClass.type;
|
| ConstructorElementImpl constructor = name == null
|
| ? new ConstructorElementImpl("", -1)
|
| : new ConstructorElementImpl(name, 0);
|
| + if (name != null) {
|
| + if (name.isEmpty) {
|
| + constructor.nameEnd = definingClass.name.length;
|
| + } else {
|
| + constructor.periodOffset = definingClass.name.length;
|
| + constructor.nameEnd = definingClass.name.length + name.length + 1;
|
| + }
|
| + }
|
| + constructor.synthetic = name == null;
|
| constructor.const2 = isConst;
|
| if (argumentTypes != null) {
|
| int count = argumentTypes.length;
|
| @@ -119,9 +113,10 @@ class ElementFactory {
|
| } else {
|
| constructor.parameters = <ParameterElement>[];
|
| }
|
| - constructor.returnType = type;
|
| - FunctionTypeImpl constructorType = new FunctionTypeImpl(constructor);
|
| - constructor.type = constructorType;
|
| + constructor.enclosingElement = definingClass;
|
| + if (!constructor.isSynthetic) {
|
| + constructor.constantInitializers = <ConstructorInitializer>[];
|
| + }
|
| return constructor;
|
| }
|
|
|
| @@ -130,17 +125,13 @@ class ElementFactory {
|
| [List<DartType> argumentTypes]) =>
|
| constructorElement(definingClass, name, false, argumentTypes);
|
|
|
| - static ClassElementImpl enumElement(
|
| - TypeProvider typeProvider, String enumName,
|
| + static EnumElementImpl enumElement(TypeProvider typeProvider, String enumName,
|
| [List<String> constantNames]) {
|
| //
|
| // Build the enum.
|
| //
|
| - ClassElementImpl enumElement = new ClassElementImpl(enumName, -1);
|
| - InterfaceTypeImpl enumType = new InterfaceTypeImpl(enumElement);
|
| - enumElement.type = enumType;
|
| - enumElement.supertype = objectType;
|
| - enumElement.enum2 = true;
|
| + EnumElementImpl enumElement = new EnumElementImpl(enumName, -1);
|
| + InterfaceTypeImpl enumType = enumElement.type;
|
| //
|
| // Populate the fields.
|
| //
|
| @@ -160,7 +151,7 @@ class ElementFactory {
|
| FieldElementImpl valuesField = new FieldElementImpl("values", -1);
|
| valuesField.static = true;
|
| valuesField.const3 = true;
|
| - valuesField.type = typeProvider.listType.substitute4(<DartType>[enumType]);
|
| + valuesField.type = typeProvider.listType.instantiate(<DartType>[enumType]);
|
| fields.add(valuesField);
|
| //
|
| // Build the enum constants.
|
| @@ -203,51 +194,48 @@ class ElementFactory {
|
| }
|
|
|
| static FieldElementImpl fieldElement(
|
| - String name, bool isStatic, bool isFinal, bool isConst, DartType type) {
|
| - FieldElementImpl field = new FieldElementImpl(name, 0);
|
| + String name, bool isStatic, bool isFinal, bool isConst, DartType type,
|
| + {Expression initializer}) {
|
| + FieldElementImpl field = isConst
|
| + ? new ConstFieldElementImpl(name, 0)
|
| + : new FieldElementImpl(name, 0);
|
| field.const3 = isConst;
|
| field.final2 = isFinal;
|
| field.static = isStatic;
|
| field.type = type;
|
| - PropertyAccessorElementImpl getter =
|
| - new PropertyAccessorElementImpl.forVariable(field);
|
| - getter.getter = true;
|
| - getter.synthetic = true;
|
| - getter.variable = field;
|
| - getter.returnType = type;
|
| - field.getter = getter;
|
| - FunctionTypeImpl getterType = new FunctionTypeImpl(getter);
|
| - getter.type = getterType;
|
| + if (isConst) {
|
| + (field as ConstFieldElementImpl).constantInitializer = initializer;
|
| + }
|
| + new PropertyAccessorElementImpl_ImplicitGetter(field);
|
| if (!isConst && !isFinal) {
|
| - PropertyAccessorElementImpl setter =
|
| - new PropertyAccessorElementImpl.forVariable(field);
|
| - setter.setter = true;
|
| - setter.synthetic = true;
|
| - setter.variable = field;
|
| - setter.parameters = <ParameterElement>[
|
| - requiredParameter2("_$name", type)
|
| - ];
|
| - setter.returnType = VoidTypeImpl.instance;
|
| - setter.type = new FunctionTypeImpl(setter);
|
| - field.setter = setter;
|
| + new PropertyAccessorElementImpl_ImplicitSetter(field);
|
| }
|
| return field;
|
| }
|
|
|
| static FieldFormalParameterElementImpl fieldFormalParameter(
|
| Identifier name) =>
|
| - new FieldFormalParameterElementImpl(name);
|
| + new FieldFormalParameterElementImpl.forNode(name);
|
| +
|
| + /**
|
| + * Destroy any static state retained by [ElementFactory]. This should be
|
| + * called from the `setUp` method of any tests that use [ElementFactory], in
|
| + * order to ensure that state is not shared between multiple tests.
|
| + */
|
| + static void flushStaticState() {
|
| + _objectElement = null;
|
| + }
|
|
|
| static FunctionElementImpl functionElement(String functionName) =>
|
| functionElement4(functionName, null, null, null, null);
|
|
|
| static FunctionElementImpl functionElement2(
|
| - String functionName, ClassElement returnElement) =>
|
| + String functionName, TypeDefiningElement returnElement) =>
|
| functionElement3(functionName, returnElement, null, null);
|
|
|
| static FunctionElementImpl functionElement3(
|
| String functionName,
|
| - ClassElement returnElement,
|
| + TypeDefiningElement returnElement,
|
| List<TypeDefiningElement> normalParameters,
|
| List<TypeDefiningElement> optionalParameters) {
|
| // We don't create parameter elements because we don't have parameter names
|
| @@ -298,7 +286,7 @@ class ElementFactory {
|
| int nameCount = names == null ? 0 : names.length;
|
| int typeCount = namedParameters == null ? 0 : namedParameters.length;
|
| if (names != null && nameCount != typeCount) {
|
| - throw new IllegalStateException(
|
| + throw new StateError(
|
| "The passed String[] and ClassElement[] arrays had different lengths.");
|
| }
|
| int totalCount = normalCount + nameCount;
|
| @@ -406,26 +394,20 @@ class ElementFactory {
|
| field.static = isStatic;
|
| field.synthetic = true;
|
| field.type = type;
|
| + field.final2 = true;
|
| PropertyAccessorElementImpl getter =
|
| - new PropertyAccessorElementImpl.forVariable(field);
|
| + new PropertyAccessorElementImpl(name, 0);
|
| + getter.synthetic = false;
|
| getter.getter = true;
|
| getter.variable = field;
|
| getter.returnType = type;
|
| + getter.static = isStatic;
|
| field.getter = getter;
|
| FunctionTypeImpl getterType = new FunctionTypeImpl(getter);
|
| getter.type = getterType;
|
| return getter;
|
| }
|
|
|
| - @deprecated
|
| - static HtmlElementImpl htmlUnit(AnalysisContext context, String fileName) {
|
| - Source source =
|
| - new NonExistingSource(fileName, toUri(fileName), UriKind.FILE_URI);
|
| - HtmlElementImpl unit = new HtmlElementImpl(context, fileName);
|
| - unit.source = source;
|
| - return unit;
|
| - }
|
| -
|
| static ImportElementImpl importFor(
|
| LibraryElement importedLibrary, PrefixElement prefix,
|
| [List<NamespaceCombinator> combinators =
|
| @@ -476,16 +458,15 @@ class ElementFactory {
|
| }
|
|
|
| static MethodElementImpl methodElementWithParameters(
|
| + ClassElement enclosingElement,
|
| String methodName,
|
| - List<DartType> typeArguments,
|
| DartType returnType,
|
| List<ParameterElement> parameters) {
|
| MethodElementImpl method = new MethodElementImpl(methodName, 0);
|
| + method.enclosingElement = enclosingElement;
|
| method.parameters = parameters;
|
| method.returnType = returnType;
|
| - FunctionTypeImpl methodType = new FunctionTypeImpl(method);
|
| - methodType.typeArguments = typeArguments;
|
| - method.type = methodType;
|
| + method.type = new FunctionTypeImpl(method);
|
| return method;
|
| }
|
|
|
| @@ -502,6 +483,17 @@ class ElementFactory {
|
| return parameter;
|
| }
|
|
|
| + static ParameterElementImpl namedParameter3(String name,
|
| + {DartType type, Expression initializer, String initializerCode}) {
|
| + DefaultParameterElementImpl parameter =
|
| + new DefaultParameterElementImpl(name, 0);
|
| + parameter.parameterKind = ParameterKind.NAMED;
|
| + parameter.type = type;
|
| + parameter.constantInitializer = initializer;
|
| + parameter.defaultValueCode = initializerCode;
|
| + return parameter;
|
| + }
|
| +
|
| static ParameterElementImpl positionalParameter(String name) {
|
| ParameterElementImpl parameter = new ParameterElementImpl(name, 0);
|
| parameter.parameterKind = ParameterKind.POSITIONAL;
|
| @@ -538,7 +530,7 @@ class ElementFactory {
|
| field.synthetic = true;
|
| field.type = type;
|
| PropertyAccessorElementImpl getter =
|
| - new PropertyAccessorElementImpl.forVariable(field);
|
| + new PropertyAccessorElementImpl(name, -1);
|
| getter.getter = true;
|
| getter.variable = field;
|
| getter.returnType = type;
|
| @@ -547,7 +539,7 @@ class ElementFactory {
|
| getter.type = getterType;
|
| ParameterElementImpl parameter = requiredParameter2("a", type);
|
| PropertyAccessorElementImpl setter =
|
| - new PropertyAccessorElementImpl.forVariable(field);
|
| + new PropertyAccessorElementImpl(name, -1);
|
| setter.setter = true;
|
| setter.synthetic = true;
|
| setter.variable = field;
|
| @@ -569,38 +561,28 @@ class ElementFactory {
|
| TopLevelVariableElementImpl variable;
|
| if (isConst) {
|
| ConstTopLevelVariableElementImpl constant =
|
| - new ConstTopLevelVariableElementImpl(AstFactory.identifier3(name));
|
| - constant.constantInitializer = AstFactory.instanceCreationExpression2(
|
| - Keyword.CONST, AstFactory.typeName(type.element));
|
| + new ConstTopLevelVariableElementImpl.forNode(
|
| + AstFactory.identifier3(name));
|
| + InstanceCreationExpression initializer =
|
| + AstFactory.instanceCreationExpression2(
|
| + Keyword.CONST, AstFactory.typeName(type.element));
|
| + if (type is InterfaceType) {
|
| + ConstructorElement element = type.element.unnamedConstructor;
|
| + initializer.staticElement = element;
|
| + initializer.constructorName.staticElement = element;
|
| + }
|
| + constant.constantInitializer = initializer;
|
| variable = constant;
|
| } else {
|
| variable = new TopLevelVariableElementImpl(name, -1);
|
| }
|
| variable.const3 = isConst;
|
| variable.final2 = isFinal;
|
| - variable.synthetic = true;
|
| - PropertyAccessorElementImpl getter =
|
| - new PropertyAccessorElementImpl.forVariable(variable);
|
| - getter.getter = true;
|
| - getter.synthetic = true;
|
| - getter.variable = variable;
|
| - getter.returnType = type;
|
| - variable.getter = getter;
|
| - FunctionTypeImpl getterType = new FunctionTypeImpl(getter);
|
| - getter.type = getterType;
|
| + variable.synthetic = false;
|
| + variable.type = type;
|
| + new PropertyAccessorElementImpl_ImplicitGetter(variable);
|
| if (!isConst && !isFinal) {
|
| - PropertyAccessorElementImpl setter =
|
| - new PropertyAccessorElementImpl.forVariable(variable);
|
| - setter.setter = true;
|
| - setter.static = true;
|
| - setter.synthetic = true;
|
| - setter.variable = variable;
|
| - setter.parameters = <ParameterElement>[
|
| - requiredParameter2("_$name", type)
|
| - ];
|
| - setter.returnType = VoidTypeImpl.instance;
|
| - setter.type = new FunctionTypeImpl(setter);
|
| - variable.setter = setter;
|
| + new PropertyAccessorElementImpl_ImplicitSetter(variable);
|
| }
|
| return variable;
|
| }
|
| @@ -610,4 +592,25 @@ class ElementFactory {
|
| element.type = new TypeParameterTypeImpl(element);
|
| return element;
|
| }
|
| +
|
| + static List<TypeParameterElement> typeParameters(List<String> names) {
|
| + int count = names.length;
|
| + if (count == 0) {
|
| + return TypeParameterElement.EMPTY_LIST;
|
| + }
|
| + List<TypeParameterElementImpl> typeParameters =
|
| + new List<TypeParameterElementImpl>(count);
|
| + for (int i = 0; i < count; i++) {
|
| + typeParameters[i] = typeParameterWithType(names[i]);
|
| + }
|
| + return typeParameters;
|
| + }
|
| +
|
| + static TypeParameterElementImpl typeParameterWithType(String name,
|
| + [DartType bound]) {
|
| + TypeParameterElementImpl typeParameter = typeParameterElement(name);
|
| + typeParameter.type = new TypeParameterTypeImpl(typeParameter);
|
| + typeParameter.bound = bound;
|
| + return typeParameter;
|
| + }
|
| }
|
|
|