Skip to content

Commit

Permalink
Version 2.14.0-184.0.dev
Browse files Browse the repository at this point in the history
Merge commit '47e4b4f2d916a302826b94fdd48b16743d3af79a' into 'dev'
  • Loading branch information
Dart CI committed Jun 4, 2021
2 parents c9bc079 + 47e4b4f commit 3981484
Show file tree
Hide file tree
Showing 11 changed files with 455 additions and 418 deletions.
112 changes: 35 additions & 77 deletions pkg/analyzer/lib/src/dart/analysis/driver.dart
Expand Up @@ -84,9 +84,6 @@ class AnalysisDriver implements AnalysisDriverGeneric {
/// The version of data format, should be incremented on every format change.
static const int DATA_VERSION = 143;

/// The length of the list returned by [_computeDeclaredVariablesSignature].
static const int _declaredVariablesSignatureLength = 4;

/// The number of exception contexts allowed to write. Once this field is
/// zero, we stop writing any new exception contexts in this process.
static int allowedNumberOfContextsToWrite = 10;
Expand Down Expand Up @@ -132,19 +129,13 @@ class AnalysisDriver implements AnalysisDriverGeneric {
api.AnalysisContext? analysisContext;

/// The salt to mix into all hashes used as keys for unlinked data.
final Uint32List _saltForUnlinked =
Uint32List(2 + AnalysisOptionsImpl.signatureLength);
Uint32List _saltForUnlinked = Uint32List(0);

/// The salt to mix into all hashes used as keys for elements.
final Uint32List _saltForElements = Uint32List(1 +
AnalysisOptionsImpl.signatureLength +
_declaredVariablesSignatureLength);
Uint32List _saltForElements = Uint32List(0);

/// The salt to mix into all hashes used as keys for linked data.
final Uint32List _saltForResolution = Uint32List(3 +
AnalysisOptionsImpl.signatureLength +
AnalysisOptionsImpl.signatureLength +
_declaredVariablesSignatureLength);
Uint32List _saltForResolution = Uint32List(0);

/// The set of priority files, that should be analyzed sooner.
final _priorityFiles = <String>{};
Expand Down Expand Up @@ -993,8 +984,11 @@ class AnalysisDriver implements AnalysisDriverGeneric {

ApiSignature getResolvedUnitKeyByPath(String path) {
_throwIfNotAbsolutePath(path);
ApiSignature signature = getUnitKeyByPath(path);
var file = fsState.getFileForPath(path);

var signature = ApiSignature();
signature.addUint32List(_saltForResolution);
signature.addString(file.transitiveSignature);
signature.addString(file.contentHash);
return signature;
}
Expand Down Expand Up @@ -1154,15 +1148,6 @@ class AnalysisDriver implements AnalysisDriverGeneric {
return completer.future;
}

ApiSignature getUnitKeyByPath(String path) {
_throwIfNotAbsolutePath(path);
var file = fsState.getFileForPath(path);
ApiSignature signature = ApiSignature();
signature.addUint32List(_saltForResolution);
signature.addString(file.transitiveSignature);
return signature;
}

/// Return `true` is the file with the given absolute [uri] is a library,
/// or `false` if it is a part. More specifically, return `true` if the file
/// is not known to be a part.
Expand Down Expand Up @@ -1528,6 +1513,17 @@ class AnalysisDriver implements AnalysisDriverGeneric {
_changeHook(null);
}

void _addDeclaredVariablesToSignature(ApiSignature buffer) {
var variableNames = declaredVariables.variableNames;
buffer.addInt(variableNames.length);

for (var name in variableNames) {
var value = declaredVariables.get(name);
buffer.addString(name);
buffer.addString(value!);
}
}

/// Implementation for [changeFile].
void _changeFile(String path) {
_fileTracker.changeFile(path);
Expand Down Expand Up @@ -1660,22 +1656,6 @@ class AnalysisDriver implements AnalysisDriverGeneric {
});
}

Uint32List _computeDeclaredVariablesSignature() {
var buffer = ApiSignature();

var variableNames = declaredVariables.variableNames;
buffer.addInt(variableNames.length);

for (var name in variableNames) {
var value = declaredVariables.get(name);
buffer.addString(name);
buffer.addString(value!);
}

var bytes = buffer.toByteList();
return Uint8List.fromList(bytes).buffer.asUint32List();
}

ErrorsResult? _computeErrors({
required String path,
required bool asIsIfPartWithoutLibrary,
Expand Down Expand Up @@ -1877,60 +1857,38 @@ class AnalysisDriver implements AnalysisDriverGeneric {
}

void _fillSaltForElements() {
var index = 0;

_saltForElements[index] = DATA_VERSION;
index++;

_saltForElements.setAll(index, _analysisOptions.signatureForElements);
index += AnalysisOptionsImpl.signatureLength;

_saltForResolution.setAll(index, _computeDeclaredVariablesSignature());
index += _declaredVariablesSignatureLength;
var buffer = ApiSignature();
buffer.addInt(DATA_VERSION);
buffer.addUint32List(_analysisOptions.signatureForElements);
_addDeclaredVariablesToSignature(buffer);
_saltForElements = buffer.toUint32List();
}

void _fillSaltForResolution() {
var index = 0;

_saltForResolution[index] = DATA_VERSION;
index++;

_saltForResolution[index] = enableIndex ? 1 : 0;
index++;

_saltForResolution[index] = enableDebugResolutionMarkers ? 1 : 0;
index++;
var buffer = ApiSignature();
buffer.addInt(DATA_VERSION);
buffer.addBool(enableIndex);
buffer.addBool(enableDebugResolutionMarkers);
buffer.addUint32List(_analysisOptions.signature);
_addDeclaredVariablesToSignature(buffer);

// TODO(scheglov) Just combine everything into one signature.
{
var buffer = ApiSignature();

var workspace = analysisContext?.contextRoot.workspace;
// TODO(scheglov) Generalize?
if (workspace is PubWorkspace) {
buffer.addString(workspace.pubspecContent ?? '');
}

var bytes = buffer.toByteList();
_saltForResolution.setAll(
index,
// TODO(scheglov) Add a special method to ApiSignature?
Uint8List.fromList(bytes).buffer.asUint32List(),
);
index += AnalysisOptionsImpl.signatureLength;
}

_saltForResolution.setAll(index, _analysisOptions.signature);
index += AnalysisOptionsImpl.signatureLength;

_saltForResolution.setAll(index, _computeDeclaredVariablesSignature());
index += _declaredVariablesSignatureLength;
_saltForResolution = buffer.toUint32List();
}

void _fillSaltForUnlinked() {
_saltForUnlinked[0] = DATA_VERSION;
_saltForUnlinked[1] = enableIndex ? 1 : 0;
_saltForUnlinked.setAll(2, _analysisOptions.unlinkedSignature);
var buffer = ApiSignature();
buffer.addInt(DATA_VERSION);
buffer.addBool(enableIndex);
buffer.addUint32List(_analysisOptions.unlinkedSignature);
_saltForUnlinked = buffer.toUint32List();
}

/// Load the [AnalysisResult] for the given [file] from the [bytes]. Set
Expand Down
8 changes: 4 additions & 4 deletions pkg/analyzer/lib/src/dart/element/element.dart
Expand Up @@ -885,17 +885,17 @@ class ClassElementImpl extends AbstractClassElementImpl
var isNamed = superclassConstructor.name.isNotEmpty;
implicitConstructor.constantInitializers = [
astFactory.superConstructorInvocation(
Tokens.SUPER,
isNamed ? Tokens.PERIOD : null,
Tokens.super_(),
isNamed ? Tokens.period() : null,
isNamed
? (astFactory.simpleIdentifier(
StringToken(TokenType.STRING, superclassConstructor.name, -1),
)..staticElement = superclassConstructor)
: null,
astFactory.argumentList(
Tokens.OPEN_PAREN,
Tokens.openParenthesis(),
argumentsForSuperInvocation,
Tokens.CLOSE_PAREN,
Tokens.closeParenthesis(),
),
)..staticElement = superclassConstructor,
];
Expand Down
18 changes: 9 additions & 9 deletions pkg/analyzer/lib/src/fasta/ast_builder.dart
Expand Up @@ -248,13 +248,13 @@ class AstBuilder extends StackListener {
extensionKeyword: extensionKeyword,
name: name,
typeParameters: typeParameters,
onKeyword: Tokens.ON,
onKeyword: Tokens.on_(),
extendedType: ast.typeName(
_tmpSimpleIdentifier(),
null,
), // extendedType is set in [endExtensionDeclaration]
leftBracket: Tokens.OPEN_CURLY_BRACKET,
rightBracket: Tokens.CLOSE_CURLY_BRACKET,
leftBracket: Tokens.openCurlyBracket(),
rightBracket: Tokens.closeCurlyBracket(),
members: [],
);

Expand Down Expand Up @@ -1670,7 +1670,7 @@ class AstBuilder extends StackListener {
asKeyword,
prefix,
combinators,
semicolon ?? Tokens.SEMICOLON));
semicolon ?? Tokens.semicolon()));
}

