| // Copyright (c) 2024, 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. |
| |
| part of '../../ast.dart'; |
| |
| /// Almost const <NamedExpression>[], but not const in an attempt to avoid |
| /// polymorphism. See https://dart-review.googlesource.com/c/sdk/+/185828. |
| final List<NamedExpression> emptyListOfNamedExpression = List.filled( |
| 0, |
| dummyNamedExpression, |
| growable: false, |
| ); |
| |
| /// Almost const <VariableDeclaration>[], but not const in an attempt to avoid |
| /// polymorphism. See https://dart-review.googlesource.com/c/sdk/+/185828. |
| final List<VariableDeclaration> emptyListOfVariableDeclaration = List.filled( |
| 0, |
| dummyVariableDeclaration, |
| growable: false, |
| ); |
| |
| /// Almost const <Combinator>[], but not const in an attempt to avoid |
| /// polymorphism. See https://dart-review.googlesource.com/c/sdk/+/185828. |
| final List<Combinator> emptyListOfCombinator = List.filled( |
| 0, |
| dummyCombinator, |
| growable: false, |
| ); |
| |
| /// Almost const <Expression>[], but not const in an attempt to avoid |
| /// polymorphism. See https://dart-review.googlesource.com/c/sdk/+/185828. |
| final List<Expression> emptyListOfExpression = List.filled( |
| 0, |
| dummyExpression, |
| growable: false, |
| ); |
| |
| /// Almost const <AssertStatement>[], but not const in an attempt to avoid |
| /// polymorphism. See https://dart-review.googlesource.com/c/sdk/+/185828. |
| final List<AssertStatement> emptyListOfAssertStatement = List.filled( |
| 0, |
| dummyAssertStatement, |
| growable: false, |
| ); |
| |
| /// Almost const <SwitchCase>[], but not const in an attempt to avoid |
| /// polymorphism. See https://dart-review.googlesource.com/c/sdk/+/185828. |
| final List<SwitchCase> emptyListOfSwitchCase = List.filled( |
| 0, |
| dummySwitchCase, |
| growable: false, |
| ); |
| |
| /// Almost const <SwitchExpressionCase>[], but not const in an attempt to avoid |
| /// polymorphism. See https://dart-review.googlesource.com/c/sdk/+/185828. |
| final List<SwitchExpressionCase> emptyListOfSwitchExpressionCase = List.filled( |
| 0, |
| dummySwitchExpressionCase, |
| growable: false, |
| ); |
| |
| /// Almost const <PatternSwitchCase>[], but not const in an attempt to avoid |
| /// polymorphism. See https://dart-review.googlesource.com/c/sdk/+/185828. |
| final List<PatternSwitchCase> emptyListOfPatternSwitchCase = List.filled( |
| 0, |
| dummyPatternSwitchCase, |
| growable: false, |
| ); |
| |
| /// Almost const <Catch>[], but not const in an attempt to avoid |
| /// polymorphism. See https://dart-review.googlesource.com/c/sdk/+/185828. |
| final List<Catch> emptyListOfCatch = List.filled( |
| 0, |
| dummyCatch, |
| growable: false, |
| ); |
| |
| /// Almost const <Supertype>[], but not const in an attempt to avoid |
| /// polymorphism. See https://dart-review.googlesource.com/c/sdk/+/185828. |
| final List<Supertype> emptyListOfSupertype = List.filled( |
| 0, |
| dummySupertype, |
| growable: false, |
| ); |
| |
| /// Almost const <DartType>[], but not const in an attempt to avoid |
| /// polymorphism. See https://dart-review.googlesource.com/c/sdk/+/185828. |
| final List<DartType> emptyListOfDartType = List.filled( |
| 0, |
| dummyDartType, |
| growable: false, |
| ); |
| |
| /// Almost const <NamedType>[], but not const in an attempt to avoid |
| /// polymorphism. See https://dart-review.googlesource.com/c/sdk/+/185828. |
| final List<NamedType> emptyListOfNamedType = List.filled( |
| 0, |
| dummyNamedType, |
| growable: false, |
| ); |
| |
| /// Almost const <TypeParameter>[], but not const in an attempt to avoid |
| /// polymorphism. See https://dart-review.googlesource.com/c/sdk/+/185828. |
| final List<TypeParameter> emptyListOfTypeParameter = List.filled( |
| 0, |
| dummyTypeParameter, |
| growable: false, |
| ); |
| |
| /// Almost const <StructuralParameter>[], but not const in an attempt to |
| /// avoid polymorphism. See https://dart-review.googlesource.com/c/sdk/+/185828. |
| final List<StructuralParameter> emptyListOfStructuralParameter = List.filled( |
| 0, |
| dummyStructuralParameter, |
| growable: false, |
| ); |
| |
| /// Almost const <Constant>[], but not const in an attempt to avoid |
| /// polymorphism. See https://dart-review.googlesource.com/c/sdk/+/185828. |
| final List<Constant> emptyListOfConstant = List.filled( |
| 0, |
| dummyConstant, |
| growable: false, |
| ); |
| |
| /// Almost const <String>[], but not const in an attempt to avoid |
| /// polymorphism. See https://dart-review.googlesource.com/c/sdk/+/185828. |
| final List<String> emptyListOfString = List.filled(0, '', growable: false); |
| |
| /// Almost const <Typedef>[], but not const in an attempt to avoid |
| /// polymorphism. See https://dart-review.googlesource.com/c/sdk/+/185828. |
| final List<Typedef> emptyListOfTypedef = List.filled( |
| 0, |
| dummyTypedef, |
| growable: false, |
| ); |
| |
| /// Almost const <Extension>[], but not const in an attempt to avoid |
| /// polymorphism. See https://dart-review.googlesource.com/c/sdk/+/185828. |
| final List<Extension> emptyListOfExtension = List.filled( |
| 0, |
| dummyExtension, |
| growable: false, |
| ); |
| |
| /// Almost const <ExtensionTypeDeclaration>[], but not const in an attempt to |
| /// avoid polymorphism. See https://dart-review.googlesource.com/c/sdk/+/185828. |
| final List<ExtensionTypeDeclaration> emptyListOfExtensionTypeDeclaration = |
| List.filled(0, dummyExtensionTypeDeclaration, growable: false); |
| |
| /// Almost const <Field>[], but not const in an attempt to avoid |
| /// polymorphism. See https://dart-review.googlesource.com/c/sdk/+/185828. |
| final List<Field> emptyListOfField = List.filled( |
| 0, |
| dummyField, |
| growable: false, |
| ); |
| |
| /// Almost const <LibraryPart>[], but not const in an attempt to avoid |
| /// polymorphism. See https://dart-review.googlesource.com/c/sdk/+/185828. |
| final List<LibraryPart> emptyListOfLibraryPart = List.filled( |
| 0, |
| dummyLibraryPart, |
| growable: false, |
| ); |
| |
| /// Almost const <LibraryDependency>[], but not const in an attempt to avoid |
| /// polymorphism. See https://dart-review.googlesource.com/c/sdk/+/185828. |
| final List<LibraryDependency> emptyListOfLibraryDependency = List.filled( |
| 0, |
| dummyLibraryDependency, |
| growable: false, |
| ); |
| |
| /// Almost const <Procedure>[], but not const in an attempt to avoid |
| /// polymorphism. See https://dart-review.googlesource.com/c/sdk/+/185828. |
| final List<Procedure> emptyListOfProcedure = List.filled( |
| 0, |
| dummyProcedure, |
| growable: false, |
| ); |
| |
| /// Almost const <MapLiteralEntry>[], but not const in an attempt to avoid |
| /// polymorphism. See https://dart-review.googlesource.com/c/sdk/+/185828. |
| final List<MapLiteralEntry> emptyListOfMapLiteralEntry = List.filled( |
| 0, |
| dummyMapLiteralEntry, |
| growable: false, |
| ); |
| |
| /// Almost const <Class>[], but not const in an attempt to avoid |
| /// polymorphism. See https://dart-review.googlesource.com/c/sdk/+/185828. |
| final List<Class> emptyListOfClass = List.filled( |
| 0, |
| dummyClass, |
| growable: false, |
| ); |
| |
| /// Almost const <ExtensionMemberDescriptor>[], but not const in an attempt to |
| /// avoid polymorphism. See https://dart-review.googlesource.com/c/sdk/+/185828. |
| final List<ExtensionMemberDescriptor> emptyListOfExtensionMemberDescriptor = |
| List.filled(0, dummyExtensionMemberDescriptor, growable: false); |
| |
| /// Almost const <ExtensionTypeMemberDescriptor>[], but not const in an attempt |
| /// to avoid polymorphism. See |
| /// https://dart-review.googlesource.com/c/sdk/+/185828. |
| final List<ExtensionTypeMemberDescriptor> |
| emptyListOfExtensionTypeMemberDescriptor = List.filled( |
| 0, |
| dummyExtensionTypeMemberDescriptor, |
| growable: false, |
| ); |
| |
| /// Almost const <TypeDeclarationType>[], but not const in an attempt to avoid |
| /// polymorphism. See https://dart-review.googlesource.com/c/sdk/+/185828. |
| final List<TypeDeclarationType> emptyListOfTypeDeclarationType = List.filled( |
| 0, |
| dummyExtensionType, |
| growable: false, |
| ); |
| |
| /// Almost const <Constructor>[], but not const in an attempt to avoid |
| /// polymorphism. See https://dart-review.googlesource.com/c/sdk/+/185828. |
| final List<Constructor> emptyListOfConstructor = List.filled( |
| 0, |
| dummyConstructor, |
| growable: false, |
| ); |
| |
| /// Almost const <Initializer>[], but not const in an attempt to avoid |
| /// polymorphism. See https://dart-review.googlesource.com/c/sdk/+/185828. |
| final List<Initializer> emptyListOfInitializer = List.filled( |
| 0, |
| dummyInitializer, |
| growable: false, |
| ); |
| |
| /// Non-nullable [DartType] dummy value. |
| /// |
| /// This is used as the removal sentinel in [RemovingTransformer] and can be |
| /// used for instance as a dummy initial value for the `List.filled` |
| /// constructor. |
| final DartType dummyDartType = new DynamicType(); |
| |
| /// Non-nullable [Supertype] dummy value. |
| /// |
| /// This is used as the removal sentinel in [RemovingTransformer] and can be |
| /// used for instance as a dummy initial value for the `List.filled` |
| /// constructor. |
| final Supertype dummySupertype = new Supertype(dummyClass, const []); |
| |
| /// Non-nullable [NamedType] dummy value. |
| /// |
| /// This is used as the removal sentinel in [RemovingTransformer] and can be |
| /// used for instance as a dummy initial value for the `List.filled` |
| /// constructor. |
| final NamedType dummyNamedType = new NamedType( |
| '', |
| dummyDartType, |
| isRequired: false, |
| ); |
| |
| /// Non-nullable [Uri] dummy value. |
| final Uri dummyUri = new Uri(scheme: 'dummy'); |
| |
| /// Non-nullable [Name] dummy value. |
| final Name dummyName = new _PublicName(''); |
| |
| /// Non-nullable [Reference] dummy value. |
| final Reference dummyReference = new Reference(); |
| |
| /// Non-nullable [Component] dummy value. |
| /// |
| /// This can be used for instance as a dummy initial value for the `List.filled` |
| /// constructor. |
| final Component dummyComponent = new Component(); |
| |
| /// Non-nullable [Library] dummy value. |
| /// |
| /// This is used as the removal sentinel in [RemovingTransformer] and can be |
| /// used for instance as a dummy initial value for the `List.filled` |
| /// constructor. |
| final Library dummyLibrary = new Library(dummyUri, fileUri: dummyUri); |
| |
| /// Non-nullable [LibraryDependency] dummy value. |
| /// |
| /// This is used as the removal sentinel in [RemovingTransformer] and can be |
| /// used for instance as a dummy initial value for the `List.filled` |
| /// constructor. |
| final LibraryDependency dummyLibraryDependency = new LibraryDependency.import( |
| dummyLibrary, |
| ); |
| |
| /// Non-nullable [Combinator] dummy value. |
| /// |
| /// This is used as the removal sentinel in [RemovingTransformer] and can be |
| /// used for instance as a dummy initial value for the `List.filled` |
| /// constructor. |
| final Combinator dummyCombinator = new Combinator(false, const []); |
| |
| /// Non-nullable [LibraryPart] dummy value. |
| /// |
| /// This is used as the removal sentinel in [RemovingTransformer] and can be |
| /// used for instance as a dummy initial value for the `List.filled` |
| /// constructor. |
| final LibraryPart dummyLibraryPart = new LibraryPart(const [], ''); |
| |
| /// Non-nullable [Class] dummy value. |
| /// |
| /// This is used as the removal sentinel in [RemovingTransformer] and can be |
| /// used for instance as a dummy initial value for the `List.filled` |
| /// constructor. |
| final Class dummyClass = new Class(name: '', fileUri: dummyUri); |
| |
| /// Non-nullable [Constructor] dummy value. |
| /// |
| /// This is used as the removal sentinel in [RemovingTransformer] and can be |
| /// used for instance as a dummy initial value for the `List.filled` |
| /// constructor. |
| final Constructor dummyConstructor = new Constructor( |
| dummyFunctionNode, |
| name: dummyName, |
| fileUri: dummyUri, |
| ); |
| |
| /// Non-nullable [Extension] dummy value. |
| /// |
| /// This is used as the removal sentinel in [RemovingTransformer] and can be |
| /// used for instance as a dummy initial value for the `List.filled` |
| /// constructor. |
| final Extension dummyExtension = new Extension(name: '', fileUri: dummyUri); |
| |
| /// Non-nullable [ExtensionMemberDescriptor] dummy value. |
| /// |
| /// This is used as the removal sentinel in [RemovingTransformer] and can be |
| /// used for instance as a dummy initial value for the `List.filled` |
| /// constructor. |
| final ExtensionMemberDescriptor dummyExtensionMemberDescriptor = |
| new ExtensionMemberDescriptor( |
| name: dummyName, |
| kind: ExtensionMemberKind.Getter, |
| memberReference: dummyReference, |
| tearOffReference: null, |
| ); |
| |
| /// Non-nullable [ExtensionTypeDeclaration] dummy value. |
| /// |
| /// This is used as the removal sentinel in [RemovingTransformer] and can be |
| /// used for instance as a dummy initial value for the `List.filled` |
| /// constructor. |
| final ExtensionTypeDeclaration dummyExtensionTypeDeclaration = |
| new ExtensionTypeDeclaration(name: '', fileUri: dummyUri); |
| |
| /// Non-nullable [ExtensionTypeMemberDescriptor] dummy value. |
| /// |
| /// This is used as the removal sentinel in [RemovingTransformer] and can be |
| /// used for instance as a dummy initial value for the `List.filled` |
| /// constructor. |
| final ExtensionTypeMemberDescriptor dummyExtensionTypeMemberDescriptor = |
| new ExtensionTypeMemberDescriptor( |
| name: dummyName, |
| kind: ExtensionTypeMemberKind.Getter, |
| memberReference: dummyReference, |
| tearOffReference: null, |
| ); |
| |
| /// Non-nullable [ExtensionType] dummy value. |
| /// |
| /// This is used as the removal sentinel in [RemovingTransformer] and can be |
| /// used for instance as a dummy initial value for the `List.filled` |
| /// constructor. |
| final ExtensionType dummyExtensionType = new ExtensionType( |
| dummyExtensionTypeDeclaration, |
| Nullability.nonNullable, |
| ); |
| |
| /// Non-nullable [Member] dummy value. |
| /// |
| /// This can be used for instance as a dummy initial value for the |
| /// `List.filled` constructor. |
| final Member dummyMember = new Field.mutable(dummyName, fileUri: dummyUri); |
| |
| /// Non-nullable [Procedure] dummy value. |
| /// |
| /// This is used as the removal sentinel in [RemovingTransformer] and can be |
| /// used for instance as a dummy initial value for the `List.filled` |
| /// constructor. |
| final Procedure dummyProcedure = new Procedure( |
| dummyName, |
| ProcedureKind.Method, |
| dummyFunctionNode, |
| fileUri: dummyUri, |
| ); |
| |
| /// Non-nullable [Field] dummy value. |
| /// |
| /// This is used as the removal sentinel in [RemovingTransformer] and can be |
| /// used for instance as a dummy initial value for the `List.filled` |
| /// constructor. |
| final Field dummyField = new Field.mutable(dummyName, fileUri: dummyUri); |
| |
| /// Non-nullable [Typedef] dummy value. |
| /// |
| /// This is used as the removal sentinel in [RemovingTransformer] and can be |
| /// used for instance as a dummy initial value for the `List.filled` |
| /// constructor. |
| final Typedef dummyTypedef = new Typedef('', null, fileUri: dummyUri); |
| |
| /// Non-nullable [Initializer] dummy value. |
| /// |
| /// This is used as the removal sentinel in [RemovingTransformer] and can be |
| /// used for instance as a dummy initial value for the `List.filled` |
| /// constructor. |
| final Initializer dummyInitializer = new InvalidInitializer(''); |
| |
| /// Non-nullable [FunctionNode] dummy value. |
| /// |
| /// This is used as the removal sentinel in [RemovingTransformer] and can be |
| /// used for instance as a dummy initial value for the `List.filled` |
| /// constructor. |
| final FunctionNode dummyFunctionNode = new FunctionNode(null); |
| |
| /// Non-nullable [Statement] dummy value. |
| /// |
| /// This is used as the removal sentinel in [RemovingTransformer] and can be |
| /// used for instance as a dummy initial value for the `List.filled` |
| /// constructor. |
| final Statement dummyStatement = new EmptyStatement(); |
| |
| /// Non-nullable [Expression] dummy value. |
| /// |
| /// This is used as the removal sentinel in [RemovingTransformer] and can be |
| /// used for instance as a dummy initial value for the `List.filled` |
| /// constructor. |
| final Expression dummyExpression = new NullLiteral(); |
| |
| /// Non-nullable [NamedExpression] dummy value. |
| /// |
| /// This is used as the removal sentinel in [RemovingTransformer] and can be |
| /// used for instance as a dummy initial value for the `List.filled` |
| /// constructor. |
| final NamedExpression dummyNamedExpression = new NamedExpression( |
| '', |
| dummyExpression, |
| ); |
| |
| /// Almost const <Pattern>[], but not const in an attempt to avoid |
| /// polymorphism. See |
| /// https://dart-review.googlesource.com/c/sdk/+/185828. |
| final List<Pattern> emptyListOfPattern = List.filled( |
| 0, |
| dummyPattern, |
| growable: false, |
| ); |
| |
| /// Almost const <NamedPattern>[], but not const in an attempt to avoid |
| /// polymorphism. See |
| /// https://dart-review.googlesource.com/c/sdk/+/185828. |
| final List<NamedPattern> emptyListOfNamedPattern = List.filled( |
| 0, |
| dummyNamedPattern, |
| growable: false, |
| ); |
| |
| /// Almost const <MapPatternEntry>[], but not const in an attempt to avoid |
| /// polymorphism. See |
| /// https://dart-review.googlesource.com/c/sdk/+/185828. |
| final List<MapPatternEntry> emptyListOfMapPatternEntry = List.filled( |
| 0, |
| dummyMapPatternEntry, |
| growable: false, |
| ); |
| |
| /// Non-nullable [VariableDeclaration] dummy value. |
| /// |
| /// This is used as the removal sentinel in [RemovingTransformer] and can be |
| /// used for instance as a dummy initial value for the `List.filled` |
| /// constructor. |
| final VariableDeclaration dummyVariableDeclaration = new VariableDeclaration( |
| null, |
| isSynthesized: true, |
| ); |
| |
| /// Non-nullable [CatchVariable] dummy value. |
| /// |
| /// This is used as the removal sentinel in [RemovingTransformer] and can be |
| /// used for instance as a dummy initial value for the `List.filled` |
| /// constructor. |
| final CatchVariable dummyCatchVariable = new CatchVariable( |
| name: "#dummy-catch-variable", |
| type: const DynamicType(), |
| ); |
| |
| /// Non-nullable [PositionalParameter] dummy value. |
| /// |
| /// This is used as the removal sentinel in [RemovingTransformer] and can be |
| /// used for instance as a dummy initial value for the `List.filled` |
| /// constructor. |
| final PositionalParameter dummyPositionalParameter = new PositionalParameter( |
| cosmeticName: null, |
| type: const DynamicType(), |
| defaultValue: null, |
| ); |
| |
| /// Non-nullable [TypeParameter] dummy value. |
| /// |
| /// This is used as the removal sentinel in [RemovingTransformer] and can be |
| /// used for instance as a dummy initial value for the `List.filled` |
| /// constructor. |
| final TypeParameter dummyTypeParameter = new TypeParameter(); |
| |
| /// Non-nullable [StructuralParameter] dummy value. |
| /// |
| /// This is used as the removal sentinel in [RemovingTransformer] and can be |
| /// used for instance as a dummy initial value for the `List.filled` |
| /// constructor. |
| final StructuralParameter dummyStructuralParameter = new StructuralParameter(); |
| |
| /// Non-nullable [MapLiteralEntry] dummy value. |
| /// |
| /// This is used as the removal sentinel in [RemovingTransformer] and can be |
| /// used for instance as a dummy initial value for the `List.filled` |
| /// constructor. |
| final MapLiteralEntry dummyMapLiteralEntry = new MapLiteralEntry( |
| dummyExpression, |
| dummyExpression, |
| ); |
| |
| /// Non-nullable [Arguments] dummy value. |
| /// |
| /// This is used as the removal sentinel in [RemovingTransformer] and can be |
| /// used for instance as a dummy initial value for the `List.filled` |
| /// constructor. |
| final Arguments dummyArguments = new Arguments(const []); |
| |
| /// Non-nullable [AssertStatement] dummy value. |
| /// |
| /// This is used as the removal sentinel in [RemovingTransformer] and can be |
| /// used for instance as a dummy initial value for the `List.filled` |
| /// constructor. |
| final AssertStatement dummyAssertStatement = new AssertStatement( |
| dummyExpression, |
| conditionStartOffset: TreeNode.noOffset, |
| conditionEndOffset: TreeNode.noOffset, |
| ); |
| |
| /// Non-nullable [SwitchCase] dummy value. |
| /// |
| /// This is used as the removal sentinel in [RemovingTransformer] and can be |
| /// used for instance as a dummy initial value for the `List.filled` |
| /// constructor. |
| final SwitchCase dummySwitchCase = new SwitchCase.defaultCase(dummyStatement); |
| |
| /// Non-nullable [Catch] dummy value. |
| /// |
| /// This is used as the removal sentinel in [RemovingTransformer] and can be |
| /// used for instance as a dummy initial value for the `List.filled` |
| /// constructor. |
| final Catch dummyCatch = new Catch(null, dummyStatement); |
| |
| /// Non-nullable [Constant] dummy value. |
| /// |
| /// This is used as the removal sentinel in [RemovingTransformer] and can be |
| /// used for instance as a dummy initial value for the `List.filled` |
| /// constructor. |
| final Constant dummyConstant = new NullConstant(); |
| |
| /// Non-nullable [LabeledStatement] dummy value. |
| /// |
| /// This is used as the removal sentinel in [RemovingTransformer] and can be |
| /// used for instance as a dummy initial value for the `List.filled` |
| /// constructor. |
| final LabeledStatement dummyLabeledStatement = new LabeledStatement(null); |
| |
| /// Of the dummy nodes, some are tree nodes. `TreeNode`s has a parent pointer |
| /// and that can be set when the dummy is used. This means that we can leak |
| /// through them. This list will (at least as a stopgap) allow us to null-out |
| /// the parent pointer when/if needed. |
| /// |
| /// This should manually be kept up to date. |
| final List<TreeNode> dummyTreeNodes = [ |
| dummyComponent, |
| dummyLibrary, |
| dummyLibraryDependency, |
| dummyCombinator, |
| dummyLibraryPart, |
| dummyClass, |
| dummyConstructor, |
| dummyExtension, |
| dummyMember, |
| dummyProcedure, |
| dummyField, |
| dummyTypedef, |
| dummyInitializer, |
| dummyFunctionNode, |
| dummyStatement, |
| dummyExpression, |
| dummyNamedExpression, |
| dummyVariableDeclaration, |
| dummyTypeParameter, |
| dummyMapLiteralEntry, |
| dummyArguments, |
| dummyAssertStatement, |
| dummySwitchCase, |
| dummyCatch, |
| dummyLabeledStatement, |
| ]; |
| |
| void clearDummyTreeNodesParentPointer() { |
| for (TreeNode treeNode in dummyTreeNodes) { |
| treeNode.parent = null; |
| } |
| } |