Skip to content

Commit

Permalink
Version 3.4.0-57.0.dev
Browse files Browse the repository at this point in the history
Merge a8b48d3 into dev
  • Loading branch information
Dart CI committed Jan 22, 2024
2 parents 9470ea6 + a8b48d3 commit 5bd0742
Show file tree
Hide file tree
Showing 20 changed files with 984 additions and 134 deletions.
1 change: 0 additions & 1 deletion pkg/analysis_server/lib/src/legacy_analysis_server.dart
Original file line number Diff line number Diff line change
Expand Up @@ -748,7 +748,6 @@ class LegacyAnalysisServer extends AnalysisServer {
throw RequestFailure(Response.unsupportedFeature(
requestId, e.message ?? 'Unsupported feature.'));
}
analysisDriverScheduler.transitionToAnalyzingToIdleIfNoFilesToAnalyze();
} finally {
completer.complete();
}
Expand Down
14 changes: 8 additions & 6 deletions pkg/analysis_server/test/analysis_server_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -162,12 +162,14 @@ class X extends A with M {}
config.add(name: 'bar', rootPath: barLibFolder.parent.path);
writePackageConfig(projectPackageConfigFile, config);

// Allow the server to catch up with everything.
await pumpEventQueue(times: 5000);
await server.onAnalysisComplete;

// Expect both errors are gone.
expect(await getUriNotExistErrors(), hasLength(0));
// Eventually the errors are gone.
while (true) {
var errors = await getUriNotExistErrors();
if (errors.isEmpty) {
break;
}
await pumpEventQueue(times: 5000);
}
}

