mirror of
https://github.com/dart-lang/sdk
synced 2024-09-15 22:51:29 +00:00
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:
parent
07144ef876
commit
b0b06bff31
|
@ -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();
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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 =
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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)';
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -365,7 +365,6 @@ class AstBinaryReader {
|
|||
directives: _readNodeList(data.compilationUnit_directives),
|
||||
declarations: _readNodeList(data.compilationUnit_declarations),
|
||||
endToken: null,
|
||||
languageVersion: null,
|
||||
featureSet: null);
|
||||
}
|
||||
|
||||
|
|
|
@ -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() {
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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() {
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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');
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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());
|
||||
}
|
||||
|
|
|
@ -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]
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in a new issue