| // Copyright (c) 2018, 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. |
| |
| import 'package:analyzer/dart/ast/ast.dart'; |
| import 'package:analyzer/src/dart/ast/utilities.dart'; |
| import 'package:test/test.dart'; |
| |
| class FindNode { |
| final String content; |
| final CompilationUnit unit; |
| |
| FindNode(this.content, this.unit); |
| |
| LibraryDirective get libraryDirective { |
| return unit.directives.singleWhere((d) => d is LibraryDirective); |
| } |
| |
| Annotation annotation(String search) { |
| return _node(search, (n) => n is Annotation); |
| } |
| |
| AssignmentExpression assignment(String search) { |
| return _node(search, (n) => n is AssignmentExpression); |
| } |
| |
| CascadeExpression cascade(String search) { |
| return _node(search, (n) => n is CascadeExpression); |
| } |
| |
| CommentReference commentReference(String search) { |
| return _node(search, (n) => n is CommentReference); |
| } |
| |
| ConstructorDeclaration constructor(String search) { |
| return _node(search, (n) => n is ConstructorDeclaration); |
| } |
| |
| ExportDirective export(String search) { |
| return _node(search, (n) => n is ExportDirective); |
| } |
| |
| FieldFormalParameter fieldFormalParameter(String search) { |
| return _node(search, (n) => n is FieldFormalParameter); |
| } |
| |
| FunctionExpression functionExpression(String search) { |
| return _node(search, (n) => n is FunctionExpression); |
| } |
| |
| GenericFunctionType genericFunctionType(String search) { |
| return _node(search, (n) => n is GenericFunctionType); |
| } |
| |
| ImportDirective import(String search) { |
| return _node(search, (n) => n is ImportDirective); |
| } |
| |
| InstanceCreationExpression instanceCreation(String search) { |
| return _node(search, (n) => n is InstanceCreationExpression); |
| } |
| |
| ListLiteral listLiteral(String search) { |
| return _node(search, (n) => n is ListLiteral); |
| } |
| |
| MapLiteral mapLiteral(String search) { |
| return _node(search, (n) => n is MapLiteral); |
| } |
| |
| MethodDeclaration methodDeclaration(String search) { |
| return _node(search, (n) => n is MethodDeclaration); |
| } |
| |
| MethodInvocation methodInvocation(String search) { |
| return _node(search, (n) => n is MethodInvocation); |
| } |
| |
| MixinDeclaration mixin(String search) { |
| return _node(search, (n) => n is MixinDeclaration); |
| } |
| |
| ParenthesizedExpression parenthesized(String search) { |
| return _node(search, (n) => n is ParenthesizedExpression); |
| } |
| |
| PartDirective part(String search) { |
| return _node(search, (n) => n is PartDirective); |
| } |
| |
| PartOfDirective partOf(String search) { |
| return _node(search, (n) => n is PartOfDirective); |
| } |
| |
| PostfixExpression postfix(String search) { |
| return _node(search, (n) => n is PostfixExpression); |
| } |
| |
| PrefixExpression prefix(String search) { |
| return _node(search, (n) => n is PrefixExpression); |
| } |
| |
| PrefixedIdentifier prefixed(String search) { |
| return _node(search, (n) => n is PrefixedIdentifier); |
| } |
| |
| PropertyAccess propertyAccess(String search) { |
| return _node(search, (n) => n is PropertyAccess); |
| } |
| |
| RethrowExpression rethrow_(String search) { |
| return _node(search, (n) => n is RethrowExpression); |
| } |
| |
| SimpleIdentifier simple(String search) { |
| return _node(search, (_) => true); |
| } |
| |
| SimpleFormalParameter simpleParameter(String search) { |
| return _node(search, (n) => n is SimpleFormalParameter); |
| } |
| |
| StringLiteral stringLiteral(String search) { |
| return _node(search, (n) => n is StringLiteral); |
| } |
| |
| SuperExpression super_(String search) { |
| return _node(search, (n) => n is SuperExpression); |
| } |
| |
| ThisExpression this_(String search) { |
| return _node(search, (n) => n is ThisExpression); |
| } |
| |
| ThrowExpression throw_(String search) { |
| return _node(search, (n) => n is ThrowExpression); |
| } |
| |
| TypeName typeName(String search) { |
| return _node(search, (n) => n is TypeName); |
| } |
| |
| TypeParameter typeParameter(String search) { |
| return _node(search, (n) => n is TypeParameter); |
| } |
| |
| VariableDeclaration variableDeclaration(String search) { |
| return _node(search, (n) => n is VariableDeclaration); |
| } |
| |
| AstNode _node(String search, bool Function(AstNode) predicate) { |
| var index = content.indexOf(search); |
| if (content.indexOf(search, index + 1) != -1) { |
| fail('The pattern |$search| is not unique in:\n$content'); |
| } |
| expect(index, greaterThanOrEqualTo(0)); |
| |
| var node = new NodeLocator2(index).searchWithin(unit); |
| expect(node, isNotNull); |
| |
| var result = node.getAncestor(predicate); |
| expect(result, isNotNull); |
| return result; |
| } |
| } |