Skip to content

Commit 6781363

Browse files
stereotype441Commit Queue
authored andcommitted
[messages] Add package getter to MessageWithAnalyzerCode.
Adds the abstract getter `MessageWithAnalyzerCode.package` (and implementations thereof). This returns the package into which this error code will be generated. Also adds a check to the `DiagnosticTables._` constructor to verify that the values returned by this getter are the same as the values returned by `MessageWithAnalyzerCode.diagnosticClassInfo.file.package`, and changes the code generation logic to use the former instead of the latter where possible. This paves the way for a follow-up CL that will remove `MessageWithAnalyzerCode.diagnosticClassInfo`, as part of a larger effort to remove the generated `DiagnosticCode`-derived classes entirely. Change-Id: I6a6a6964b03e53867f7dc7f7307e8e218c080b6c Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/462161 Reviewed-by: Konstantin Shcheglov <scheglov@google.com> Commit-Queue: Paul Berry <paulberry@google.com>
1 parent 015d8a1 commit 6781363

File tree

2 files changed

+30
-4
lines changed

2 files changed

+30
-4
lines changed

pkg/analyzer_utilities/lib/analyzer_messages.dart

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,7 @@ const transformSetErrorCodeFile = GeneratedDiagnosticFile(
187187
/// Decoded messages from the analysis server's `messages.yaml` file.
188188
final List<AnalyzerMessage> analysisServerMessages = decodeAnalyzerMessagesYaml(
189189
analysisServerPkgPath,
190+
package: AnalyzerDiagnosticPackage.analysisServer,
190191
);
191192

192193
/// The path to the `analysis_server` package.
@@ -197,6 +198,7 @@ final String analysisServerPkgPath = normalize(
197198
/// Decoded messages from the analyzer's `messages.yaml` file.
198199
final List<AnalyzerMessage> analyzerMessages = decodeAnalyzerMessagesYaml(
199200
analyzerPkgPath,
201+
package: AnalyzerDiagnosticPackage.analyzer,
200202
);
201203

202204
/// The path to the `analyzer` package.
@@ -211,6 +213,7 @@ final String linterPkgPath = normalize(join(pkg_root.packageRoot, 'linter'));
211213
final List<AnalyzerMessage> lintMessages = decodeAnalyzerMessagesYaml(
212214
linterPkgPath,
213215
allowLinterKeys: true,
216+
package: AnalyzerDiagnosticPackage.linter,
214217
);
215218

216219
/// Decodes a YAML object (in analyzer style `messages.yaml` format) into a list
@@ -221,6 +224,7 @@ final List<AnalyzerMessage> lintMessages = decodeAnalyzerMessagesYaml(
221224
List<AnalyzerMessage> decodeAnalyzerMessagesYaml(
222225
String packagePath, {
223226
bool allowLinterKeys = false,
227+
required AnalyzerDiagnosticPackage package,
224228
}) {
225229
var path = join(packagePath, 'messages.yaml');
226230
var yaml = loadYamlNode(
@@ -277,6 +281,7 @@ List<AnalyzerMessage> decodeAnalyzerMessagesYaml(
277281
messageYaml,
278282
analyzerCode: analyzerCode,
279283
allowLinterKeys: allowLinterKeys,
284+
package: package,
280285
);
281286
},
282287
);
@@ -357,6 +362,7 @@ class AliasMessage extends AnalyzerMessage {
357362
required this.aliasFor,
358363
required super.analyzerCode,
359364
required super.allowLinterKeys,
365+
required super.package,
360366
}) : super._();
361367

362368
String get aliasForClass => aliasFor.split('.').first;
@@ -471,23 +477,29 @@ class AnalyzerMessage extends Message with MessageWithAnalyzerCode {
471477
@override
472478
final bool hasPublishedDocs;
473479

480+
@override
481+
final AnalyzerDiagnosticPackage package;
482+
474483
factory AnalyzerMessage(
475484
MessageYaml messageYaml, {
476485
required AnalyzerCode analyzerCode,
477486
required bool allowLinterKeys,
487+
required AnalyzerDiagnosticPackage package,
478488
}) {
479489
if (messageYaml.getOptionalString('aliasFor') case var aliasFor?) {
480490
return AliasMessage(
481491
messageYaml,
482492
aliasFor: aliasFor,
483493
analyzerCode: analyzerCode,
484494
allowLinterKeys: allowLinterKeys,
495+
package: package,
485496
);
486497
} else {
487498
return AnalyzerMessage._(
488499
messageYaml,
489500
analyzerCode: analyzerCode,
490501
allowLinterKeys: allowLinterKeys,
502+
package: package,
491503
);
492504
}
493505
}
@@ -496,6 +508,7 @@ class AnalyzerMessage extends Message with MessageWithAnalyzerCode {
496508
MessageYaml messageYaml, {
497509
required this.analyzerCode,
498510
required bool allowLinterKeys,
511+
required this.package,
499512
}) : hasPublishedDocs = messageYaml.getBool('hasPublishedDocs'),
500513
super(messageYaml) {
501514
// Ignore extra keys related to analyzer example-based tests.
@@ -651,6 +664,9 @@ mixin MessageWithAnalyzerCode on Message {
651664
/// `null` if the YAML doesn't contain this information.
652665
bool get hasPublishedDocs;
653666

667+
/// The package into which this error code will be generated.
668+
AnalyzerDiagnosticPackage get package;
669+
654670
void outputConstantHeader(StringSink out) {
655671
out.write(toAnalyzerComments(indent: ' '));
656672
if (deprecatedMessage != null) {

pkg/analyzer_utilities/lib/messages.dart

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -448,12 +448,19 @@ class DiagnosticTables {
448448
analyzerCode.snakeCaseName] ??=
449449
[])
450450
.add(message);
451-
var diagnosticClass = analyzerCode.diagnosticClass;
452-
if (!message.isRemoved && message is! AliasMessage) {
453-
(activeMessagesByPackage[diagnosticClass.file.package] ??= []).add(
454-
message,
451+
var package = message.package;
452+
if (analyzerCode.diagnosticClass.file.package != package) {
453+
throw LocatedError(
454+
'Expected to generate this analyzer code to '
455+
'package:${package.dirName}, but its diagnostic class '
456+
'(${analyzerCode.diagnosticClass.name}) lives in '
457+
'package:${analyzerCode.diagnosticClass.file.package.dirName}',
458+
span: message.keySpan,
455459
);
456460
}
461+
if (!message.isRemoved && message is! AliasMessage) {
462+
(activeMessagesByPackage[package] ??= []).add(message);
463+
}
457464
}
458465
}
459466

@@ -980,6 +987,9 @@ class SharedMessage extends CfeStyleMessage with MessageWithAnalyzerCode {
980987
),
981988
hasPublishedDocs = messageYaml.getBool('hasPublishedDocs');
982989

990+
@override
991+
AnalyzerDiagnosticPackage get package => AnalyzerDiagnosticPackage.analyzer;
992+
983993
static AnalyzerCode _decodeAnalyzerCode(YamlNode node) {
984994
switch (node) {
985995
case YamlScalar(value: String s):

0 commit comments

Comments
 (0)