From bb088347f0a7f09ae0f37f789532f93cd3c16df3 Mon Sep 17 00:00:00 2001 From: Aske Simon Christensen Date: Mon, 26 Feb 2018 16:24:13 +0000 Subject: [PATCH] Separate severity for context messages MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: I8c0f9f0eae141e38e1f57afce4a30b6f95e8e412 Reviewed-on: https://dart-review.googlesource.com/43721 Reviewed-by: Peter von der Ahé Commit-Queue: Aske Simon Christensen --- .../lib/src/kernel/front_end_adapter.dart | 3 ++ .../lib/src/fasta/command_line_reporting.dart | 14 ++++++- .../lib/src/fasta/fasta_codes_generated.dart | 42 +++++++++---------- .../lib/src/fasta/kernel/body_builder.dart | 23 +++++----- .../fasta/kernel/kernel_library_builder.dart | 11 +++-- .../lib/src/fasta/kernel/kernel_target.dart | 2 + pkg/front_end/lib/src/fasta/loader.dart | 2 +- pkg/front_end/lib/src/fasta/severity.dart | 3 +- .../lib/src/fasta/source/outline_builder.dart | 23 +++++----- .../fasta/source/source_library_builder.dart | 10 ++--- .../lib/src/fasta/source/source_loader.dart | 15 ++++--- pkg/front_end/messages.yaml | 16 +++++-- .../tool/_fasta/generate_messages.dart | 1 + pkg/vm/bin/kernel_service.dart | 3 ++ 14 files changed, 102 insertions(+), 66 deletions(-) diff --git a/pkg/compiler/lib/src/kernel/front_end_adapter.dart b/pkg/compiler/lib/src/kernel/front_end_adapter.dart index bb70bb50f9b..2dd227a2161 100644 --- a/pkg/compiler/lib/src/kernel/front_end_adapter.dart +++ b/pkg/compiler/lib/src/kernel/front_end_adapter.dart @@ -99,6 +99,9 @@ void reportFrontEndMessage( case fe.Severity.nit: reporter.reportHintMessage(span, kind, {'text': message.message}); break; + case fe.Severity.context: + reporter.reportInfo(span, kind, {'text': message.message}); + break; default: throw new UnimplementedError('unhandled severity ${message.severity}'); } diff --git a/pkg/front_end/lib/src/fasta/command_line_reporting.dart b/pkg/front_end/lib/src/fasta/command_line_reporting.dart index ff6a19ac50c..02802e0b15d 100644 --- a/pkg/front_end/lib/src/fasta/command_line_reporting.dart +++ b/pkg/front_end/lib/src/fasta/command_line_reporting.dart @@ -12,7 +12,7 @@ import 'dart:io' show exitCode; import 'package:kernel/ast.dart' show Location; -import 'colors.dart' show cyan, magenta, red; +import 'colors.dart' show cyan, green, magenta, red; import 'compiler_context.dart' show CompilerContext; @@ -68,6 +68,10 @@ String formatInternal( text = magenta(text); break; + case Severity.context: + text = green(text); + break; + default: return unexpected("$severity", "formatInternal", -1, null); } @@ -115,6 +119,7 @@ bool isHidden(Severity severity) { switch (severity) { case Severity.error: case Severity.internalProblem: + case Severity.context: return false; case Severity.nit: @@ -144,6 +149,9 @@ bool shouldThrowOn(Severity severity) { case Severity.warning: return CompilerContext.current.options.throwOnWarningsForDebugging; + case Severity.context: + return false; + default: return unexpected("$severity", "shouldThrowOn", -1, null); } @@ -164,6 +172,9 @@ String severityName(Severity severity, {bool capitalized: false}) { case Severity.warning: return capitalized ? "Warning" : "warning"; + case Severity.context: + return capitalized ? "Context" : "context"; + default: return unexpected("$severity", "severityName", -1, null); } @@ -204,6 +215,7 @@ bool isCompileTimeError(Severity severity) { case Severity.nit: case Severity.warning: + case Severity.context: return false; } return unexpected("$severity", "isCompileTimeError", -1, null); diff --git a/pkg/front_end/lib/src/fasta/fasta_codes_generated.dart b/pkg/front_end/lib/src/fasta/fasta_codes_generated.dart index b3fad0b9f99..12625ca2055 100644 --- a/pkg/front_end/lib/src/fasta/fasta_codes_generated.dart +++ b/pkg/front_end/lib/src/fasta/fasta_codes_generated.dart @@ -288,6 +288,7 @@ const Code codeCandidateFound = messageCandidateFound; // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE. const MessageCode messageCandidateFound = const MessageCode("CandidateFound", + severity: Severity.context, message: r"""Found this candidate, but the arguments don't match."""); // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE. @@ -302,9 +303,9 @@ const Template const Code codeCandidateFoundIsDefaultConstructor = const Code( - "CandidateFoundIsDefaultConstructor", - templateCandidateFoundIsDefaultConstructor, -); + "CandidateFoundIsDefaultConstructor", + templateCandidateFoundIsDefaultConstructor, + severity: Severity.context); // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE. Message _withArgumentsCandidateFoundIsDefaultConstructor(String name) { @@ -635,7 +636,7 @@ const Code codeConflictsWithTypeVariableCause = // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE. const MessageCode messageConflictsWithTypeVariableCause = const MessageCode( "ConflictsWithTypeVariableCause", - severity: Severity.error, + severity: Severity.context, message: r"""This is the type variable."""); // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE. @@ -709,6 +710,7 @@ const Code codeConstConstructorNonFinalFieldCause = // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE. const MessageCode messageConstConstructorNonFinalFieldCause = const MessageCode( "ConstConstructorNonFinalFieldCause", + severity: Severity.context, message: r"""Field isn't final, but constructor is 'const'."""); // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE. @@ -984,9 +986,8 @@ const Template // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE. const Code codeDeferredPrefixDuplicatedCause = const Code( - "DeferredPrefixDuplicatedCause", - templateDeferredPrefixDuplicatedCause, -); + "DeferredPrefixDuplicatedCause", templateDeferredPrefixDuplicatedCause, + severity: Severity.context); // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE. Message _withArgumentsDeferredPrefixDuplicatedCause(String name) { @@ -1292,9 +1293,8 @@ const Template // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE. const Code codeDuplicatedParameterNameCause = const Code( - "DuplicatedParameterNameCause", - templateDuplicatedParameterNameCause, -); + "DuplicatedParameterNameCause", templateDuplicatedParameterNameCause, + severity: Severity.context); // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE. Message _withArgumentsDuplicatedParameterNameCause(String name) { @@ -2083,7 +2083,7 @@ const Code const Code( "FinalInstanceVariableAlreadyInitializedCause", templateFinalInstanceVariableAlreadyInitializedCause, - severity: Severity.errorLegacyWarning); + severity: Severity.context); // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE. Message _withArgumentsFinalInstanceVariableAlreadyInitializedCause( @@ -2263,9 +2263,9 @@ const Template const Code codeIllegalMixinDueToConstructorsCause = const Code( - "IllegalMixinDueToConstructorsCause", - templateIllegalMixinDueToConstructorsCause, -); + "IllegalMixinDueToConstructorsCause", + templateIllegalMixinDueToConstructorsCause, + severity: Severity.context); // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE. Message _withArgumentsIllegalMixinDueToConstructorsCause(String name) { @@ -3867,9 +3867,8 @@ const Template templateOverriddenMethodCause = // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE. const Code codeOverriddenMethodCause = const Code( - "OverriddenMethodCause", - templateOverriddenMethodCause, -); + "OverriddenMethodCause", templateOverriddenMethodCause, + severity: Severity.context); // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE. Message _withArgumentsOverriddenMethodCause(String name) { @@ -4262,6 +4261,7 @@ const Code codePatchClassOrigin = messagePatchClassOrigin; // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE. const MessageCode messagePatchClassOrigin = const MessageCode( "PatchClassOrigin", + severity: Severity.context, message: r"""This is the origin class."""); // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE. @@ -4288,6 +4288,7 @@ const Code codePatchDeclarationOrigin = messagePatchDeclarationOrigin; // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE. const MessageCode messagePatchDeclarationOrigin = const MessageCode( "PatchDeclarationOrigin", + severity: Severity.context, message: r"""This is the origin declaration."""); // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE. @@ -5239,10 +5240,9 @@ const Template // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE. const Code codeTypeVariableDuplicatedNameCause = - const Code( - "TypeVariableDuplicatedNameCause", - templateTypeVariableDuplicatedNameCause, -); + const Code("TypeVariableDuplicatedNameCause", + templateTypeVariableDuplicatedNameCause, + severity: Severity.context); // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE. Message _withArgumentsTypeVariableDuplicatedNameCause(String name) { diff --git a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart index cef8f9a3a53..60992ba8411 100644 --- a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart +++ b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart @@ -3613,12 +3613,10 @@ class BodyBuilder extends ScopeListener fasta.templateFinalInstanceVariableAlreadyInitialized .withArguments(name), offset, - noLength); - addProblem( - fasta.templateFinalInstanceVariableAlreadyInitializedCause - .withArguments(name), - builder.charOffset, - noLength); + noLength, + context: fasta.templateFinalInstanceVariableAlreadyInitializedCause + .withArguments(name) + .withLocation(uri, builder.charOffset, noLength)); Builder constructor = library.loader.getDuplicatedFieldInitializerError(); return buildInvalidInitializer( @@ -3814,13 +3812,16 @@ class BodyBuilder extends ScopeListener } @override - void addCompileTimeError(Message message, int charOffset, int length) { - library.addCompileTimeError(message, charOffset, length, uri); + void addCompileTimeError(Message message, int charOffset, int length, + {LocatedMessage context}) { + library.addCompileTimeError(message, charOffset, length, uri, + context: context); } @override - void addProblem(Message message, int charOffset, int length) { - library.addProblem(message, charOffset, length, uri); + void addProblem(Message message, int charOffset, int length, + {LocatedMessage context}) { + library.addProblem(message, charOffset, length, uri, context: context); } @override @@ -3830,7 +3831,7 @@ class BodyBuilder extends ScopeListener // take two messages: one to use when a constant expression is // required and one to use otherwise. if (constantExpressionRequired) { - addCompileTimeError(message, charOffset, length); + addCompileTimeError(message, charOffset, length, context: context); } else { library.addProblem(message, charOffset, length, uri, context: context); } diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_library_builder.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_library_builder.dart index 4275e02a717..a7a31030370 100644 --- a/pkg/front_end/lib/src/fasta/kernel/kernel_library_builder.dart +++ b/pkg/front_end/lib/src/fasta/kernel/kernel_library_builder.dart @@ -233,12 +233,11 @@ class KernelLibraryBuilder TypeVariableBuilder existing = typeVariablesByName[tv.name]; if (existing != null) { addCompileTimeError(messageTypeVariableDuplicatedName, tv.charOffset, - tv.name.length, fileUri); - addCompileTimeError( - templateTypeVariableDuplicatedNameCause.withArguments(tv.name), - existing.charOffset, - existing.name.length, - fileUri); + tv.name.length, fileUri, + context: templateTypeVariableDuplicatedNameCause + .withArguments(tv.name) + .withLocation( + fileUri, existing.charOffset, existing.name.length)); } else { typeVariablesByName[tv.name] = tv; if (owner is ClassBuilder) { diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart index 1ea280242f2..af03b4ffa7d 100644 --- a/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart +++ b/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart @@ -643,6 +643,8 @@ class KernelTarget extends TargetImplementation { if (constructor.isConst && nonFinalFields.isNotEmpty) { builder.addCompileTimeError(messageConstConstructorNonFinalField, constructor.fileOffset, noLength); + // TODO(askesc): Put as context argument when multiple contexts + // are supported. for (Field field in nonFinalFields) { builder.addCompileTimeError( messageConstConstructorNonFinalFieldCause, diff --git a/pkg/front_end/lib/src/fasta/loader.dart b/pkg/front_end/lib/src/fasta/loader.dart index f623e97e1db..ad04feb4b30 100644 --- a/pkg/front_end/lib/src/fasta/loader.dart +++ b/pkg/front_end/lib/src/fasta/loader.dart @@ -248,7 +248,7 @@ severity: $severity target.context .report(message.withLocation(fileUri, charOffset, length), severity); if (context != null) { - target.context.report(context, severity); + target.context.report(context, Severity.context); } recordMessage(severity, message, charOffset, length, fileUri, context: context); diff --git a/pkg/front_end/lib/src/fasta/severity.dart b/pkg/front_end/lib/src/fasta/severity.dart index b0c4add09bb..02da07126ce 100644 --- a/pkg/front_end/lib/src/fasta/severity.dart +++ b/pkg/front_end/lib/src/fasta/severity.dart @@ -5,9 +5,10 @@ library fasta.severity; enum Severity { + context, error, + errorLegacyWarning, internalProblem, nit, warning, - errorLegacyWarning, } diff --git a/pkg/front_end/lib/src/fasta/source/outline_builder.dart b/pkg/front_end/lib/src/fasta/source/outline_builder.dart index 6839b705674..63659b2d712 100644 --- a/pkg/front_end/lib/src/fasta/source/outline_builder.dart +++ b/pkg/front_end/lib/src/fasta/source/outline_builder.dart @@ -15,6 +15,7 @@ import '../combinator.dart' show Combinator; import '../fasta_codes.dart' show Message, + LocatedMessage, messageExpectedBlockToSkip, messageInterpolationInUri, messageOperatorWithOptionalFormals, @@ -786,12 +787,11 @@ class OutlineBuilder extends UnhandledListener { addCompileTimeError( templateDuplicatedParameterName.withArguments(formals[1].name), formals[1].charOffset, - formals[1].name.length); - addCompileTimeError( - templateDuplicatedParameterNameCause - .withArguments(formals[1].name), - formals[0].charOffset, - formals[0].name.length); + formals[1].name.length, + context: templateDuplicatedParameterNameCause + .withArguments(formals[1].name) + .withLocation( + uri, formals[0].charOffset, formals[0].name.length)); } } else if (formals.length > 2) { Map seenNames = @@ -1102,12 +1102,15 @@ class OutlineBuilder extends UnhandledListener { } @override - void addCompileTimeError(Message message, int charOffset, int length) { - library.addCompileTimeError(message, charOffset, length, uri); + void addCompileTimeError(Message message, int charOffset, int length, + {LocatedMessage context}) { + library.addCompileTimeError(message, charOffset, length, uri, + context: context); } - void addProblem(Message message, int charOffset, int length) { - library.addProblem(message, charOffset, length, uri); + void addProblem(Message message, int charOffset, int length, + {LocatedMessage context}) { + library.addProblem(message, charOffset, length, uri, context: context); } /// Return the documentation comment for the entity that starts at the diff --git a/pkg/front_end/lib/src/fasta/source/source_library_builder.dart b/pkg/front_end/lib/src/fasta/source/source_library_builder.dart index 2c9001701fb..41a9791899d 100644 --- a/pkg/front_end/lib/src/fasta/source/source_library_builder.dart +++ b/pkg/front_end/lib/src/fasta/source/source_library_builder.dart @@ -444,12 +444,10 @@ abstract class SourceLibraryBuilder templateDeferredPrefixDuplicated.withArguments(name), deferred.charOffset, noLength, - fileUri); - addCompileTimeError( - templateDeferredPrefixDuplicatedCause.withArguments(name), - other.charOffset, - noLength, - fileUri); + fileUri, + context: templateDeferredPrefixDuplicatedCause + .withArguments(name) + .withLocation(fileUri, other.charOffset, noLength)); } return existing ..exportScope.merge(builder.exportScope, diff --git a/pkg/front_end/lib/src/fasta/source/source_loader.dart b/pkg/front_end/lib/src/fasta/source/source_loader.dart index 257088b66e6..534367c60d0 100644 --- a/pkg/front_end/lib/src/fasta/source/source_loader.dart +++ b/pkg/front_end/lib/src/fasta/source/source_loader.dart @@ -521,12 +521,11 @@ class SourceLoader extends Loader { templateIllegalMixinDueToConstructors .withArguments(builder.fullNameForErrors), cls.charOffset, - noLength); - builder.addCompileTimeError( - templateIllegalMixinDueToConstructorsCause - .withArguments(builder.fullNameForErrors), - constructory.charOffset, - noLength); + noLength, + context: templateIllegalMixinDueToConstructorsCause + .withArguments(builder.fullNameForErrors) + .withLocation(constructory.fileUri, + constructory.charOffset, noLength)); } } } @@ -782,6 +781,10 @@ class SourceLoader extends Loader { // Use a property name expressing that, in case it slips through. severityString = "unresolved severity"; break; + + case Severity.context: + severityString = "context"; + break; } instrumentation.record( fileUri, diff --git a/pkg/front_end/messages.yaml b/pkg/front_end/messages.yaml index a1e46fa233f..c67f1a39331 100644 --- a/pkg/front_end/messages.yaml +++ b/pkg/front_end/messages.yaml @@ -946,9 +946,11 @@ MethodNotFound: CandidateFound: template: "Found this candidate, but the arguments don't match." + severity: CONTEXT CandidateFoundIsDefaultConstructor: template: "The class '#name' has a constructor that takes no arguments." + severity: CONTEXT TooFewArgumentsToFunction: template: "Too few positional arguments to function: #count required, #count2 given." @@ -1283,6 +1285,7 @@ IllegalMixinDueToConstructors: IllegalMixinDueToConstructorsCause: template: "This constructor prevents using '#name' as a mixin." + severity: CONTEXT ConflictsWithConstructor: template: "Conflicts with constructor '#name'." @@ -1313,8 +1316,8 @@ ConflictsWithTypeVariable: severity: ERROR ConflictsWithTypeVariableCause: - template: "This is the type variable." - severity: ERROR + template: "This is the type variable." + severity: CONTEXT IllegalMixin: template: "The type '#name' can't be mixed in." @@ -1325,6 +1328,7 @@ OverrideTypeVariablesMismatch: OverriddenMethodCause: template: "This is the overriden method ('#name')." + severity: CONTEXT OverrideMismatchNamedParameter: template: "The method '#name' doesn't have the named parameter '#name2' of overriden method '#name3'." @@ -1369,6 +1373,7 @@ TypeVariableDuplicatedName: TypeVariableDuplicatedNameCause: template: "The other type variable named '#name'." + severity: CONTEXT TypeVariableSameNameAsEnclosing: template: "A type variable can't have the same name as its enclosing declaration." @@ -1538,6 +1543,7 @@ DeferredPrefixDuplicated: DeferredPrefixDuplicatedCause: template: "'#name' is used here." + severity: CONTEXT TypeArgumentsOnTypeVariable: template: "Can't use type arguments with type variable '#name'." @@ -1559,6 +1565,7 @@ DuplicatedParameterName: DuplicatedParameterNameCause: template: "Other parameter named '#name'." + severity: CONTEXT MemberWithSameNameAsClass: template: "A class member can't have the same name as the enclosing class." @@ -1675,7 +1682,7 @@ FinalInstanceVariableAlreadyInitialized: FinalInstanceVariableAlreadyInitializedCause: template: "'#name' was initialized here." - severity: ERROR_LEGACY_WARNING + severity: CONTEXT TypeVariableInStaticContext: template: "Type variables can't be used in static members." @@ -1709,6 +1716,7 @@ ConstConstructorNonFinalField: ConstConstructorNonFinalFieldCause: template: "Field isn't final, but constructor is 'const'." + severity: CONTEXT AccessError: template: "Access error: '#name'." @@ -1829,12 +1837,14 @@ PatchClassTypeVariablesMismatch: PatchClassOrigin: template: "This is the origin class." + severity: CONTEXT PatchDeclarationMismatch: template: "This patch doesn't match origin declaration." PatchDeclarationOrigin: template: "This is the origin declaration." + severity: CONTEXT PatchInjectionFailed: template: "Can't inject '#name' into '#uri'." diff --git a/pkg/front_end/tool/_fasta/generate_messages.dart b/pkg/front_end/tool/_fasta/generate_messages.dart index 485eaf50cdd..83d821c0303 100644 --- a/pkg/front_end/tool/_fasta/generate_messages.dart +++ b/pkg/front_end/tool/_fasta/generate_messages.dart @@ -16,6 +16,7 @@ Map severityEnumNames = { 'ERROR': 'error', 'ERROR_LEGACY_WARNING': 'errorLegacyWarning', 'INTERNAL_PROBLEM': 'internalProblem', + 'CONTEXT': 'context', }; main(List arguments) async { diff --git a/pkg/vm/bin/kernel_service.dart b/pkg/vm/bin/kernel_service.dart index b53b6bb5381..7423661a4de 100644 --- a/pkg/vm/bin/kernel_service.dart +++ b/pkg/vm/bin/kernel_service.dart @@ -102,6 +102,9 @@ abstract class Compiler { case Severity.warning: if (!suppressWarnings) stderr.writeln(formatted); break; + case Severity.context: + stderr.writeln(formatted); + break; } }; }