Revert "Issue 37487. Add CompilationUnit.languageVersion override."

Reason for revert: it was a breaking change to the analyzer public API.

There were two breakages:

- A @required `languageVersion` parameter was added to
  AstFactory.compilationUnit, which is part of the officially
  supported analyzer public API.

- A @required `languageVersion` parameter was added to the Parser
  constructor, which is not part of the officially supported analyzer
  public API, but is part of its de facto public API due to the fact
  that it is used by dart_style.

This reverts commit ce26dfda7d.

Change-Id: I507103ea6f6ffabf915d6f56e9f24454725c3930
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/136851
Reviewed-by: Paul Berry <paulberry@google.com>
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Paul Berry <paulberry@google.com>
This commit is contained in:
Paul Berry 2020-02-25 04:39:10 +00:00 committed by commit-bot@chromium.org
parent 07144ef876
commit b0b06bff31
35 changed files with 96 additions and 379 deletions

View file

@ -73,12 +73,7 @@ class CompilationUnitParser {
var startToken = scanner.tokenize();
errorListener.throwIfErrors();
var parser = Parser(
stringSource,
errorListener,
languageVersion: scanner.languageVersion,
featureSet: featureSet,
);
var parser = Parser(stringSource, errorListener, featureSet: featureSet);
var cu = parser.parseCompilationUnit(startToken);
errorListener.throwIfErrors();

View file

@ -124,12 +124,7 @@ CompilationUnit parseDirectives(String contents,
var scanner = Scanner(source, reader, errorCollector)
..configureFeatures(featureSet);
var token = scanner.tokenize();
var parser = Parser(
source,
errorCollector,
languageVersion: scanner.languageVersion,
featureSet: featureSet,
);
var parser = Parser(source, errorCollector, featureSet: featureSet);
var unit = parser.parseDirectives(token);
unit.lineInfo = LineInfo(scanner.lineStarts);
@ -152,12 +147,8 @@ CompilationUnit _parseSource(
var scanner = Scanner(source, reader, errorCollector)
..configureFeatures(featureSet);
var token = scanner.tokenize();
var parser = Parser(
source,
errorCollector,
languageVersion: scanner.languageVersion,
featureSet: featureSet,
)..parseFunctionBodies = parseFunctionBodies;
var parser = Parser(source, errorCollector, featureSet: featureSet)
..parseFunctionBodies = parseFunctionBodies;
var unit = parser.parseCompilationUnit(token)
..lineInfo = LineInfo(scanner.lineStarts);

View file

@ -118,12 +118,7 @@ ParseStringResult parseString(
var scanner = Scanner(source, reader, errorCollector)
..configureFeatures(featureSet);
var token = scanner.tokenize();
var parser = Parser(
source,
errorCollector,
languageVersion: scanner.languageVersion,
featureSet: scanner.featureSet,
);
var parser = Parser(source, errorCollector, featureSet: scanner.featureSet);
var unit = parser.parseCompilationUnit(token);
unit.lineInfo = LineInfo(scanner.lineStarts);
ParseStringResult result =

View file

@ -33,7 +33,6 @@
/// the elements that they refer to and every expression in the AST will have a
/// type associated with it.
import 'package:analyzer/dart/analysis/features.dart';
import 'package:analyzer/dart/ast/language_version.dart';
import 'package:analyzer/dart/ast/precedence.dart';
import 'package:analyzer/dart/ast/syntactic_entity.dart';
import 'package:analyzer/dart/ast/token.dart';
@ -1233,10 +1232,6 @@ abstract class CompilationUnit implements AstNode {
/// resynthesized from a summary.
FeatureSet get featureSet;
/// The language version override specified for this compilation unit using a
/// token like '// @dart = 2.7', or `null` if no override is specified.
LanguageVersion get languageVersion;
/// Return the line information for this compilation unit.
LineInfo get lineInfo;

View file

@ -5,7 +5,6 @@
import 'package:_fe_analyzer_shared/src/scanner/token.dart';
import 'package:analyzer/dart/analysis/features.dart';
import 'package:analyzer/dart/ast/ast.dart';
import 'package:analyzer/dart/ast/language_version.dart';
import 'package:analyzer/src/generated/utilities_dart.dart';
import 'package:meta/meta.dart';
@ -166,7 +165,6 @@ abstract class AstFactory {
List<Directive> directives,
List<CompilationUnitMember> declarations,
@required Token endToken,
@required LanguageVersion languageVersion,
@required FeatureSet featureSet});
/// Returns a newly created conditional expression.

View file

@ -1,30 +0,0 @@
// Copyright (c) 2020, 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.
/// The language version override specified for a compilation unit.
class LanguageVersion {
final int major;
final int minor;
LanguageVersion(this.major, this.minor);
@override
int get hashCode => major.hashCode * 13 + minor.hashCode * 17;
@override
bool operator ==(Object other) {
if (identical(other, this)) {
return true;
}
return other is LanguageVersion &&
other.major == major &&
other.minor == minor;
}
@override
String toString() {
return 'LanguageVersion(major=$major,minor=$minor)';
}
}

View file

@ -534,11 +534,8 @@ class FileState {
CompilationUnit _createEmptyCompilationUnit() {
var token = Token.eof(0);
return astFactory.compilationUnit(
beginToken: token,
endToken: token,
languageVersion: null,
featureSet: _featureSet,
)..lineInfo = LineInfo(const <int>[0]);
beginToken: token, endToken: token, featureSet: _featureSet)
..lineInfo = LineInfo(const <int>[0]);
}
/**
@ -596,13 +593,8 @@ class FileState {
// Pass the feature set from the scanner to the parser
// because the scanner may have detected a language version comment
// and downgraded the feature set it holds.
Parser parser = Parser(
source,
errorListener,
languageVersion: scanner.languageVersion,
featureSet: scanner.featureSet,
useFasta: useFasta,
);
Parser parser = Parser(source, errorListener,
featureSet: scanner.featureSet, useFasta: useFasta);
parser.enableOptionalNewAndConst = true;
CompilationUnit unit = parser.parseCompilationUnit(token);
unit.lineInfo = lineInfo;

View file

@ -7,7 +7,6 @@ import 'dart:math' as math;
import 'package:analyzer/dart/analysis/features.dart';
import 'package:analyzer/dart/ast/ast.dart';
import 'package:analyzer/dart/ast/language_version.dart';
import 'package:analyzer/dart/ast/precedence.dart';
import 'package:analyzer/dart/ast/syntactic_entity.dart';
import 'package:analyzer/dart/ast/token.dart';
@ -2011,9 +2010,6 @@ class CompilationUnitImpl extends AstNodeImpl implements CompilationUnit {
@override
LineInfo lineInfo;
@override
final LanguageVersion languageVersion;
@override
final FeatureSet featureSet;
@ -2028,7 +2024,6 @@ class CompilationUnitImpl extends AstNodeImpl implements CompilationUnit {
List<Directive> directives,
List<CompilationUnitMember> declarations,
this.endToken,
this.languageVersion,
this.featureSet) {
_scriptTag = _becomeParentOf(scriptTag);
_directives = NodeListImpl<Directive>(this, directives);

View file

@ -6,8 +6,6 @@ import 'package:_fe_analyzer_shared/src/scanner/token.dart';
import 'package:analyzer/dart/analysis/features.dart';
import 'package:analyzer/dart/ast/ast.dart';
import 'package:analyzer/dart/ast/ast_factory.dart';
import 'package:analyzer/dart/ast/language_version.dart';
import 'package:analyzer/dart/ast/token.dart';
import 'package:analyzer/src/dart/ast/ast.dart';
import 'package:analyzer/src/generated/utilities_dart.dart';
import 'package:meta/meta.dart';
@ -187,10 +185,9 @@ class AstFactoryImpl extends AstFactory {
List<Directive> directives,
List<CompilationUnitMember> declarations,
Token endToken,
@required LanguageVersion languageVersion,
FeatureSet featureSet}) =>
CompilationUnitImpl(beginToken, scriptTag, directives, declarations,
endToken, languageVersion, featureSet);
endToken, featureSet);
@override
ConditionalExpression conditionalExpression(

View file

@ -286,7 +286,6 @@ class AstCloner implements AstVisitor<AstNode> {
directives: cloneNodeList(node.directives),
declarations: cloneNodeList(node.declarations),
endToken: cloneToken(node.endToken),
languageVersion: node.languageVersion,
featureSet: node.featureSet);
clone.lineInfo = node.lineInfo;
return clone;

View file

@ -113,13 +113,8 @@ class FileState {
// Pass the feature set from the scanner to the parser
// because the scanner may have detected a language version comment
// and downgraded the feature set it holds.
Parser parser = Parser(
source,
errorListener,
languageVersion: scanner.languageVersion,
featureSet: scanner.featureSet,
useFasta: useFasta,
);
Parser parser = Parser(source, errorListener,
featureSet: scanner.featureSet, useFasta: useFasta);
parser.enableOptionalNewAndConst = true;
CompilationUnit unit = parser.parseCompilationUnit(token);
unit.lineInfo = lineInfo;

View file

@ -8,7 +8,6 @@ import 'package:_fe_analyzer_shared/src/scanner/scanner.dart' as fasta;
import 'package:_fe_analyzer_shared/src/scanner/token.dart'
show Token, TokenType;
import 'package:analyzer/dart/analysis/features.dart';
import 'package:analyzer/dart/ast/language_version.dart';
import 'package:analyzer/error/error.dart';
import 'package:analyzer/error/listener.dart';
import 'package:analyzer/src/dart/error/syntactic_errors.dart';
@ -72,8 +71,6 @@ class Scanner {
*/
bool enableNonNullable = false;
LanguageVersion _languageVersion;
FeatureSet _featureSet;
/**
@ -110,12 +107,6 @@ class Scanner {
*/
FeatureSet get featureSet => _featureSet;
/**
* The language version override specified for this compilation unit using a
* token like '// @dart = 2.7', or `null` if no override is specified.
*/
LanguageVersion get languageVersion => _languageVersion;
set preserveComments(bool preserveComments) {
this._preserveComments = preserveComments;
}
@ -198,12 +189,8 @@ class Scanner {
void _languageVersionChanged(
fasta.Scanner scanner, fasta.LanguageVersionToken languageVersion) {
if (languageVersion.major >= 0 && languageVersion.minor >= 0) {
_languageVersion = LanguageVersion(
languageVersion.major,
languageVersion.minor,
);
if (_featureSet != null) {
if (_featureSet != null) {
if (languageVersion.major >= 0 && languageVersion.minor >= 0) {
_featureSet = _featureSet.restrictToVersion(
Version(languageVersion.major, languageVersion.minor, 0));
scanner.configuration = buildConfig(_featureSet);

View file

@ -418,12 +418,7 @@ class SdkPatcher {
Token token = scanner.tokenize();
LineInfo lineInfo = LineInfo(scanner.lineStarts);
Parser parser = Parser(
source,
errorListener,
languageVersion: scanner.languageVersion,
featureSet: featureSet,
);
Parser parser = Parser(source, errorListener, featureSet: featureSet);
CompilationUnit unit = parser.parseCompilationUnit(token);
unit.lineInfo = lineInfo;
return unit;

View file

@ -747,12 +747,7 @@ class SdkLibrariesReader {
Scanner scanner =
Scanner(source, CharSequenceReader(libraryFileContents), errorListener)
..configureFeatures(featureSet);
Parser parser = Parser(
source,
errorListener,
languageVersion: scanner.languageVersion,
featureSet: featureSet,
);
Parser parser = Parser(source, errorListener, featureSet: featureSet);
CompilationUnit unit = parser.parseCompilationUnit(scanner.tokenize());
SdkLibrariesReader_LibraryBuilder libraryBuilder =
SdkLibrariesReader_LibraryBuilder();

View file

@ -50,7 +50,6 @@ import 'package:_fe_analyzer_shared/src/scanner/token.dart'
import 'package:analyzer/dart/analysis/features.dart';
import 'package:analyzer/dart/ast/ast.dart';
import 'package:analyzer/dart/ast/ast_factory.dart' show AstFactory;
import 'package:analyzer/dart/ast/language_version.dart';
import 'package:analyzer/dart/ast/standard_ast_factory.dart' as standard;
import 'package:analyzer/dart/ast/token.dart' show Token, TokenType;
import 'package:analyzer/error/listener.dart';
@ -132,13 +131,10 @@ class AstBuilder extends StackListener {
/// `true` if variance behavior is enabled
final bool enableVariance;
/// The language version override, `null` if not such token.
LanguageVersion _languageVersion;
final FeatureSet _featureSet;
AstBuilder(ErrorReporter errorReporter, this.fileUri, this.isFullAst,
this._languageVersion, this._featureSet,
this._featureSet,
[Uri uri])
: this.errorReporter = FastaErrorReporter(errorReporter),
this.enableNonNullable = _featureSet.isEnabled(Feature.non_nullable),
@ -964,7 +960,6 @@ class AstBuilder extends StackListener {
directives: directives,
declarations: declarations,
endToken: endToken,
languageVersion: _languageVersion,
featureSet: _featureSet) as CompilationUnitImpl;
push(unit);
}

View file

@ -15,7 +15,6 @@ import 'package:_fe_analyzer_shared/src/parser/type_info.dart' as fasta;
import 'package:_fe_analyzer_shared/src/scanner/scanner.dart' as fasta;
import 'package:analyzer/dart/analysis/features.dart';
import 'package:analyzer/dart/ast/ast.dart';
import 'package:analyzer/dart/ast/language_version.dart';
import 'package:analyzer/dart/ast/standard_ast_factory.dart';
import 'package:analyzer/dart/ast/token.dart';
import 'package:analyzer/error/error.dart';
@ -202,12 +201,10 @@ 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].
factory Parser(Source source, AnalysisErrorListener errorListener,
{bool useFasta,
@required LanguageVersion languageVersion,
@required FeatureSet featureSet}) {
{bool useFasta, @required FeatureSet featureSet}) {
featureSet ??= FeatureSet.fromEnableFlags([]);
if (useFasta ?? Parser.useFasta) {
return _Parser2(source, errorListener, languageVersion, featureSet,
return _Parser2(source, errorListener, featureSet,
allowNativeClause: true);
} else {
return Parser.withoutFasta(source, errorListener, featureSet: featureSet);
@ -1893,11 +1890,7 @@ class Parser {
_reportErrorForToken(ParserErrorCode.STACK_OVERFLOW, _currentToken);
Token eof = Token.eof(0);
return astFactory.compilationUnit(
beginToken: eof,
endToken: eof,
languageVersion: null,
featureSet: _featureSet,
);
beginToken: eof, endToken: eof, featureSet: _featureSet);
}
if (member != null) {
declarations.add(member);
@ -1947,14 +1940,12 @@ class Parser {
}
}
return astFactory.compilationUnit(
beginToken: firstToken,
scriptTag: scriptTag,
directives: directives,
declarations: declarations,
endToken: _currentToken,
languageVersion: null,
featureSet: _featureSet,
);
beginToken: firstToken,
scriptTag: scriptTag,
directives: directives,
declarations: declarations,
endToken: _currentToken,
featureSet: _featureSet);
}
/// Parse a compilation unit member. The [commentAndMetadata] is the metadata
@ -2405,23 +2396,19 @@ class Parser {
_advance();
}
return astFactory.compilationUnit(
beginToken: firstToken,
scriptTag: scriptTag,
directives: directives,
endToken: _currentToken,
languageVersion: null,
featureSet: _featureSet,
);
beginToken: firstToken,
scriptTag: scriptTag,
directives: directives,
endToken: _currentToken,
featureSet: _featureSet);
}
}
return astFactory.compilationUnit(
beginToken: firstToken,
scriptTag: scriptTag,
directives: directives,
endToken: _currentToken,
languageVersion: null,
featureSet: _featureSet,
);
beginToken: firstToken,
scriptTag: scriptTag,
directives: directives,
endToken: _currentToken,
featureSet: _featureSet);
}
/// Parse a documentation comment based on the given list of documentation

View file

@ -24,11 +24,10 @@ abstract class ParserAdapter implements Parser {
final AstBuilder astBuilder;
ParserAdapter(this.currentToken, ErrorReporter errorReporter, Uri fileUri,
LanguageVersion languageVersion, FeatureSet featureSet,
FeatureSet featureSet,
{bool allowNativeClause = false})
: fastaParser = fasta.Parser(null),
astBuilder = AstBuilder(
errorReporter, fileUri, true, languageVersion, featureSet) {
astBuilder = AstBuilder(errorReporter, fileUri, true, featureSet) {
fastaParser.listener = astBuilder;
astBuilder.parser = fastaParser;
astBuilder.allowNativeClause = allowNativeClause;
@ -379,23 +378,21 @@ class _Parser2 extends ParserAdapter {
@override
bool enableUriInPartOf = true;
factory _Parser2(Source source, AnalysisErrorListener errorListener,
LanguageVersion languageVersion, FeatureSet featureSet,
factory _Parser2(
Source source, AnalysisErrorListener errorListener, FeatureSet featureSet,
{bool allowNativeClause = false}) {
var errorReporter = ErrorReporter(
errorListener,
source,
isNonNullableByDefault: featureSet.isEnabled(Feature.non_nullable),
);
return _Parser2._(
source, errorReporter, source.uri, languageVersion, featureSet,
return _Parser2._(source, errorReporter, source.uri, featureSet,
allowNativeClause: allowNativeClause);
}
_Parser2._(this._source, ErrorReporter errorReporter, Uri fileUri,
LanguageVersion languageVersion, FeatureSet featureSet,
{bool allowNativeClause = false})
: super(null, errorReporter, fileUri, languageVersion, featureSet,
FeatureSet featureSet, {bool allowNativeClause = false})
: super(null, errorReporter, fileUri, featureSet,
allowNativeClause: allowNativeClause);
@override

View file

@ -4,7 +4,6 @@
import 'package:analyzer/dart/analysis/features.dart';
import 'package:analyzer/dart/ast/ast.dart';
import 'package:analyzer/dart/ast/language_version.dart';
import 'package:analyzer/dart/ast/standard_ast_factory.dart';
import 'package:analyzer/dart/ast/token.dart';
import 'package:analyzer/dart/element/element.dart';
@ -288,14 +287,12 @@ class AstTestFactory {
directives: directives ?? <Directive>[],
declarations: declarations ?? <CompilationUnitMember>[],
endToken: TokenFactory.tokenFromType(TokenType.EOF),
languageVersion: null,
featureSet: null);
static CompilationUnit compilationUnit9(
{String scriptTag,
List<Directive> directives,
List<CompilationUnitMember> declarations,
LanguageVersion languageVersion,
FeatureSet featureSet}) =>
astFactory.compilationUnit(
beginToken: TokenFactory.tokenFromType(TokenType.EOF),
@ -304,7 +301,6 @@ class AstTestFactory {
directives: directives ?? <Directive>[],
declarations: declarations ?? <CompilationUnitMember>[],
endToken: TokenFactory.tokenFromType(TokenType.EOF),
languageVersion: languageVersion,
featureSet: featureSet);
static ConditionalExpression conditionalExpression(Expression condition,

View file

@ -108,12 +108,7 @@ class Spelunker {
errorListener.throwIfErrors();
var parser = Parser(
stringSource,
errorListener,
languageVersion: scanner.languageVersion,
featureSet: featureSet,
);
var parser = Parser(stringSource, errorListener, featureSet: featureSet);
var node = parser.parseCompilationUnit(startToken);
errorListener.throwIfErrors();

View file

@ -1881,13 +1881,8 @@ class _File {
..configureFeatures(featureSet);
var token = scanner.tokenize();
var parser = Parser(
source,
errorListener,
languageVersion: scanner.languageVersion,
featureSet: featureSet,
useFasta: true,
);
var parser =
Parser(source, errorListener, featureSet: featureSet, useFasta: true);
var unit = parser.parseCompilationUnit(token);
unit.lineInfo = LineInfo(scanner.lineStarts);

View file

@ -142,13 +142,9 @@ class _Builder {
..configureFeatures(featureSet);
Token token = scanner.tokenize();
LineInfo lineInfo = LineInfo(scanner.lineStarts);
Parser parser = Parser(
source,
errorListener,
languageVersion: scanner.languageVersion,
featureSet: scanner.featureSet,
useFasta: context.analysisOptions.useFastaParser,
);
Parser parser = Parser(source, errorListener,
featureSet: scanner.featureSet,
useFasta: context.analysisOptions.useFastaParser);
parser.enableOptionalNewAndConst = true;
CompilationUnit unit = parser.parseCompilationUnit(token);
unit.lineInfo = lineInfo;

View file

@ -365,7 +365,6 @@ class AstBinaryReader {
directives: _readNodeList(data.compilationUnit_directives),
declarations: _readNodeList(data.compilationUnit_declarations),
endToken: null,
languageVersion: null,
featureSet: null);
}

View file

@ -203,35 +203,6 @@ int? f() => 1;
expect(result.unit.toString(), equals('int? f() => 1;'));
}
test_parseString_languageVersion() {
var content = '''
// @dart = 2.7
class A {}
''';
var result = parseString(
content: content,
throwIfDiagnostics: false,
featureSet: FeatureSet.fromEnableFlags([]),
);
var languageVersion = result.unit.languageVersion;
expect(languageVersion.major, 2);
expect(languageVersion.minor, 7);
}
test_parseString_languageVersion_null() {
var content = '''
class A {}
''';
var result = parseString(
content: content,
throwIfDiagnostics: false,
featureSet: FeatureSet.fromEnableFlags([]),
);
expect(result.unit.languageVersion, isNull);
}
test_parseString_lineInfo() {
String content = '''
main() {

View file

@ -716,13 +716,8 @@ E f() => g;
var scanner = Scanner.fasta(source, listener)
..configureFeatures(featureSet);
Token tokens = scanner.tokenize();
_unit = Parser(
source,
listener,
languageVersion: scanner.languageVersion,
featureSet: featureSet,
useFasta: true,
).parseCompilationUnit(tokens);
_unit = Parser(source, listener, featureSet: featureSet, useFasta: true)
.parseCompilationUnit(tokens);
}
return _unit;
}

View file

@ -13,7 +13,6 @@ import 'package:_fe_analyzer_shared/src/scanner/scanner.dart'
show LanguageVersionToken, ScannerConfiguration, ScannerResult, scanString;
import 'package:analyzer/dart/analysis/features.dart';
import 'package:analyzer/dart/ast/ast.dart';
import 'package:analyzer/dart/ast/language_version.dart';
import 'package:analyzer/dart/ast/token.dart' as analyzer;
import 'package:analyzer/dart/ast/token.dart' show Token, TokenType;
import 'package:analyzer/error/error.dart';
@ -1950,9 +1949,7 @@ class FastaParserTestCase
@override
void createParser(String content,
{int expectedEndOffset,
LanguageVersion languageVersion,
FeatureSet featureSet}) {
{int expectedEndOffset, FeatureSet featureSet}) {
featureSet ??= FeatureSet.forTesting();
var result = scanString(content,
configuration: featureSet.isEnabled(Feature.non_nullable)
@ -1960,7 +1957,7 @@ class FastaParserTestCase
: ScannerConfiguration.classic,
includeComments: true);
_fastaTokens = result.tokens;
_parserProxy = ParserProxy(_fastaTokens, languageVersion, featureSet,
_parserProxy = ParserProxy(_fastaTokens, featureSet,
allowNativeClause: allowNativeClause,
expectedEndOffset: expectedEndOffset);
}
@ -2071,7 +2068,7 @@ class FastaParserTestCase
CompilationUnit parseCompilationUnit2(
String content, GatheringErrorListener listener,
{LanguageVersion languageVersion, FeatureSet featureSet}) {
{FeatureSet featureSet}) {
featureSet ??= FeatureSet.forTesting();
var source = StringSource(content, 'parser_test_StringSource.dart');
@ -2097,8 +2094,8 @@ class FastaParserTestCase
isNonNullableByDefault: false,
);
fasta.Parser parser = fasta.Parser(null);
AstBuilder astBuilder = AstBuilder(
errorReporter, source.uri, true, languageVersion, featureSet);
AstBuilder astBuilder =
AstBuilder(errorReporter, source.uri, true, featureSet);
parser.listener = astBuilder;
astBuilder.parser = parser;
astBuilder.allowNativeClause = allowNativeClause;
@ -3360,8 +3357,7 @@ class ParserProxy extends analyzer.ParserAdapter {
* Creates a [ParserProxy] which is prepared to begin parsing at the given
* Fasta token.
*/
factory ParserProxy(analyzer.Token firstToken,
LanguageVersion languageVersion, FeatureSet featureSet,
factory ParserProxy(analyzer.Token firstToken, FeatureSet featureSet,
{bool allowNativeClause = false, int expectedEndOffset}) {
TestSource source = TestSource();
var errorListener = GatheringErrorListener(checkRanges: true);
@ -3370,22 +3366,16 @@ class ParserProxy extends analyzer.ParserAdapter {
source,
isNonNullableByDefault: false,
);
return ParserProxy._(firstToken, errorReporter, null, errorListener,
languageVersion, featureSet,
return ParserProxy._(
firstToken, errorReporter, null, errorListener, featureSet,
allowNativeClause: allowNativeClause,
expectedEndOffset: expectedEndOffset);
}
ParserProxy._(
analyzer.Token firstToken,
ErrorReporter errorReporter,
Uri fileUri,
this._errorListener,
LanguageVersion languageVersion,
FeatureSet featureSet,
{bool allowNativeClause = false,
this.expectedEndOffset})
: super(firstToken, errorReporter, fileUri, languageVersion, featureSet,
ParserProxy._(analyzer.Token firstToken, ErrorReporter errorReporter,
Uri fileUri, this._errorListener, FeatureSet featureSet,
{bool allowNativeClause = false, this.expectedEndOffset})
: super(firstToken, errorReporter, fileUri, featureSet,
allowNativeClause: allowNativeClause) {
_eventListener = ForwardingTestListener(astBuilder);
fastaParser.listener = _eventListener;

View file

@ -9474,12 +9474,7 @@ class ParserTestCase with ParserTestHelpers implements AbstractParserTestCase {
ScannerResult result = scanString(content, includeComments: true);
listener.setLineInfo(source, result.lineStarts);
parser = Parser(
source,
listener,
languageVersion: null,
featureSet: FeatureSet.forTesting(),
);
parser = Parser(source, listener, featureSet: FeatureSet.forTesting());
parser.allowNativeClause = allowNativeClause;
parser.parseFunctionBodies = parseFunctionBodies;
parser.enableOptionalNewAndConst = enableOptionalNewAndConst;
@ -9609,12 +9604,8 @@ class ParserTestCase with ParserTestHelpers implements AbstractParserTestCase {
ScannerResult result = scanString(content, includeComments: true);
listener.setLineInfo(source, result.lineStarts);
Parser parser = Parser(
source,
listener,
languageVersion: null,
featureSet: FeatureSet.forTesting(),
);
Parser parser =
Parser(source, listener, featureSet: FeatureSet.forTesting());
parser.enableOptionalNewAndConst = enableOptionalNewAndConst;
CompilationUnit unit = parser.parseCompilationUnit(result.tokens);
expect(unit, isNotNull);
@ -9638,12 +9629,8 @@ class ParserTestCase with ParserTestHelpers implements AbstractParserTestCase {
ScannerResult result = scanString(content, includeComments: true);
Parser parser = Parser(
source,
listener,
languageVersion: null,
featureSet: FeatureSet.forTesting(),
);
Parser parser =
Parser(source, listener, featureSet: FeatureSet.forTesting());
parser.enableOptionalNewAndConst = enableOptionalNewAndConst;
CompilationUnit unit = parser.parseCompilationUnit(result.tokens);
unit.lineInfo = LineInfo(result.lineStarts);
@ -9979,12 +9966,8 @@ class ParserTestCase with ParserTestHelpers implements AbstractParserTestCase {
ScannerResult result = scanString(content, includeComments: true);
listener.setLineInfo(source, result.lineStarts);
Parser parser = Parser(
source,
listener,
languageVersion: null,
featureSet: FeatureSet.forTesting(),
);
Parser parser =
Parser(source, listener, featureSet: FeatureSet.forTesting());
parser.enableOptionalNewAndConst = enableOptionalNewAndConst;
Statement statement = parser.parseStatement(result.tokens);
expect(statement, isNotNull);
@ -10010,12 +9993,8 @@ class ParserTestCase with ParserTestHelpers implements AbstractParserTestCase {
ScannerResult result = scanString(content);
listener.setLineInfo(source, result.lineStarts);
Parser parser = Parser(
source,
listener,
languageVersion: null,
featureSet: FeatureSet.forTesting(),
);
Parser parser =
Parser(source, listener, featureSet: FeatureSet.forTesting());
parser.enableOptionalNewAndConst = enableOptionalNewAndConst;
List<Statement> statements = parser.parseStatements(result.tokens);
expect(statements, hasLength(expectedCount));
@ -12411,14 +12390,9 @@ class SimpleParserTest extends ParserTestCase with SimpleParserTestMixin {
void test_Parser() {
expect(
Parser(
NonExistingSource.unknown,
null,
languageVersion: null,
featureSet: FeatureSet.forTesting(),
),
isNotNull,
);
Parser(NonExistingSource.unknown, null,
featureSet: FeatureSet.forTesting()),
isNotNull);
}
void test_skipPrefixedIdentifier_invalid() {

View file

@ -1184,12 +1184,8 @@ library l;''');
Scanner scanner = Scanner(null, reader, listener)
..configureFeatures(featureSet);
Token token = scanner.tokenize();
Parser parser = Parser(
NonExistingSource.unknown,
listener,
languageVersion: scanner.languageVersion,
featureSet: featureSet,
);
Parser parser =
Parser(NonExistingSource.unknown, listener, featureSet: featureSet);
CompilationUnit unit = parser.parseCompilationUnit(token);
expect(unit, isNotNull);
listener.assertNoErrors();

View file

@ -1612,19 +1612,6 @@ part '';
await driver.getResult(testFile);
}
test_getResult_languageVersion() async {
var path = convertPath('/test/lib/test.dart');
newFile(path, content: r'''
// @dart = 2.7
class A{}
''');
var result = await driver.getResult(path);
var languageVersion = result.unit.languageVersion;
expect(languageVersion.major, 2);
expect(languageVersion.minor, 7);
}
test_getResult_mix_fileAndPackageUris() async {
var a = convertPath('/test/bin/a.dart');
var b = convertPath('/test/bin/b.dart');
@ -2199,31 +2186,6 @@ import 'b.dart';
expect(clazz.name.name, 'A2');
}
test_parseFileSync_languageVersion() async {
var path = convertPath('/test/lib/test.dart');
newFile(path, content: r'''
// @dart = 2.7
class A {}
''');
var parseResult = driver.parseFileSync(path);
var languageVersion = parseResult.unit.languageVersion;
expect(languageVersion.major, 2);
expect(languageVersion.minor, 7);
}
test_parseFileSync_languageVersion_null() async {
var path = convertPath('/test/lib/test.dart');
newFile(path, content: r'''
class A {}
''');
var parseResult = driver.parseFileSync(path);
expect(parseResult.unit.languageVersion, isNull);
}
test_parseFileSync_notAbsolutePath() async {
expect(() {
driver.parseFileSync('not_absolute.dart');

View file

@ -34,13 +34,8 @@ class ParseBase with ResourceProviderMixin {
featureSet = scanner.featureSet;
var useFasta = analysisOptions.useFastaParser;
var parser = Parser(
source,
errorListener,
languageVersion: scanner.languageVersion,
featureSet: featureSet,
useFasta: useFasta,
);
var parser = Parser(source, errorListener,
featureSet: featureSet, useFasta: useFasta);
parser.enableOptionalNewAndConst = true;
var unit = parser.parseCompilationUnit(token);

View file

@ -29,11 +29,8 @@ CompilationUnit parseText(
// because the scanner may have detected a language version comment
// and downgraded the feature set it holds.
Parser parser = Parser(
NonExistingSource.unknown,
AnalysisErrorListener.NULL_LISTENER,
languageVersion: scanner.languageVersion,
featureSet: scanner.featureSet,
);
NonExistingSource.unknown, AnalysisErrorListener.NULL_LISTENER,
featureSet: scanner.featureSet);
CompilationUnit unit = parser.parseCompilationUnit(token);
unit.lineInfo = LineInfo(scanner.lineStarts);
return unit;

View file

@ -83,12 +83,9 @@ void collectSources(Source start, Set<Source> files) {
/// Uses the diet-parser to parse only directives in [source].
CompilationUnit parseDirectives(Source source) {
var token = tokenize(source);
var parser = Parser(
source,
AnalysisErrorListener.NULL_LISTENER,
languageVersion: null,
featureSet: FeatureSet.fromEnableFlags([]),
);
var featureSet = FeatureSet.fromEnableFlags([]);
var parser = Parser(source, AnalysisErrorListener.NULL_LISTENER,
featureSet: featureSet);
return parser.parseDirectives(token);
}
@ -118,12 +115,9 @@ void parseFiles(Set<Source> files) {
/// Parse the full body of [source] and return it's compilation unit.
CompilationUnit parseFull(Source source) {
var token = tokenize(source);
var parser = Parser(
source,
AnalysisErrorListener.NULL_LISTENER,
languageVersion: null,
featureSet: FeatureSet.fromEnableFlags([]),
);
var featureSet = FeatureSet.fromEnableFlags([]);
var parser = Parser(source, AnalysisErrorListener.NULL_LISTENER,
featureSet: featureSet);
return parser.parseCompilationUnit(token);
}

View file

@ -29,12 +29,7 @@ class LocalDeclarationVisitorTest {
..configureFeatures(featureSet);
Token token = scanner.tokenize();
var source = StringSource(content, '/test.dart');
Parser parser = Parser(
source,
listener,
languageVersion: scanner.languageVersion,
featureSet: featureSet,
);
Parser parser = Parser(source, listener, featureSet: featureSet);
CompilationUnit unit = parser.parseCompilationUnit(token);
expect(unit, isNotNull);
return unit;

View file

@ -34,12 +34,7 @@ class CompletionTargetTest {
final scanner = Scanner(null, reader, null)..configureFeatures(featureSet);
final source = StringSource(code, 'test.dart');
final listener = _ErrorCollector();
final parser = Parser(
source,
listener,
languageVersion: scanner.languageVersion,
featureSet: featureSet,
);
final parser = Parser(source, listener, featureSet: featureSet);
return parser.parseExpression(scanner.tokenize());
}

View file

@ -218,7 +218,7 @@ parseFull(Uri uri, List<int> source) {
// bodies. So this listener is not feature complete.
class _PartialAstBuilder extends AstBuilder {
_PartialAstBuilder(Uri uri)
: super(null, null, true, null, FeatureSet.fromEnableFlags([]), uri);
: super(null, null, true, FeatureSet.fromEnableFlags([]), uri);
}
// Invoke the fasta kernel generator for the program starting in [entryUri]

View file

@ -100,12 +100,9 @@ void collectSources(Source start, Set<Source> 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,
languageVersion: null,
featureSet: FeatureSet.fromEnableFlags([]),
);
var featureSet = FeatureSet.fromEnableFlags([]);
var parser = new Parser(source, AnalysisErrorListener.NULL_LISTENER,
featureSet: featureSet);
return parser.parseDirectives(token);
}
@ -125,12 +122,9 @@ void parseFiles(Set<Source> files) {
CompilationUnit parseFull(Source source) {
var token = tokenize(source);
parseTimer.start();
var parser = new Parser(
source,
AnalysisErrorListener.NULL_LISTENER,
languageVersion: null,
featureSet: FeatureSet.fromEnableFlags([]),
);
var featureSet = FeatureSet.fromEnableFlags([]);
var parser = new Parser(source, AnalysisErrorListener.NULL_LISTENER,
featureSet: featureSet);
var unit = parser.parseCompilationUnit(token);
parseTimer.stop();
return unit;