mirror of
https://github.com/dart-lang/sdk
synced 2024-09-18 21:01:20 +00:00
[cfe] Avoid synthesized locations for reporting conflict errors
Part of https://github.com/dart-lang/sdk/issues/47453 Change-Id: I51277f2c548b4632b9b9870b522f19a9e8c77498 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/239680 Reviewed-by: Johnni Winther <johnniwinther@google.com> Commit-Queue: Chloe Stefantsova <cstefantsova@google.com>
This commit is contained in:
parent
ef413b95e0
commit
d2b0a372ab
|
@ -5641,6 +5641,33 @@ Message _withArgumentsInputFileNotFound(Uri uri_) {
|
|||
arguments: {'uri': uri_});
|
||||
}
|
||||
|
||||
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
|
||||
const Template<
|
||||
Message Function(
|
||||
String
|
||||
name)> templateInstanceAndSynthesizedStaticConflict = const Template<
|
||||
Message Function(String name)>(
|
||||
problemMessageTemplate:
|
||||
r"""This instance member conflicts with the synthesized static member called '#name'.""",
|
||||
withArguments: _withArgumentsInstanceAndSynthesizedStaticConflict);
|
||||
|
||||
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
|
||||
const Code<Message Function(String name)>
|
||||
codeInstanceAndSynthesizedStaticConflict =
|
||||
const Code<Message Function(String name)>(
|
||||
"InstanceAndSynthesizedStaticConflict",
|
||||
analyzerCodes: <String>["CONFLICTING_STATIC_AND_INSTANCE"]);
|
||||
|
||||
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
|
||||
Message _withArgumentsInstanceAndSynthesizedStaticConflict(String name) {
|
||||
if (name.isEmpty) throw 'No name provided';
|
||||
name = demangleMixinApplicationName(name);
|
||||
return new Message(codeInstanceAndSynthesizedStaticConflict,
|
||||
problemMessage:
|
||||
"""This instance member conflicts with the synthesized static member called '${name}'.""",
|
||||
arguments: {'name': name});
|
||||
}
|
||||
|
||||
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
|
||||
const Template<Message Function(int count, int count2)>
|
||||
templateInstantiationTooFewArguments =
|
||||
|
|
|
@ -37,6 +37,7 @@ import '../../messages.dart'
|
|||
templateCantInferTypeDueToNoCombinedSignature,
|
||||
templateDuplicatedDeclaration,
|
||||
templateDuplicatedDeclarationCause,
|
||||
templateInstanceAndSynthesizedStaticConflict,
|
||||
templateMissingImplementationCause,
|
||||
templateMissingImplementationNotAbstract;
|
||||
import '../../names.dart' show noSuchMethodName;
|
||||
|
@ -531,12 +532,23 @@ class ClassMembersNodeBuilder {
|
|||
staticMember = b;
|
||||
instanceMember = a;
|
||||
}
|
||||
classBuilder.libraryBuilder.addProblem(messageStaticAndInstanceConflict,
|
||||
staticMember.charOffset, name.length, staticMember.fileUri,
|
||||
context: <LocatedMessage>[
|
||||
messageStaticAndInstanceConflictCause.withLocation(
|
||||
instanceMember.fileUri, instanceMember.charOffset, name.length)
|
||||
]);
|
||||
if (!staticMember.isSynthesized) {
|
||||
classBuilder.libraryBuilder.addProblem(messageStaticAndInstanceConflict,
|
||||
staticMember.charOffset, name.length, staticMember.fileUri,
|
||||
context: <LocatedMessage>[
|
||||
messageStaticAndInstanceConflictCause.withLocation(
|
||||
instanceMember.fileUri,
|
||||
instanceMember.charOffset,
|
||||
name.length)
|
||||
]);
|
||||
} else {
|
||||
classBuilder.libraryBuilder.addProblem(
|
||||
templateInstanceAndSynthesizedStaticConflict
|
||||
.withArguments(staticMember.name.text),
|
||||
instanceMember.charOffset,
|
||||
name.length,
|
||||
instanceMember.fileUri);
|
||||
}
|
||||
} else {
|
||||
// This message can be reported twice (when merging localMembers with
|
||||
// classSetters, or localSetters with classMembers). By ensuring that
|
||||
|
|
|
@ -284,7 +284,8 @@ class SourceEnumBuilder extends SourceClassBuilder {
|
|||
staticFieldNameScheme,
|
||||
fieldReference: valuesFieldReference,
|
||||
fieldGetterReference: valuesGetterReference,
|
||||
fieldSetterReference: valuesSetterReference);
|
||||
fieldSetterReference: valuesSetterReference,
|
||||
isSynthesized: true);
|
||||
members["values"] = valuesBuilder;
|
||||
|
||||
DeclaredSourceConstructorBuilder? synthesizedDefaultConstructorBuilder;
|
||||
|
|
|
@ -70,6 +70,8 @@ class SourceFieldBuilder extends SourceMemberBuilderImpl
|
|||
@override
|
||||
final bool isTopLevel;
|
||||
|
||||
final bool isSynthesized;
|
||||
|
||||
SourceFieldBuilder(
|
||||
this.metadata,
|
||||
this.type,
|
||||
|
@ -88,7 +90,8 @@ class SourceFieldBuilder extends SourceMemberBuilderImpl
|
|||
Reference? lateIsSetSetterReference,
|
||||
Reference? lateGetterReference,
|
||||
Reference? lateSetterReference,
|
||||
Token? constInitializerToken})
|
||||
Token? constInitializerToken,
|
||||
this.isSynthesized = false})
|
||||
: _constInitializerToken = constInitializerToken,
|
||||
super(libraryBuilder, charOffset) {
|
||||
bool isInstanceMember = fieldNameScheme.isInstanceMember;
|
||||
|
@ -757,6 +760,9 @@ class SourceFieldMember extends BuilderClassMember {
|
|||
@override
|
||||
bool get isProperty => true;
|
||||
|
||||
@override
|
||||
bool get isSynthesized => memberBuilder.isSynthesized;
|
||||
|
||||
@override
|
||||
bool isSameDeclaration(ClassMember other) {
|
||||
return other is SourceFieldMember && memberBuilder == other.memberBuilder;
|
||||
|
|
|
@ -475,6 +475,7 @@ InitializerForStaticField/example: Fail
|
|||
InitializerOutsideConstructor/example: Fail
|
||||
InputFileNotFound/analyzerCode: Fail
|
||||
InputFileNotFound/example: Fail
|
||||
InstanceAndSynthesizedStaticConflict/example: Fail
|
||||
InstantiationNonGenericFunctionType/analyzerCode: Fail
|
||||
InstantiationTooFewArguments/analyzerCode: Fail
|
||||
InstantiationTooManyArguments/analyzerCode: Fail
|
||||
|
|
|
@ -4597,6 +4597,10 @@ StaticAndInstanceConflictCause:
|
|||
problemMessage: "This is the instance member."
|
||||
severity: CONTEXT
|
||||
|
||||
InstanceAndSynthesizedStaticConflict:
|
||||
problemMessage: "This instance member conflicts with the synthesized static member called '#name'."
|
||||
analyzerCode: CONFLICTING_STATIC_AND_INSTANCE
|
||||
|
||||
FfiAbiSpecificIntegerInvalid:
|
||||
# Used by dart:ffi
|
||||
problemMessage: "Classes extending 'AbiSpecificInteger' must have exactly one const constructor, no other members, and no type arguments."
|
||||
|
|
|
@ -0,0 +1,12 @@
|
|||
// Copyright (c) 2022, 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.
|
||||
|
||||
enum E {
|
||||
e1,
|
||||
e2;
|
||||
|
||||
void set values(List<E> val) {} // Error.
|
||||
}
|
||||
|
||||
main() {}
|
|
@ -0,0 +1,40 @@
|
|||
library /*isNonNullableByDefault*/;
|
||||
//
|
||||
// Problems in library:
|
||||
//
|
||||
// pkg/front_end/testcases/enhanced_enums/member_values_conflicts.dart:9:12: Error: This instance member conflicts with the synthesized static member called 'values'.
|
||||
// void set values(List<E> val) {} // Error.
|
||||
// ^^^^^^
|
||||
//
|
||||
import self as self;
|
||||
import "dart:core" as core;
|
||||
|
||||
class E extends core::_Enum /*isEnum*/ {
|
||||
static const field core::List<self::E> values = #C7;
|
||||
static const field self::E e1 = #C3;
|
||||
static const field self::E e2 = #C6;
|
||||
const constructor •(core::int index, core::String name) → self::E
|
||||
: super core::_Enum::•(index, name)
|
||||
;
|
||||
method toString() → core::String
|
||||
return "E.${this.{core::_Enum::_name}{core::String}}";
|
||||
set values(core::List<self::E> val) → void {}
|
||||
}
|
||||
static method main() → dynamic {}
|
||||
|
||||
constants {
|
||||
#C1 = 0
|
||||
#C2 = "e1"
|
||||
#C3 = self::E {index:#C1, _name:#C2}
|
||||
#C4 = 1
|
||||
#C5 = "e2"
|
||||
#C6 = self::E {index:#C4, _name:#C5}
|
||||
#C7 = <self::E>[#C3, #C6]
|
||||
}
|
||||
|
||||
|
||||
Constructor coverage from constants:
|
||||
org-dartlang-testcase:///member_values_conflicts.dart:
|
||||
- E. (from org-dartlang-testcase:///member_values_conflicts.dart:5:6)
|
||||
- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
|
||||
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
|
|
@ -0,0 +1,40 @@
|
|||
library /*isNonNullableByDefault*/;
|
||||
//
|
||||
// Problems in library:
|
||||
//
|
||||
// pkg/front_end/testcases/enhanced_enums/member_values_conflicts.dart:9:12: Error: This instance member conflicts with the synthesized static member called 'values'.
|
||||
// void set values(List<E> val) {} // Error.
|
||||
// ^^^^^^
|
||||
//
|
||||
import self as self;
|
||||
import "dart:core" as core;
|
||||
|
||||
class E extends core::_Enum /*isEnum*/ {
|
||||
static const field core::List<self::E> values = #C7;
|
||||
static const field self::E e1 = #C3;
|
||||
static const field self::E e2 = #C6;
|
||||
const constructor •(core::int index, core::String name) → self::E
|
||||
: super core::_Enum::•(index, name)
|
||||
;
|
||||
method toString() → core::String
|
||||
return "E.${this.{core::_Enum::_name}{core::String}}";
|
||||
set values(core::List<self::E> val) → void {}
|
||||
}
|
||||
static method main() → dynamic {}
|
||||
|
||||
constants {
|
||||
#C1 = 0
|
||||
#C2 = "e1"
|
||||
#C3 = self::E {index:#C1, _name:#C2}
|
||||
#C4 = 1
|
||||
#C5 = "e2"
|
||||
#C6 = self::E {index:#C4, _name:#C5}
|
||||
#C7 = <self::E>[#C3, #C6]
|
||||
}
|
||||
|
||||
|
||||
Constructor coverage from constants:
|
||||
org-dartlang-testcase:///member_values_conflicts.dart:
|
||||
- E. (from org-dartlang-testcase:///member_values_conflicts.dart:5:6)
|
||||
- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
|
||||
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
|
|
@ -0,0 +1,8 @@
|
|||
enum E {
|
||||
e1,
|
||||
e2;
|
||||
|
||||
void set values(List<E> val) {}
|
||||
}
|
||||
|
||||
main() {}
|
|
@ -0,0 +1,8 @@
|
|||
enum E {
|
||||
e1,
|
||||
e2;
|
||||
|
||||
void set values(List<E> val) {}
|
||||
}
|
||||
|
||||
main() {}
|
|
@ -0,0 +1,40 @@
|
|||
library /*isNonNullableByDefault*/;
|
||||
//
|
||||
// Problems in library:
|
||||
//
|
||||
// pkg/front_end/testcases/enhanced_enums/member_values_conflicts.dart:9:12: Error: This instance member conflicts with the synthesized static member called 'values'.
|
||||
// void set values(List<E> val) {} // Error.
|
||||
// ^^^^^^
|
||||
//
|
||||
import self as self;
|
||||
import "dart:core" as core;
|
||||
|
||||
class E extends core::_Enum /*isEnum*/ {
|
||||
static const field core::List<self::E> values = #C7;
|
||||
static const field self::E e1 = #C3;
|
||||
static const field self::E e2 = #C6;
|
||||
const constructor •(core::int index, core::String name) → self::E
|
||||
: super core::_Enum::•(index, name)
|
||||
;
|
||||
method toString() → core::String
|
||||
return "E.${this.{core::_Enum::_name}{core::String}}";
|
||||
set values(core::List<self::E> val) → void {}
|
||||
}
|
||||
static method main() → dynamic {}
|
||||
|
||||
constants {
|
||||
#C1 = 0
|
||||
#C2 = "e1"
|
||||
#C3 = self::E {index:#C1, _name:#C2}
|
||||
#C4 = 1
|
||||
#C5 = "e2"
|
||||
#C6 = self::E {index:#C4, _name:#C5}
|
||||
#C7 = <self::E*>[#C3, #C6]
|
||||
}
|
||||
|
||||
|
||||
Constructor coverage from constants:
|
||||
org-dartlang-testcase:///member_values_conflicts.dart:
|
||||
- E. (from org-dartlang-testcase:///member_values_conflicts.dart:5:6)
|
||||
- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
|
||||
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
|
|
@ -0,0 +1,40 @@
|
|||
library /*isNonNullableByDefault*/;
|
||||
//
|
||||
// Problems in library:
|
||||
//
|
||||
// pkg/front_end/testcases/enhanced_enums/member_values_conflicts.dart:9:12: Error: This instance member conflicts with the synthesized static member called 'values'.
|
||||
// void set values(List<E> val) {} // Error.
|
||||
// ^^^^^^
|
||||
//
|
||||
import self as self;
|
||||
import "dart:core" as core;
|
||||
|
||||
class E extends core::_Enum /*isEnum*/ {
|
||||
static const field core::List<self::E> values = #C7;
|
||||
static const field self::E e1 = #C3;
|
||||
static const field self::E e2 = #C6;
|
||||
const constructor •(core::int index, core::String name) → self::E
|
||||
: super core::_Enum::•(index, name)
|
||||
;
|
||||
method toString() → core::String
|
||||
return "E.${this.{core::_Enum::_name}{core::String}}";
|
||||
set values(core::List<self::E> val) → void {}
|
||||
}
|
||||
static method main() → dynamic {}
|
||||
|
||||
constants {
|
||||
#C1 = 0
|
||||
#C2 = "e1"
|
||||
#C3 = self::E {index:#C1, _name:#C2}
|
||||
#C4 = 1
|
||||
#C5 = "e2"
|
||||
#C6 = self::E {index:#C4, _name:#C5}
|
||||
#C7 = <self::E*>[#C3, #C6]
|
||||
}
|
||||
|
||||
|
||||
Constructor coverage from constants:
|
||||
org-dartlang-testcase:///member_values_conflicts.dart:
|
||||
- E. (from org-dartlang-testcase:///member_values_conflicts.dart:5:6)
|
||||
- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
|
||||
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
|
|
@ -0,0 +1,32 @@
|
|||
library /*isNonNullableByDefault*/;
|
||||
//
|
||||
// Problems in library:
|
||||
//
|
||||
// pkg/front_end/testcases/enhanced_enums/member_values_conflicts.dart:9:12: Error: This instance member conflicts with the synthesized static member called 'values'.
|
||||
// void set values(List<E> val) {} // Error.
|
||||
// ^^^^^^
|
||||
//
|
||||
import self as self;
|
||||
import "dart:core" as core;
|
||||
|
||||
class E extends core::_Enum /*isEnum*/ {
|
||||
static const field core::List<self::E> values = const <self::E>[self::E::e1, self::E::e2];
|
||||
static const field self::E e1 = const self::E::•(0, "e1");
|
||||
static const field self::E e2 = const self::E::•(1, "e2");
|
||||
const constructor •(core::int index, core::String name) → self::E
|
||||
: super core::_Enum::•(index, name)
|
||||
;
|
||||
method toString() → core::String
|
||||
return "E.${this.{core::_Enum::_name}{core::String}}";
|
||||
set values(core::List<self::E> val) → void
|
||||
;
|
||||
}
|
||||
static method main() → dynamic
|
||||
;
|
||||
|
||||
|
||||
Extra constant evaluation status:
|
||||
Evaluated: ListLiteral @ org-dartlang-testcase:///member_values_conflicts.dart:5:6 -> ListConstant(const <E*>[const E{_Enum.index: 0, _Enum._name: "e1"}, const E{_Enum.index: 1, _Enum._name: "e2"}])
|
||||
Evaluated: ConstructorInvocation @ org-dartlang-testcase:///member_values_conflicts.dart:6:3 -> InstanceConstant(const E{_Enum.index: 0, _Enum._name: "e1"})
|
||||
Evaluated: ConstructorInvocation @ org-dartlang-testcase:///member_values_conflicts.dart:7:3 -> InstanceConstant(const E{_Enum.index: 1, _Enum._name: "e2"})
|
||||
Extra constant evaluation: evaluated: 8, effectively constant: 3
|
|
@ -0,0 +1,40 @@
|
|||
library /*isNonNullableByDefault*/;
|
||||
//
|
||||
// Problems in library:
|
||||
//
|
||||
// pkg/front_end/testcases/enhanced_enums/member_values_conflicts.dart:9:12: Error: This instance member conflicts with the synthesized static member called 'values'.
|
||||
// void set values(List<E> val) {} // Error.
|
||||
// ^^^^^^
|
||||
//
|
||||
import self as self;
|
||||
import "dart:core" as core;
|
||||
|
||||
class E extends core::_Enum /*isEnum*/ {
|
||||
static const field core::List<self::E> values = #C7;
|
||||
static const field self::E e1 = #C3;
|
||||
static const field self::E e2 = #C6;
|
||||
const constructor •(core::int index, core::String name) → self::E
|
||||
: super core::_Enum::•(index, name)
|
||||
;
|
||||
method toString() → core::String
|
||||
return "E.${this.{core::_Enum::_name}{core::String}}";
|
||||
set values(core::List<self::E> val) → void {}
|
||||
}
|
||||
static method main() → dynamic {}
|
||||
|
||||
constants {
|
||||
#C1 = 0
|
||||
#C2 = "e1"
|
||||
#C3 = self::E {index:#C1, _name:#C2}
|
||||
#C4 = 1
|
||||
#C5 = "e2"
|
||||
#C6 = self::E {index:#C4, _name:#C5}
|
||||
#C7 = <self::E*>[#C3, #C6]
|
||||
}
|
||||
|
||||
|
||||
Constructor coverage from constants:
|
||||
org-dartlang-testcase:///member_values_conflicts.dart:
|
||||
- E. (from org-dartlang-testcase:///member_values_conflicts.dart:5:6)
|
||||
- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
|
||||
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
|
Loading…
Reference in a new issue