Skip to content

Commit 7130dd4

Browse files
johnniwinthercommit-bot@chromium.org
authored andcommitted
[cfe] Report error on non-void setter return type
This CL also adds fileUri/charOffset to all TypeBuilder's and renames Void/FutureOr/Never/Dynamic/BuiltInTypeBuilder to *TypeDeclarationBuilder so match their relation to TypeBuilder/TypeDeclarationBuilder. Closes #42962 Change-Id: Iee5102134574d24f748103282a37bb9a85a0ac2d Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/161165 Commit-Queue: Johnni Winther <[email protected]> Reviewed-by: Jens Johansen <[email protected]>
1 parent a7cb764 commit 7130dd4

File tree

55 files changed

+795
-154
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

55 files changed

+795
-154
lines changed

pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6607,6 +6607,27 @@ Message _withArgumentsNonSimpleBoundViaVariable(String name) {
66076607
arguments: {'name': name});
66086608
}
66096609

6610+
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
6611+
const Code<Null> codeNonVoidReturnOperator = messageNonVoidReturnOperator;
6612+
6613+
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
6614+
const MessageCode messageNonVoidReturnOperator = const MessageCode(
6615+
"NonVoidReturnOperator",
6616+
analyzerCodes: <String>["NON_VOID_RETURN_FOR_OPERATOR"],
6617+
message: r"""The return type of the operator []= must be 'void'.""",
6618+
tip: r"""Try changing the return type to 'void'.""");
6619+
6620+
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
6621+
const Code<Null> codeNonVoidReturnSetter = messageNonVoidReturnSetter;
6622+
6623+
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
6624+
const MessageCode messageNonVoidReturnSetter = const MessageCode(
6625+
"NonVoidReturnSetter",
6626+
analyzerCodes: <String>["NON_VOID_RETURN_FOR_SETTER"],
6627+
message: r"""The return type of the setter must be 'void' or absent.""",
6628+
tip:
6629+
r"""Try removing the return type, or define a method rather than a setter.""");
6630+
66106631
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
66116632
const Code<Null> codeNotAConstantExpression = messageNotAConstantExpression;
66126633

pkg/front_end/lib/src/fasta/builder/builtin_type_builder.dart renamed to pkg/front_end/lib/src/fasta/builder/builtin_type_declaration_builder.dart

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,11 @@ import 'type_builder.dart';
1212

1313
import 'type_declaration_builder.dart';
1414