Future<void> test_serverStatusNotifications_hasFile() async {
Expand Down
15 changes: 3 additions & 12 deletions pkg/analyzer/lib/src/dart/analysis/driver.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2182,7 +2182,9 @@ class AnalysisDriverScheduler {
Stream<Object> get events => _events;

/// Return `true` if we are currently analyzing code.
bool get isAnalyzing => _hasFilesToAnalyze;
bool get isAnalyzing {
return _statusSupport.currentStatus == AnalysisStatus.ANALYZING;
}

bool get isStarted => _started;

Expand Down Expand Up @@ -2233,17 +2235,6 @@ class AnalysisDriverScheduler {
_run();
}

/// Usually we transition status to analyzing only if there are files to
/// analyze. However when used in the server, there are rare cases when
/// analysis roots don't have any Dart files, but for consistency we still
/// want to get status to transition to analysis, and back to idle.
void transitionToAnalyzingToIdleIfNoFilesToAnalyze() {
if (!_hasFilesToAnalyze) {
_statusSupport.transitionToAnalyzing();
_statusSupport.transitionToIdle();
}
}

/// Return a future that will be completed the next time the status is idle.
///
/// If the status is currently idle, the returned future will be signaled
Expand Down
7 changes: 6 additions & 1 deletion pkg/analyzer/lib/src/dart/resolver/ast_rewrite.dart
Original file line number Diff line number Diff line change
Expand Up @@ -429,7 +429,12 @@ class AstRewriter {
required SimpleIdentifierImpl constructorIdentifier,
required InterfaceElement classElement,
}) {
var constructorElement = classElement.getNamedConstructor(
var augmented = classElement.augmented;
if (augmented == null) {
return node;
}

var constructorElement = augmented.getNamedConstructor(
constructorIdentifier.name,
);
if (constructorElement == null) {
Expand Down
65 changes: 35 additions & 30 deletions pkg/analyzer/lib/src/error/duplicate_definition_verifier.dart
Original file line number Diff line number Diff line change
Expand Up @@ -407,41 +407,46 @@ class DuplicateDefinitionVerifier {
final staticSetters = elementContext.staticSetters;

for (ClassMember member in members) {
if (member is ConstructorDeclaration) {
if (member.returnType.name != declarationElement.name) {
// [member] is erroneous; do not count it as a possible duplicate.
continue;
}
var name = member.name?.lexeme ?? '';
if (name == 'new') {
name = '';
}
if (!constructorNames.add(name)) {
if (name.isEmpty) {
_errorReporter.reportErrorForName(
CompileTimeErrorCode.DUPLICATE_CONSTRUCTOR_DEFAULT, member);
} else {
_errorReporter.reportErrorForName(
CompileTimeErrorCode.DUPLICATE_CONSTRUCTOR_NAME, member,
arguments: [name]);
switch (member) {
case ConstructorDeclaration():
// Augmentations are not declarations, can have multiple.
if (member.augmentKeyword != null) {
continue;
}
}
} else if (member is FieldDeclaration) {
for (VariableDeclaration field in member.fields.variables) {
if (member.returnType.name != declarationElement.name) {
// [member] is erroneous; do not count it as a possible duplicate.
continue;
}
var name = member.name?.lexeme ?? '';
if (name == 'new') {
name = '';
}
if (!constructorNames.add(name)) {
if (name.isEmpty) {
_errorReporter.reportErrorForName(
CompileTimeErrorCode.DUPLICATE_CONSTRUCTOR_DEFAULT, member);
} else {
_errorReporter.reportErrorForName(
CompileTimeErrorCode.DUPLICATE_CONSTRUCTOR_NAME, member,
arguments: [name]);
}
}
case FieldDeclaration():
for (VariableDeclaration field in member.fields.variables) {
_checkDuplicateIdentifier(
member.isStatic ? staticGetters : instanceGetters,
field.name,
element: field.declaredElement!,
setterScope: member.isStatic ? staticSetters : instanceSetters,
);
}
case MethodDeclaration():
_checkDuplicateIdentifier(
member.isStatic ? staticGetters : instanceGetters,
field.name,
element: field.declaredElement!,
member.name,
element: member.declaredElement!,
setterScope: member.isStatic ? staticSetters : instanceSetters,
);
}
} else if (member is MethodDeclaration) {
_checkDuplicateIdentifier(
member.isStatic ? staticGetters : instanceGetters,
member.name,
element: member.declaredElement!,
setterScope: member.isStatic ? staticSetters : instanceSetters,
);
}
}

Expand Down
31 changes: 18 additions & 13 deletions pkg/analyzer/lib/src/generated/error_verifier.dart
Original file line number Diff line number Diff line change
Expand Up @@ -468,7 +468,7 @@ class ErrorVerifier extends RecursiveAstVisitor<void>

_checkForConflictingClassMembers();
_constructorFieldsVerifier.enterClass(node, declarationElement);
_checkForFinalNotInitializedInClass(members);
_checkForFinalNotInitializedInClass(element, members);
_checkForBadFunctionUse(
superclass: node.extendsClause?.superclass,
withClause: node.withClause,
Expand Down Expand Up @@ -635,7 +635,7 @@ class ErrorVerifier extends RecursiveAstVisitor<void>
}

_constructorFieldsVerifier.enterEnum(node, element);
_checkForFinalNotInitializedInClass(node.members);
_checkForFinalNotInitializedInClass(element, node.members);
_checkForWrongTypeParameterVarianceInSuperinterfaces();
_checkForMainFunction1(node.name, node.declaredElement!);
_checkForEnumInstantiatedToBoundsIsNotWellBounded(node, element);
Expand Down Expand Up @@ -677,12 +677,12 @@ class ErrorVerifier extends RecursiveAstVisitor<void>
}

@override
void visitExtensionDeclaration(ExtensionDeclaration node) {
void visitExtensionDeclaration(covariant ExtensionDeclarationImpl node) {
var element = node.declaredElement!;
_enclosingExtension = element;
_duplicateDefinitionVerifier.checkExtension(node);
_checkForConflictingExtensionTypeVariableErrorCodes();
_checkForFinalNotInitializedInClass(node.members);
_checkForFinalNotInitializedInClass(element, node.members);

GetterSetterTypesVerifier(
typeSystem: typeSystem,
Expand Down Expand Up @@ -1100,7 +1100,7 @@ class ErrorVerifier extends RecursiveAstVisitor<void>
}

_checkForConflictingClassMembers();
_checkForFinalNotInitializedInClass(members);
_checkForFinalNotInitializedInClass(element, members);
_checkForMainFunction1(node.name, declarationElement);
_checkForWrongTypeParameterVarianceInSuperinterfaces();
_reportMacroDiagnostics(element, node.metadata);
Expand Down Expand Up @@ -3224,18 +3224,23 @@ class ErrorVerifier extends RecursiveAstVisitor<void>
///
/// See [CompileTimeErrorCode.CONST_NOT_INITIALIZED], and
/// [CompileTimeErrorCode.FINAL_NOT_INITIALIZED].
void _checkForFinalNotInitializedInClass(List<ClassMember> members) {
for (ClassMember classMember in members) {
if (classMember is ConstructorDeclaration) {
if (_isNonNullableByDefault) {
if (classMember.factoryKeyword == null) {
return;
}
} else {
void _checkForFinalNotInitializedInClass(
InstanceElementImpl container,
List<ClassMember> members,
) {
if (container is InterfaceElementImpl) {
var augmented = container.augmented;
if (augmented == null) {
return;
}

for (var constructor in augmented.constructors) {
if (constructor.isGenerative && !constructor.isSynthetic) {
return;
}
}
}

for (ClassMember classMember in members) {
if (classMember is FieldDeclaration) {
var fields = classMember.fields;
Expand Down
Loading

0 comments on commit 5bd0742

Please sign in to comment.