From e2d0f5a50b0e3e46498ae61cc4de18989c1402e3 Mon Sep 17 00:00:00 2001 From: Paul Berry Date: Mon, 29 Apr 2019 16:42:19 +0000 Subject: [PATCH] Add `featureSet` parameter to Parser constructor. And deprecate old parser configuration setters. Change-Id: Ib1507b8d2b20be7c883061e2a92ec9205d6a378f Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/100664 Commit-Queue: Paul Berry Reviewed-by: Dan Rubel Reviewed-by: Brian Wilkerson --- .../integration/linter/lint_names_test.dart | 6 +- pkg/analyzer/CHANGELOG.md | 4 + pkg/analyzer/lib/analyzer.dart | 8 +- .../lib/src/dart/analysis/file_state.dart | 4 +- pkg/analyzer/lib/src/dart/sdk/patch.dart | 3 +- pkg/analyzer/lib/src/dart/sdk/sdk.dart | 3 +- pkg/analyzer/lib/src/fasta/ast_builder.dart | 2 +- pkg/analyzer/lib/src/generated/parser.dart | 73 ++++++++++++------- pkg/analyzer/lib/src/generated/sdk_io.dart | 3 +- pkg/analyzer/lib/src/lint/util.dart | 6 +- .../src/services/available_declarations.dart | 4 +- .../lib/src/summary/summary_file_builder.dart | 2 +- pkg/analyzer/pubspec.yaml | 2 +- pkg/analyzer/test/dart/ast/ast_test.dart | 5 +- .../test/generated/parser_fasta_test.dart | 32 ++++---- pkg/analyzer/test/generated/parser_test.dart | 20 +++-- .../test/generated/utilities_test.dart | 6 +- .../test/src/dart/ast/parse_base.dart | 4 +- .../test/src/summary/expr_builder_test.dart | 4 +- .../test/src/summary/summary_common.dart | 8 +- .../test/src/summary/test_strategies.dart | 6 +- pkg/analyzer_cli/tool/perf.dart | 8 +- .../local_declaration_visitor_test.dart | 2 +- .../completion/completion_target_test.dart | 2 +- pkg/front_end/tool/perf.dart | 9 ++- 25 files changed, 132 insertions(+), 94 deletions(-) diff --git a/pkg/analysis_server/test/integration/linter/lint_names_test.dart b/pkg/analysis_server/test/integration/linter/lint_names_test.dart index 85e2c65d91372..929a9c012afca 100644 --- a/pkg/analysis_server/test/integration/linter/lint_names_test.dart +++ b/pkg/analysis_server/test/integration/linter/lint_names_test.dart @@ -67,12 +67,14 @@ class CompilationUnitParser { var reader = new CharSequenceReader(contents); var stringSource = new StringSource(contents, name); var errorListener = new _ErrorListener(); + var featureSet = FeatureSet.forTesting(sdkVersion: '2.2.2'); var scanner = new Scanner(stringSource, reader, errorListener) - ..configureFeatures(FeatureSet.forTesting(sdkVersion: '2.2.2')); + ..configureFeatures(featureSet); var startToken = scanner.tokenize(); errorListener.throwIfErrors(); - var parser = new Parser(stringSource, errorListener); + var parser = + new Parser(stringSource, errorListener, featureSet: featureSet); var cu = parser.parseCompilationUnit(startToken); errorListener.throwIfErrors(); diff --git a/pkg/analyzer/CHANGELOG.md b/pkg/analyzer/CHANGELOG.md index 9107c6e0aade9..5075fcb4f8f05 100644 --- a/pkg/analyzer/CHANGELOG.md +++ b/pkg/analyzer/CHANGELOG.md @@ -3,6 +3,10 @@ method will be changed so that all its parameters are named parameters. Clients wishing to prepare for this should switch to using `AstFactory.compilationUnit2`. +* Deprecated Parser setters `enableControlFlowCollections`, `enableNonNullable`, + `enableSpreadCollections`, and `enableTripleShift`, as well as the + recently-introduced method `configureFeatures`. Parsers should now be + configured by passing a FeatureSet object to the Parser constructor. ## 0.36.2 * Bug fixes: #36724. diff --git a/pkg/analyzer/lib/analyzer.dart b/pkg/analyzer/lib/analyzer.dart index f2c01ca68a962..0e8a271841274 100644 --- a/pkg/analyzer/lib/analyzer.dart +++ b/pkg/analyzer/lib/analyzer.dart @@ -102,8 +102,7 @@ CompilationUnit parseDirectives(String contents, var scanner = new Scanner(source, reader, errorCollector) ..configureFeatures(featureSet); var token = scanner.tokenize(); - var parser = new Parser(source, errorCollector) - ..configureFeatures(featureSet); + var parser = new Parser(source, errorCollector, featureSet: featureSet); var unit = parser.parseDirectives(token); unit.lineInfo = new LineInfo(scanner.lineStarts); @@ -125,9 +124,8 @@ CompilationUnit _parseSource( var scanner = new Scanner(source, reader, errorCollector) ..configureFeatures(featureSet); var token = scanner.tokenize(); - var parser = new Parser(source, errorCollector) - ..parseFunctionBodies = parseFunctionBodies - ..configureFeatures(featureSet); + var parser = new Parser(source, errorCollector, featureSet: featureSet) + ..parseFunctionBodies = parseFunctionBodies; var unit = parser.parseCompilationUnit(token) ..lineInfo = new LineInfo(scanner.lineStarts); diff --git a/pkg/analyzer/lib/src/dart/analysis/file_state.dart b/pkg/analyzer/lib/src/dart/analysis/file_state.dart index 8395eb7222879..c3fb1c6dcd84e 100644 --- a/pkg/analyzer/lib/src/dart/analysis/file_state.dart +++ b/pkg/analyzer/lib/src/dart/analysis/file_state.dart @@ -718,8 +718,8 @@ class FileState { LineInfo lineInfo = new LineInfo(scanner.lineStarts); bool useFasta = analysisOptions.useFastaParser; - Parser parser = new Parser(source, errorListener, useFasta: useFasta) - ..configureFeatures(featureSet); + Parser parser = new Parser(source, errorListener, + featureSet: featureSet, useFasta: useFasta); parser.enableOptionalNewAndConst = true; CompilationUnit unit = parser.parseCompilationUnit(token); unit.lineInfo = lineInfo; diff --git a/pkg/analyzer/lib/src/dart/sdk/patch.dart b/pkg/analyzer/lib/src/dart/sdk/patch.dart index 350da316f065a..72c191fa1da35 100644 --- a/pkg/analyzer/lib/src/dart/sdk/patch.dart +++ b/pkg/analyzer/lib/src/dart/sdk/patch.dart @@ -417,8 +417,7 @@ class SdkPatcher { Token token = scanner.tokenize(); LineInfo lineInfo = new LineInfo(scanner.lineStarts); - Parser parser = new Parser(source, errorListener) - ..configureFeatures(featureSet); + Parser parser = new Parser(source, errorListener, featureSet: featureSet); CompilationUnit unit = parser.parseCompilationUnit(token); unit.lineInfo = lineInfo; return unit; diff --git a/pkg/analyzer/lib/src/dart/sdk/sdk.dart b/pkg/analyzer/lib/src/dart/sdk/sdk.dart index 8128c3405f03d..22ab2f20d6a19 100644 --- a/pkg/analyzer/lib/src/dart/sdk/sdk.dart +++ b/pkg/analyzer/lib/src/dart/sdk/sdk.dart @@ -904,8 +904,7 @@ class SdkLibrariesReader { Scanner scanner = new Scanner( source, new CharSequenceReader(libraryFileContents), errorListener) ..configureFeatures(featureSet); - Parser parser = new Parser(source, errorListener) - ..configureFeatures(featureSet); + Parser parser = new Parser(source, errorListener, featureSet: featureSet); CompilationUnit unit = parser.parseCompilationUnit(scanner.tokenize()); SdkLibrariesReader_LibraryBuilder libraryBuilder = new SdkLibrariesReader_LibraryBuilder(_useDart2jsPaths); diff --git a/pkg/analyzer/lib/src/fasta/ast_builder.dart b/pkg/analyzer/lib/src/fasta/ast_builder.dart index 6622274e2e865..5e22b471c5c91 100644 --- a/pkg/analyzer/lib/src/fasta/ast_builder.dart +++ b/pkg/analyzer/lib/src/fasta/ast_builder.dart @@ -291,7 +291,7 @@ class AstBuilder extends StackListener { /// TODO(paulberry): stop exposing `enableNonNullable`, /// `enableSpreadCollections`, `enableControlFlowCollections`, and /// `enableTripleShift` so that callers are forced to use this API. Note that - /// this would be a breaking change. + /// this will not be a breaking change, because this code is in `lib/src`. void configureFeatures(FeatureSet featureSet) { enableNonNullable = featureSet.isEnabled(Feature.non_nullable); enableSpreadCollections = featureSet.isEnabled(Feature.spread_collections); diff --git a/pkg/analyzer/lib/src/generated/parser.dart b/pkg/analyzer/lib/src/generated/parser.dart index b0072a94af3f2..21a62ae2518fe 100644 --- a/pkg/analyzer/lib/src/generated/parser.dart +++ b/pkg/analyzer/lib/src/generated/parser.dart @@ -199,16 +199,33 @@ class Parser { /// Initialize a newly created parser to parse tokens in the given [_source] /// and to report any errors that are found to the given [_errorListener]. + /// + /// In a future major version release of the analyzer, the [featureSet] + /// argument will be required. factory Parser(Source source, AnalysisErrorListener errorListener, - {bool useFasta}) { + {bool useFasta, FeatureSet featureSet}) { if (useFasta ?? Parser.useFasta) { - return new _Parser2(source, errorListener, allowNativeClause: true); + var parser = new _Parser2(source, errorListener, allowNativeClause: true); + if (featureSet != null) { + parser.configureFeatures(featureSet); + } + return parser; } else { - return new Parser.withoutFasta(source, errorListener); + return new Parser.withoutFasta(source, errorListener, + featureSet: featureSet); } } - Parser.withoutFasta(this._source, this._errorListener); + /// Creates a parser using the old (legacy) analyzer parsing logic. + /// + /// In a future major version release of the analyzer, the [featureSet] + /// argument will be required. + Parser.withoutFasta(this._source, this._errorListener, + {FeatureSet featureSet}) { + if (featureSet != null) { + _configureFeatures(featureSet); + } + } /// Return the current token. Token get currentToken => _currentToken; @@ -229,6 +246,7 @@ class Parser { void set enableAssertInitializer(bool enable) {} /// Enables or disables parsing of control flow collections. + @Deprecated('Pass a FeatureSet to the constructor instead') void set enableControlFlowCollections(bool value) { if (value) { throw new UnimplementedError('control_flow_collections experiment' @@ -237,6 +255,7 @@ class Parser { } /// Enables or disables non-nullable by default. + @Deprecated('Pass a FeatureSet to the constructor instead') void set enableNonNullable(bool value) { if (value) { throw new UnimplementedError( @@ -261,6 +280,7 @@ class Parser { } /// Enables or disables parsing of spread collections. + @Deprecated('Pass a FeatureSet to the constructor instead') void set enableSpreadCollections(bool value) { if (value) { throw new UnimplementedError( @@ -269,6 +289,7 @@ class Parser { } /// Enables or disables parsing of the triple shift operators. + @Deprecated('Pass a FeatureSet to the constructor instead') void set enableTripleShift(bool value) { if (value) { throw new UnimplementedError('triple_shift experiment' @@ -343,29 +364,9 @@ class Parser { } /// Configures the parser appropriately for the given [featureSet]. - /// - /// TODO(paulberry): stop exposing `enableNonNullable`, - /// `enableSpreadCollections`, `enableControlFlowCollections`, and - /// `enableTripleShift` so that callers are forced to use this API. Note that - /// this would be a breaking change. + @Deprecated('Pass a FeatureSet to the constructor instead') void configureFeatures(FeatureSet featureSet) { - if (featureSet.isEnabled(Feature.control_flow_collections)) { - throw new UnimplementedError('control_flow_collections experiment' - ' not supported by analyzer parser'); - } - if (featureSet.isEnabled(Feature.non_nullable)) { - throw new UnimplementedError( - 'non-nullable experiment not supported by analyzer parser'); - } - if (featureSet.isEnabled(Feature.spread_collections)) { - throw new UnimplementedError( - 'spread_collections experiment not supported by analyzer parser'); - } - if (featureSet.isEnabled(Feature.triple_shift)) { - throw new UnimplementedError('triple_shift experiment' - ' not supported by analyzer parser'); - } - _featureSet = featureSet; + _configureFeatures(featureSet); } /// Return a synthetic identifier. @@ -5595,6 +5596,26 @@ class Parser { return false; } + void _configureFeatures(FeatureSet featureSet) { + if (featureSet.isEnabled(Feature.control_flow_collections)) { + throw new UnimplementedError('control_flow_collections experiment' + ' not supported by analyzer parser'); + } + if (featureSet.isEnabled(Feature.non_nullable)) { + throw new UnimplementedError( + 'non-nullable experiment not supported by analyzer parser'); + } + if (featureSet.isEnabled(Feature.spread_collections)) { + throw new UnimplementedError( + 'spread_collections experiment not supported by analyzer parser'); + } + if (featureSet.isEnabled(Feature.triple_shift)) { + throw new UnimplementedError('triple_shift experiment' + ' not supported by analyzer parser'); + } + _featureSet = featureSet; + } + /// Convert the given [method] declaration into the nearest valid top-level /// function declaration (that is, the function declaration that most closely /// captures the components of the given method declaration). diff --git a/pkg/analyzer/lib/src/generated/sdk_io.dart b/pkg/analyzer/lib/src/generated/sdk_io.dart index c458ca5561854..86ef733b3f682 100644 --- a/pkg/analyzer/lib/src/generated/sdk_io.dart +++ b/pkg/analyzer/lib/src/generated/sdk_io.dart @@ -284,8 +284,7 @@ class SdkLibrariesReader { Scanner scanner = new Scanner( source, new CharSequenceReader(libraryFileContents), errorListener) ..configureFeatures(featureSet); - Parser parser = new Parser(source, errorListener) - ..configureFeatures(featureSet); + Parser parser = new Parser(source, errorListener, featureSet: featureSet); CompilationUnit unit = parser.parseCompilationUnit(scanner.tokenize()); SdkLibrariesReader_LibraryBuilder libraryBuilder = new SdkLibrariesReader_LibraryBuilder(_useDart2jsPaths); diff --git a/pkg/analyzer/lib/src/lint/util.dart b/pkg/analyzer/lib/src/lint/util.dart index 9b9504e75c1b9..57e33be07ae92 100644 --- a/pkg/analyzer/lib/src/lint/util.dart +++ b/pkg/analyzer/lib/src/lint/util.dart @@ -90,6 +90,7 @@ bool isUpperCase(int c) => c >= 0x40 && c <= 0x5A; class Spelunker { final String path; final IOSink sink; + Spelunker(this.path, {IOSink sink}) : this.sink = sink ?? stdout; void spelunk() { @@ -107,8 +108,8 @@ class Spelunker { errorListener.throwIfErrors(); - var parser = new Parser(stringSource, errorListener) - ..configureFeatures(featureSet); + var parser = + new Parser(stringSource, errorListener, featureSet: featureSet); var node = parser.parseCompilationUnit(startToken); errorListener.throwIfErrors(); @@ -137,6 +138,7 @@ class _SourceVisitor extends GeneralizingAstVisitor { int indent = 0; final IOSink sink; + _SourceVisitor(this.sink); String asString(AstNode node) => diff --git a/pkg/analyzer/lib/src/services/available_declarations.dart b/pkg/analyzer/lib/src/services/available_declarations.dart index 8b6ffe3bff810..1f18466ad287f 100644 --- a/pkg/analyzer/lib/src/services/available_declarations.dart +++ b/pkg/analyzer/lib/src/services/available_declarations.dart @@ -1622,8 +1622,8 @@ class _File { ..configureFeatures(featureSet); var token = scanner.tokenize(); - var parser = new Parser(source, errorListener, useFasta: true) - ..configureFeatures(featureSet); + var parser = new Parser(source, errorListener, + featureSet: featureSet, useFasta: true); var unit = parser.parseCompilationUnit(token); unit.lineInfo = LineInfo(scanner.lineStarts); diff --git a/pkg/analyzer/lib/src/summary/summary_file_builder.dart b/pkg/analyzer/lib/src/summary/summary_file_builder.dart index 9d7605692107f..c558609a217d1 100644 --- a/pkg/analyzer/lib/src/summary/summary_file_builder.dart +++ b/pkg/analyzer/lib/src/summary/summary_file_builder.dart @@ -137,9 +137,9 @@ class _Builder { Token token = scanner.tokenize(); LineInfo lineInfo = new LineInfo(scanner.lineStarts); Parser parser = new Parser(source, errorListener, + featureSet: featureSet, useFasta: context.analysisOptions.useFastaParser); parser.enableOptionalNewAndConst = true; - parser.configureFeatures(featureSet); CompilationUnit unit = parser.parseCompilationUnit(token); unit.lineInfo = lineInfo; return unit; diff --git a/pkg/analyzer/pubspec.yaml b/pkg/analyzer/pubspec.yaml index d7f5640be19a6..8b6c714da3883 100644 --- a/pkg/analyzer/pubspec.yaml +++ b/pkg/analyzer/pubspec.yaml @@ -1,5 +1,5 @@ name: analyzer -version: 0.36.2 +version: 0.36.3-dev author: Dart Team description: Static analyzer for Dart. homepage: https://github.com/dart-lang/sdk/tree/master/pkg/analyzer diff --git a/pkg/analyzer/test/dart/ast/ast_test.dart b/pkg/analyzer/test/dart/ast/ast_test.dart index 25e0d81def05f..585da6a940b31 100644 --- a/pkg/analyzer/test/dart/ast/ast_test.dart +++ b/pkg/analyzer/test/dart/ast/ast_test.dart @@ -629,8 +629,9 @@ E f() => g; var scanner = new Scanner.fasta(source, listener) ..configureFeatures(featureSet); Token tokens = scanner.tokenize(); - _unit = new Parser(source, listener, useFasta: true) - .parseCompilationUnit(tokens); + _unit = + new Parser(source, listener, featureSet: featureSet, useFasta: true) + .parseCompilationUnit(tokens); } return _unit; } diff --git a/pkg/analyzer/test/generated/parser_fasta_test.dart b/pkg/analyzer/test/generated/parser_fasta_test.dart index af7e1199df428..b4674f085bdf3 100644 --- a/pkg/analyzer/test/generated/parser_fasta_test.dart +++ b/pkg/analyzer/test/generated/parser_fasta_test.dart @@ -1520,10 +1520,9 @@ class FastaParserTestCase scanner.enableNonNullable = featureSet.isEnabled(Feature.non_nullable); } _fastaTokens = scanner.tokenize(); - _parserProxy = new ParserProxy(_fastaTokens, + _parserProxy = new ParserProxy(_fastaTokens, featureSet, allowNativeClause: allowNativeClause, - expectedEndOffset: expectedEndOffset, - featureSet: featureSet); + expectedEndOffset: expectedEndOffset); } @override @@ -1667,13 +1666,11 @@ class FastaParserTestCase // Run parser ErrorReporter errorReporter = new ErrorReporter(listener, source); fasta.Parser parser = new fasta.Parser(null); - AstBuilder astBuilder = new AstBuilder(errorReporter, source.uri, true); + AstBuilder astBuilder = new AstBuilder(errorReporter, source.uri, true) + ..configureFeatures(featureSet); parser.listener = astBuilder; astBuilder.parser = parser; astBuilder.allowNativeClause = allowNativeClause; - if (featureSet != null) { - astBuilder.configureFeatures(featureSet); - } parser.parseUnit(_fastaTokens); CompilationUnitImpl unit = astBuilder.pop(); unit.localDeclarations = astBuilder.localDeclarations; @@ -2488,26 +2485,23 @@ class ParserProxy extends analyzer.ParserAdapter { * Creates a [ParserProxy] which is prepared to begin parsing at the given * Fasta token. */ - factory ParserProxy(analyzer.Token firstToken, - {bool allowNativeClause: false, - int expectedEndOffset, - FeatureSet featureSet}) { + factory ParserProxy(analyzer.Token firstToken, FeatureSet featureSet, + {bool allowNativeClause: false, int expectedEndOffset}) { TestSource source = new TestSource(); var errorListener = new GatheringErrorListener(checkRanges: true); var errorReporter = new ErrorReporter(errorListener, source); - return new ParserProxy._(firstToken, errorReporter, null, errorListener, + return new ParserProxy._( + firstToken, errorReporter, null, errorListener, featureSet, allowNativeClause: allowNativeClause, - expectedEndOffset: expectedEndOffset, - featureSet: featureSet); + expectedEndOffset: expectedEndOffset); } ParserProxy._(analyzer.Token firstToken, ErrorReporter errorReporter, - Uri fileUri, this._errorListener, - {bool allowNativeClause: false, - this.expectedEndOffset, - FeatureSet featureSet}) + Uri fileUri, this._errorListener, FeatureSet featureSet, + {bool allowNativeClause: false, this.expectedEndOffset}) : super(firstToken, errorReporter, fileUri, - allowNativeClause: allowNativeClause, featureSet: featureSet) { + allowNativeClause: allowNativeClause) { + configureFeatures(featureSet); _eventListener = new ForwardingTestListener(astBuilder); fastaParser.listener = _eventListener; } diff --git a/pkg/analyzer/test/generated/parser_test.dart b/pkg/analyzer/test/generated/parser_test.dart index 051d214931f4b..3e63cdafbb29b 100644 --- a/pkg/analyzer/test/generated/parser_test.dart +++ b/pkg/analyzer/test/generated/parser_test.dart @@ -2,6 +2,7 @@ // 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/analysis/features.dart'; import 'package:analyzer/dart/ast/ast.dart'; import 'package:analyzer/dart/ast/standard_ast_factory.dart'; import 'package:analyzer/dart/ast/token.dart'; @@ -9429,7 +9430,7 @@ class ParserTestCase extends EngineTestCase // // Create and initialize the parser. // - parser = new Parser(source, listener); + parser = new Parser(source, listener, featureSet: FeatureSet.forTesting()); parser.allowNativeClause = allowNativeClause; parser.parseFunctionBodies = parseFunctionBodies; parser.enableOptionalNewAndConst = enableOptionalNewAndConst; @@ -9577,7 +9578,8 @@ class ParserTestCase extends EngineTestCase } listener.setLineInfo(source, result.lineStarts); - Parser parser = new Parser(source, listener); + Parser parser = + new Parser(source, listener, featureSet: FeatureSet.forTesting()); parser.enableOptionalNewAndConst = enableOptionalNewAndConst; CompilationUnit unit = parser.parseCompilationUnit(token); expect(unit, isNotNull); @@ -9621,7 +9623,8 @@ class ParserTestCase extends EngineTestCase } } - Parser parser = new Parser(source, listener); + Parser parser = + new Parser(source, listener, featureSet: FeatureSet.forTesting()); parser.enableOptionalNewAndConst = enableOptionalNewAndConst; CompilationUnit unit = parser.parseCompilationUnit(token); unit.lineInfo = new LineInfo(result.lineStarts); @@ -9978,7 +9981,8 @@ class ParserTestCase extends EngineTestCase } listener.setLineInfo(source, result.lineStarts); - Parser parser = new Parser(source, listener); + Parser parser = + new Parser(source, listener, featureSet: FeatureSet.forTesting()); parser.enableOptionalNewAndConst = enableOptionalNewAndConst; Statement statement = parser.parseStatement(token); expect(statement, isNotNull); @@ -10023,7 +10027,8 @@ class ParserTestCase extends EngineTestCase } listener.setLineInfo(source, result.lineStarts); - Parser parser = new Parser(source, listener); + Parser parser = + new Parser(source, listener, featureSet: FeatureSet.forTesting()); parser.enableOptionalNewAndConst = enableOptionalNewAndConst; List statements = parser.parseStatements(token); expect(statements, hasLength(expectedCount)); @@ -12420,7 +12425,10 @@ class SimpleParserTest extends ParserTestCase with SimpleParserTestMixin { } void test_Parser() { - expect(new Parser(NonExistingSource.unknown, null), isNotNull); + expect( + new Parser(NonExistingSource.unknown, null, + featureSet: FeatureSet.forTesting()), + isNotNull); } void test_skipPrefixedIdentifier_invalid() { diff --git a/pkg/analyzer/test/generated/utilities_test.dart b/pkg/analyzer/test/generated/utilities_test.dart index f8cdbfe7346eb..858c95eb9bc5f 100644 --- a/pkg/analyzer/test/generated/utilities_test.dart +++ b/pkg/analyzer/test/generated/utilities_test.dart @@ -1186,10 +1186,12 @@ library l;'''); CompilationUnit _parseUnit(String code) { GatheringErrorListener listener = new GatheringErrorListener(); CharSequenceReader reader = new CharSequenceReader(code); + var featureSet = FeatureSet.forTesting(sdkVersion: '2.2.2'); Scanner scanner = new Scanner(null, reader, listener) - ..configureFeatures(FeatureSet.forTesting(sdkVersion: '2.2.2')); + ..configureFeatures(featureSet); Token token = scanner.tokenize(); - Parser parser = new Parser(NonExistingSource.unknown, listener); + Parser parser = + new Parser(NonExistingSource.unknown, listener, featureSet: featureSet); CompilationUnit unit = parser.parseCompilationUnit(token); expect(unit, isNotNull); listener.assertNoErrors(); diff --git a/pkg/analyzer/test/src/dart/ast/parse_base.dart b/pkg/analyzer/test/src/dart/ast/parse_base.dart index f005ae46dcaa5..2dd3de6682bf4 100644 --- a/pkg/analyzer/test/src/dart/ast/parse_base.dart +++ b/pkg/analyzer/test/src/dart/ast/parse_base.dart @@ -33,9 +33,9 @@ class ParseBase with ResourceProviderMixin { var token = scanner.tokenize(); var useFasta = analysisOptions.useFastaParser; - var parser = Parser(source, errorListener, useFasta: useFasta); + var parser = Parser(source, errorListener, + featureSet: featureSet, useFasta: useFasta); parser.enableOptionalNewAndConst = true; - parser.configureFeatures(featureSet); var unit = parser.parseCompilationUnit(token); unit.lineInfo = LineInfo(scanner.lineStarts); diff --git a/pkg/analyzer/test/src/summary/expr_builder_test.dart b/pkg/analyzer/test/src/summary/expr_builder_test.dart index 3085c989012cf..a5b62d92363ae 100644 --- a/pkg/analyzer/test/src/summary/expr_builder_test.dart +++ b/pkg/analyzer/test/src/summary/expr_builder_test.dart @@ -896,8 +896,8 @@ class TokensToStringTest { var scanner = new Scanner(stringSource, reader, errorListener) ..configureFeatures(featureSet); var startToken = scanner.tokenize(); - var parser = new Parser(stringSource, errorListener) - ..configureFeatures(featureSet); + var parser = + new Parser(stringSource, errorListener, featureSet: featureSet); var compilationUnit = parser.parseCompilationUnit(startToken); var f = compilationUnit.declarations[0] as FunctionDeclaration; var body = f.functionExpression.body as ExpressionFunctionBody; diff --git a/pkg/analyzer/test/src/summary/summary_common.dart b/pkg/analyzer/test/src/summary/summary_common.dart index f52bea5d84e96..18b900add0d96 100644 --- a/pkg/analyzer/test/src/summary/summary_common.dart +++ b/pkg/analyzer/test/src/summary/summary_common.dart @@ -66,8 +66,8 @@ UnlinkedPublicNamespace computePublicNamespaceFromText( Scanner scanner = new Scanner(source, reader, AnalysisErrorListener.NULL_LISTENER) ..configureFeatures(featureSet); - Parser parser = new Parser(source, AnalysisErrorListener.NULL_LISTENER) - ..configureFeatures(featureSet); + Parser parser = new Parser(source, AnalysisErrorListener.NULL_LISTENER, + featureSet: featureSet); CompilationUnit unit = parser.parseCompilationUnit(scanner.tokenize()); UnlinkedPublicNamespace namespace = new UnlinkedPublicNamespace.fromBuffer( public_namespace.computePublicNamespace(unit).toBuffer()); @@ -11948,8 +11948,8 @@ final v = $expr; var scanner = new Scanner(stringSource, reader, errorListener) ..configureFeatures(experimentStatus); var startToken = scanner.tokenize(); - var parser = new Parser(stringSource, errorListener) - ..configureFeatures(experimentStatus); + var parser = + new Parser(stringSource, errorListener, featureSet: experimentStatus); var compilationUnit = parser.parseCompilationUnit(startToken); var f = compilationUnit.declarations[0] as FunctionDeclaration; var body = f.functionExpression.body as ExpressionFunctionBody; diff --git a/pkg/analyzer/test/src/summary/test_strategies.dart b/pkg/analyzer/test/src/summary/test_strategies.dart index a86ef98f0dfcc..eff84c40dcd5d 100644 --- a/pkg/analyzer/test/src/summary/test_strategies.dart +++ b/pkg/analyzer/test/src/summary/test_strategies.dart @@ -44,9 +44,9 @@ CompilationUnit parseText( new Scanner(null, reader, AnalysisErrorListener.NULL_LISTENER) ..configureFeatures(experimentStatus); Token token = scanner.tokenize(); - Parser parser = - new Parser(NonExistingSource.unknown, AnalysisErrorListener.NULL_LISTENER) - ..configureFeatures(experimentStatus); + Parser parser = new Parser( + NonExistingSource.unknown, AnalysisErrorListener.NULL_LISTENER, + featureSet: experimentStatus); CompilationUnit unit = parser.parseCompilationUnit(token); unit.lineInfo = new LineInfo(scanner.lineStarts); return unit; diff --git a/pkg/analyzer_cli/tool/perf.dart b/pkg/analyzer_cli/tool/perf.dart index 2c5d551a0991b..391c811b38530 100644 --- a/pkg/analyzer_cli/tool/perf.dart +++ b/pkg/analyzer_cli/tool/perf.dart @@ -78,7 +78,9 @@ void collectSources(Source start, Set files) { /// Uses the diet-parser to parse only directives in [source]. CompilationUnit parseDirectives(Source source) { var token = tokenize(source); - var parser = new Parser(source, AnalysisErrorListener.NULL_LISTENER); + var featureSet = FeatureSet.fromEnableFlags([]); + var parser = new Parser(source, AnalysisErrorListener.NULL_LISTENER, + featureSet: featureSet); return parser.parseDirectives(token); } @@ -108,7 +110,9 @@ void parseFiles(Set files) { /// Parse the full body of [source] and return it's compilation unit. CompilationUnit parseFull(Source source) { var token = tokenize(source); - var parser = new Parser(source, AnalysisErrorListener.NULL_LISTENER); + var featureSet = FeatureSet.fromEnableFlags([]); + var parser = new Parser(source, AnalysisErrorListener.NULL_LISTENER, + featureSet: featureSet); return parser.parseCompilationUnit(token); } diff --git a/pkg/analyzer_plugin/test/src/utilities/visitors/local_declaration_visitor_test.dart b/pkg/analyzer_plugin/test/src/utilities/visitors/local_declaration_visitor_test.dart index ad2857bb19702..673e6461cd2f8 100644 --- a/pkg/analyzer_plugin/test/src/utilities/visitors/local_declaration_visitor_test.dart +++ b/pkg/analyzer_plugin/test/src/utilities/visitors/local_declaration_visitor_test.dart @@ -30,7 +30,7 @@ class LocalDeclarationVisitorTest { ..configureFeatures(featureSet); Token token = scanner.tokenize(); var source = new StringSource(content, '/test.dart'); - Parser parser = new Parser(source, listener)..configureFeatures(featureSet); + Parser parser = new Parser(source, listener, featureSet: featureSet); CompilationUnit unit = parser.parseCompilationUnit(token); expect(unit, isNotNull); return unit; diff --git a/pkg/analyzer_plugin/test/utilities/completion/completion_target_test.dart b/pkg/analyzer_plugin/test/utilities/completion/completion_target_test.dart index 2acffa44b0132..11363270d64cd 100644 --- a/pkg/analyzer_plugin/test/utilities/completion/completion_target_test.dart +++ b/pkg/analyzer_plugin/test/utilities/completion/completion_target_test.dart @@ -35,7 +35,7 @@ class CompletionTargetTest { ..configureFeatures(featureSet); final source = new StringSource(code, 'test.dart'); final listener = new _ErrorCollector(); - final parser = new Parser(source, listener)..configureFeatures(featureSet); + final parser = new Parser(source, listener, featureSet: featureSet); return parser.parseExpression(scanner.tokenize()); } diff --git a/pkg/front_end/tool/perf.dart b/pkg/front_end/tool/perf.dart index 35fb1977c4dec..b21693747d440 100644 --- a/pkg/front_end/tool/perf.dart +++ b/pkg/front_end/tool/perf.dart @@ -18,6 +18,7 @@ library front_end.tool.perf; import 'dart:async'; import 'dart:io' show Directory, File, Platform, exit; +import 'package:analyzer/dart/analysis/features.dart'; import 'package:analyzer/dart/ast/ast.dart'; import 'package:analyzer/error/listener.dart'; import 'package:analyzer/file_system/physical_file_system.dart' @@ -100,7 +101,9 @@ void collectSources(Source start, Set files) { /// Uses the diet-parser to parse only directives in [source]. CompilationUnit parseDirectives(Source source) { var token = tokenize(source); - var parser = new Parser(source, AnalysisErrorListener.NULL_LISTENER); + var featureSet = FeatureSet.fromEnableFlags([]); + var parser = new Parser(source, AnalysisErrorListener.NULL_LISTENER, + featureSet: featureSet); return parser.parseDirectives(token); } @@ -120,7 +123,9 @@ void parseFiles(Set files) { CompilationUnit parseFull(Source source) { var token = tokenize(source); parseTimer.start(); - var parser = new Parser(source, AnalysisErrorListener.NULL_LISTENER); + var featureSet = FeatureSet.fromEnableFlags([]); + var parser = new Parser(source, AnalysisErrorListener.NULL_LISTENER, + featureSet: featureSet); var unit = parser.parseCompilationUnit(token); parseTimer.stop(); return unit;