15-
abstract class BuiltinTypeBuilder extends TypeDeclarationBuilderImpl {
15+
abstract class BuiltinTypeDeclarationBuilder
16+
extends TypeDeclarationBuilderImpl {
1617
final DartType type;
1718

18-
BuiltinTypeBuilder(
19+
BuiltinTypeDeclarationBuilder(
1920
String name, this.type, LibraryBuilder compilationUnit, int charOffset)
2021
: super(null, 0, name, compilationUnit, charOffset);
2122

@@ -30,5 +31,5 @@ abstract class BuiltinTypeBuilder extends TypeDeclarationBuilderImpl {
3031
return type.withDeclaredNullability(nullability);
3132
}
3233

33-
String get debugName => "BuiltinTypeBuilder";
34+
String get debugName => "BuiltinTypeDeclarationBuilder";
3435
}

pkg/front_end/lib/src/fasta/builder/class_builder.dart

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -84,14 +84,14 @@ import 'library_builder.dart';
8484
import 'member_builder.dart';
8585
import 'metadata_builder.dart';
8686
import 'named_type_builder.dart';
87-
import 'never_type_builder.dart';
87+
import 'never_type_declaration_builder.dart';
8888
import 'nullability_builder.dart';
8989
import 'procedure_builder.dart';
9090
import 'type_alias_builder.dart';
9191
import 'type_builder.dart';
9292
import 'type_declaration_builder.dart';
9393
import 'type_variable_builder.dart';
94-
import 'void_type_builder.dart';
94+
import 'void_type_declaration_builder.dart';
9595

9696
abstract class ClassBuilder implements DeclarationBuilder {
9797
/// The type variables declared on a class, extension or mixin declaration.
@@ -687,9 +687,9 @@ abstract class ClassBuilderImpl extends DeclarationBuilderImpl
687687
}
688688
// TODO(eernst): Should gather 'restricted supertype' checks in one place,
689689
// e.g., dynamic/int/String/Null and more are checked elsewhere.
690-
if (decl is VoidTypeBuilder) {
690+
if (decl is VoidTypeDeclarationBuilder) {
691691
fail(superClassType, messageExtendsVoid, aliasBuilder);
692-
} else if (decl is NeverTypeBuilder) {
692+
} else if (decl is NeverTypeDeclarationBuilder) {
693693
fail(superClassType, messageExtendsNever, aliasBuilder);
694694
} else if (decl is ClassBuilder) {
695695
superClass = decl;
@@ -737,9 +737,9 @@ abstract class ClassBuilderImpl extends DeclarationBuilderImpl
737737
}
738738
if (decl != superClass) {
739739
// TODO(eernst): Have all 'restricted supertype' checks in one place.
740-
if (decl is VoidTypeBuilder) {
740+
if (decl is VoidTypeDeclarationBuilder) {
741741
fail(type, messageImplementsVoid, aliasBuilder);
742-
} else if (decl is NeverTypeBuilder) {
742+
} else if (decl is NeverTypeDeclarationBuilder) {
743743
fail(type, messageImplementsNever, aliasBuilder);
744744
}
745745
}

pkg/front_end/lib/src/fasta/builder/dynamic_type_builder.dart renamed to pkg/front_end/lib/src/fasta/builder/dynamic_type_declaration_builder.dart

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,13 @@ library fasta.dynamic_type_builder;
66

77
import 'package:kernel/ast.dart' show DartType;
88

9-
import 'builtin_type_builder.dart';
9+
import 'builtin_type_declaration_builder.dart';
1010
import 'library_builder.dart';
1111

12-
class DynamicTypeBuilder extends BuiltinTypeBuilder {
13-
DynamicTypeBuilder(
12+
class DynamicTypeDeclarationBuilder extends BuiltinTypeDeclarationBuilder {
13+
DynamicTypeDeclarationBuilder(
1414
DartType type, LibraryBuilder compilationUnit, int charOffset)
1515
: super("dynamic", type, compilationUnit, charOffset);
1616

17-
String get debugName => "DynamicTypeBuilder";
17+
String get debugName => "DynamicTypeDeclarationBuilder";
1818
}

pkg/front_end/lib/src/fasta/builder/enum_builder.dart

Lines changed: 27 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -128,19 +128,39 @@ class EnumBuilder extends SourceClassBuilder {
128128
assert(enumConstantInfos == null || enumConstantInfos.isNotEmpty);
129129
// TODO(ahe): These types shouldn't be looked up in scope, they come
130130
// directly from dart:core.
131-
TypeBuilder intType =
132-
new NamedTypeBuilder("int", const NullabilityBuilder.omitted(), null);
131+
TypeBuilder intType = new NamedTypeBuilder(
132+
"int",
133+
const NullabilityBuilder.omitted(),
134+
/* arguments = */ null,
135+
/* fileUri = */ null,
136+
/* charOffset = */ null);
133137
TypeBuilder stringType = new NamedTypeBuilder(
134-
"String", const NullabilityBuilder.omitted(), null);
138+
"String",
139+
const NullabilityBuilder.omitted(),
140+
/* arguments = */ null,
141+
/* fileUri = */ null,
142+
/* charOffset = */ null);
135143
NamedTypeBuilder objectType = new NamedTypeBuilder(
136-
"Object", const NullabilityBuilder.omitted(), null);
144+
"Object",
145+
const NullabilityBuilder.omitted(),
146+
/* arguments = */ null,
147+
/* fileUri = */ null,
148+
/* charOffset = */ null);
137149
Class cls = new Class(name: name, reference: referencesFrom?.reference);
138150
Map<String, MemberBuilder> members = <String, MemberBuilder>{};
139151
Map<String, MemberBuilder> constructors = <String, MemberBuilder>{};
140-
NamedTypeBuilder selfType =
141-
new NamedTypeBuilder(name, const NullabilityBuilder.omitted(), null);
152+
NamedTypeBuilder selfType = new NamedTypeBuilder(
153+
name,
154+
const NullabilityBuilder.omitted(),
155+
/* arguments = */ null,
156+
/* fileUri = */ null,
157+
/* charOffset = */ null);
142158
TypeBuilder listType = new NamedTypeBuilder(
143-
"List", const NullabilityBuilder.omitted(), <TypeBuilder>[selfType]);
159+
"List",
160+
const NullabilityBuilder.omitted(),
161+
<TypeBuilder>[selfType],
162+
/* fileUri = */ null,
163+
/* charOffset = */ null);
144164

145165
/// metadata class E {
146166
/// final int index;

pkg/front_end/lib/src/fasta/builder/fixed_type_builder.dart

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,10 @@ import 'type_builder.dart';
1111

1212
class FixedTypeBuilder extends TypeBuilder {
1313
final DartType type;
14+
final Uri fileUri;
15+
final int charOffset;
1416

15-
const FixedTypeBuilder(this.type);
17+
const FixedTypeBuilder(this.type, this.fileUri, this.charOffset);
1618

1719
TypeBuilder clone(List<TypeBuilder> newTypes) => this;
1820

@@ -23,6 +25,8 @@ class FixedTypeBuilder extends TypeBuilder {
2325

2426
String get debugName => 'FixedTypeBuilder';
2527

28+
bool get isVoidType => type is VoidType;
29+
2630
StringBuffer printOn(StringBuffer buffer) {
2731
buffer.write('type=${type}');
2832
return buffer;

pkg/front_end/lib/src/fasta/builder/function_type_builder.dart

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,16 +27,20 @@ class FunctionTypeBuilder extends TypeBuilder {
2727
final List<TypeVariableBuilder> typeVariables;
2828
final List<FormalParameterBuilder> formals;
2929
final NullabilityBuilder nullabilityBuilder;
30+
final Uri fileUri;
31+
final int charOffset;
3032

3133
FunctionTypeBuilder(this.returnType, this.typeVariables, this.formals,
32-
this.nullabilityBuilder);
34+
this.nullabilityBuilder, this.fileUri, this.charOffset);
3335

3436
@override
3537
String get name => null;
3638

3739
@override
3840
String get debugName => "Function";
3941

42+
bool get isVoidType => false;
43+
4044
@override
4145
StringBuffer printOn(StringBuffer buffer) {
4246
if (typeVariables != null) {
@@ -143,14 +147,16 @@ class FunctionTypeBuilder extends TypeBuilder {
143147
returnType?.clone(newTypes),
144148
clonedTypeVariables,
145149
clonedFormals,
146-
nullabilityBuilder);
150+
nullabilityBuilder,
151+
fileUri,
152+
charOffset);
147153
newTypes.add(newType);
148154
return newType;
149155
}
150156

151157
FunctionTypeBuilder withNullabilityBuilder(
152158
NullabilityBuilder nullabilityBuilder) {
153-
return new FunctionTypeBuilder(
154-
returnType, typeVariables, formals, nullabilityBuilder);
159+
return new FunctionTypeBuilder(returnType, typeVariables, formals,
160+
nullabilityBuilder, fileUri, charOffset);
155161
}
156162
}

pkg/front_end/lib/src/fasta/builder/future_or_type_builder.dart renamed to pkg/front_end/lib/src/fasta/builder/future_or_type_declaration_builder.dart

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,17 @@ library fasta.future_or_type_builder;
66

77
import 'package:kernel/ast.dart' show DartType, FutureOrType, Nullability;
88

9-
import 'builtin_type_builder.dart';
9+
import 'builtin_type_declaration_builder.dart';
1010
import 'library_builder.dart';
1111
import 'nullability_builder.dart';
1212
import 'type_builder.dart';
1313

14-
class FutureOrTypeBuilder extends BuiltinTypeBuilder {
15-
FutureOrTypeBuilder(
14+
class FutureOrTypeDeclarationBuilder extends BuiltinTypeDeclarationBuilder {
15+
FutureOrTypeDeclarationBuilder(
1616
DartType type, LibraryBuilder compilationUnit, int charOffset)
1717
: super("FutureOr", type, compilationUnit, charOffset);
1818

19-
String get debugName => "FutureOrTypeBuilder";
19+
String get debugName => "FutureOrTypeDeclarationBuilder";
2020

2121
DartType buildType(LibraryBuilder library,
2222
NullabilityBuilder nullabilityBuilder, List<TypeBuilder> arguments,

pkg/front_end/lib/src/fasta/builder/mixin_application_builder.dart

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,14 @@ import 'type_variable_builder.dart';
1616
class MixinApplicationBuilder extends TypeBuilder {
1717
final TypeBuilder supertype;
1818
final List<TypeBuilder> mixins;
19+
final Uri fileUri;
20+
final int charOffset;
1921
Supertype builtType;
2022

2123
List<TypeVariableBuilder> typeVariables;
2224

23-
MixinApplicationBuilder(this.supertype, this.mixins);
25+
MixinApplicationBuilder(
26+
this.supertype, this.mixins, this.fileUri, this.charOffset);
2427

2528
String get name => null;
2629

@@ -30,6 +33,8 @@ class MixinApplicationBuilder extends TypeBuilder {
3033

3134
String get debugName => "MixinApplicationBuilder";
3235

36+
bool get isVoidType => false;
37+
3338
StringBuffer printOn(StringBuffer buffer) {
3439
buffer.write(supertype);
3540
buffer.write(" with ");

pkg/front_end/lib/src/fasta/builder/named_type_builder.dart

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ import '../problems.dart' show unhandled;
4747
import '../scope.dart';
4848

4949
import 'builder.dart';
50-
import 'builtin_type_builder.dart';
50+
import 'builtin_type_declaration_builder.dart';
5151
import 'class_builder.dart';
5252
import 'invalid_type_declaration_builder.dart';
5353
import 'library_builder.dart';
@@ -57,6 +57,7 @@ import 'type_alias_builder.dart';
5757
import 'type_builder.dart';
5858
import 'type_declaration_builder.dart';
5959
import 'type_variable_builder.dart';
60+
import 'void_type_declaration_builder.dart';
6061

6162
class NamedTypeBuilder extends TypeBuilder {
6263
final Object name;
@@ -65,20 +66,25 @@ class NamedTypeBuilder extends TypeBuilder {
6566

6667
final NullabilityBuilder nullabilityBuilder;
6768

69+
@override
6870
final Uri fileUri;
71+
72+
@override
6973
final int charOffset;
7074

7175
@override
7276
TypeDeclarationBuilder declaration;
7377

7478
NamedTypeBuilder(this.name, this.nullabilityBuilder, this.arguments,
75-
[this.fileUri, this.charOffset]);
79+
this.fileUri, this.charOffset);
7680

7781
NamedTypeBuilder.fromTypeDeclarationBuilder(
7882
this.declaration, this.nullabilityBuilder,
7983
[this.arguments, this.fileUri, this.charOffset])
8084
: this.name = declaration.name;
8185

86+
bool get isVoidType => declaration is VoidTypeDeclarationBuilder;
87+
8288
@override
8389
void bind(TypeDeclarationBuilder declaration) {
8490
this.declaration = declaration?.origin;
@@ -344,8 +350,8 @@ class NamedTypeBuilder extends TypeBuilder {
344350
i++;
345351
}
346352
if (arguments != null) {
347-
NamedTypeBuilder result =
348-
new NamedTypeBuilder(name, nullabilityBuilder, arguments);
353+
NamedTypeBuilder result = new NamedTypeBuilder(
354+
name, nullabilityBuilder, arguments, fileUri, charOffset);
349355
if (declaration != null) {
350356
result.bind(declaration);
351357
} else {
@@ -365,9 +371,9 @@ class NamedTypeBuilder extends TypeBuilder {
365371
clonedArguments[i] = arguments[i].clone(newTypes);
366372
}
367373
}
368-
NamedTypeBuilder newType =
369-
new NamedTypeBuilder(name, nullabilityBuilder, clonedArguments);
370-
if (declaration is BuiltinTypeBuilder) {
374+
NamedTypeBuilder newType = new NamedTypeBuilder(
375+
name, nullabilityBuilder, clonedArguments, fileUri, charOffset);
376+
if (declaration is BuiltinTypeDeclarationBuilder) {
371377
newType.declaration = declaration;
372378
} else {
373379
newTypes.add(newType);
@@ -377,7 +383,8 @@ class NamedTypeBuilder extends TypeBuilder {
377383

378384
NamedTypeBuilder withNullabilityBuilder(
379385
NullabilityBuilder nullabilityBuilder) {
380-
return new NamedTypeBuilder(name, nullabilityBuilder, arguments)
386+
return new NamedTypeBuilder(
387+
name, nullabilityBuilder, arguments, fileUri, charOffset)
381388
..bind(declaration);
382389
}
383390
}

0 commit comments

Comments
 (0)