@override
Expand Down Expand Up @@ -2344,7 +2344,7 @@ class AstBuilder extends StackListener {
type: type,
variables: variables,
),
semicolon ?? Tokens.SEMICOLON));
semicolon ?? Tokens.semicolon()));
}

@override
Expand Down Expand Up @@ -2528,9 +2528,9 @@ class AstBuilder extends StackListener {
extendsClause,
withClause,
implementsClause,
Tokens.OPEN_CURLY_BRACKET, // leftBracket
Tokens.openCurlyBracket(), // leftBracket
<ClassMember>[],
Tokens.CLOSE_CURLY_BRACKET, // rightBracket
Tokens.closeCurlyBracket(), // rightBracket
);

classDeclaration!.nativeClause = nativeClause;
Expand Down Expand Up @@ -3166,9 +3166,9 @@ class AstBuilder extends StackListener {
typeParameters,
onClause,
implementsClause,
Tokens.OPEN_CURLY_BRACKET, // leftBracket
Tokens.openCurlyBracket(), // leftBracket
<ClassMember>[],
Tokens.CLOSE_CURLY_BRACKET, // rightBracket
Tokens.closeCurlyBracket(), // rightBracket
);
declarations.add(mixinDeclaration!);
}
Expand Down
16 changes: 3 additions & 13 deletions pkg/analyzer/lib/src/generated/engine.dart
Expand Up @@ -187,8 +187,6 @@ abstract class AnalysisOptions {
VersionConstraint? get sdkVersionConstraint;

/// Return the opaque signature of the options.
///
/// The length of the list is guaranteed to equal [signatureLength].
Uint32List get signature;

/// Return `true` if analyzer should use the Dart 2.0 Front End parser.
Expand All @@ -199,8 +197,6 @@ abstract class AnalysisOptions {

/// Determine whether two signatures returned by [signature] are equal.
static bool signaturesEqual(Uint32List a, Uint32List b) {
assert(a.length == AnalysisOptionsImpl.signatureLength);
assert(b.length == AnalysisOptionsImpl.signatureLength);
if (a.length != b.length) {
return false;
}
Expand All @@ -216,9 +212,6 @@ abstract class AnalysisOptions {
/// A set of analysis options used to control the behavior of an analysis
/// context.
class AnalysisOptionsImpl implements AnalysisOptions {
/// The length of the list returned by `signature` getters.
static const int signatureLength = 4;

/// The cached [unlinkedSignature].
Uint32List? _unlinkedSignature;

Expand Down Expand Up @@ -419,8 +412,7 @@ class AnalysisOptionsImpl implements AnalysisOptions {
}

// Hash and convert to Uint32List.
List<int> bytes = buffer.toByteList();
_signature = Uint8List.fromList(bytes).buffer.asUint32List();
_signature = buffer.toUint32List();
}
return _signature!;
}
Expand All @@ -436,8 +428,7 @@ class AnalysisOptionsImpl implements AnalysisOptions {
}

// Hash and convert to Uint32List.
List<int> bytes = buffer.toByteList();
_signatureForElements = Uint8List.fromList(bytes).buffer.asUint32List();
_signatureForElements = buffer.toUint32List();
}
return _signatureForElements!;
}
Expand All @@ -463,8 +454,7 @@ class AnalysisOptionsImpl implements AnalysisOptions {
}

// Hash and convert to Uint32List.
List<int> bytes = buffer.toByteList();
_unlinkedSignature = Uint8List.fromList(bytes).buffer.asUint32List();
return buffer.toUint32List();
}
return _unlinkedSignature!;
}
Expand Down
6 changes: 6 additions & 0 deletions pkg/analyzer/lib/src/summary/api_signature.dart
Expand Up @@ -122,6 +122,12 @@ class ApiSignature {
return hex.encode(toByteList());
}

/// Return the MD5 hash of the data collected so far as [Uint32List].
Uint32List toUint32List() {
var bytes = toByteList();
return Uint8List.fromList(bytes).buffer.asUint32List();
}

/// Ensure that [spaceNeeded] bytes can be added to [_data] at [_offset]
/// (copying it to a larger object if necessary).
void _makeRoom(int spaceNeeded) {
Expand Down

0 comments on commit 3981484

Please sign in to comment.