OLD | NEW |
1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 library fasta.kernel_class_builder; | 5 library fasta.kernel_class_builder; |
6 | 6 |
7 import 'package:front_end/src/fasta/kernel/kernel_shadow_ast.dart' | |
8 show KernelMember; | |
9 | |
10 import 'package:kernel/ast.dart' | 7 import 'package:kernel/ast.dart' |
11 show | 8 show |
12 Class, | 9 Class, |
13 Constructor, | 10 Constructor, |
14 DartType, | 11 DartType, |
15 Expression, | 12 Expression, |
16 Field, | 13 Field, |
17 FunctionNode, | 14 FunctionNode, |
18 InterfaceType, | 15 InterfaceType, |
19 ListLiteral, | 16 ListLiteral, |
20 Member, | 17 Member, |
21 Name, | 18 Name, |
22 Procedure, | 19 Procedure, |
23 ProcedureKind, | 20 ProcedureKind, |
24 StaticGet, | 21 StaticGet, |
25 Supertype, | 22 Supertype, |
26 VariableDeclaration; | 23 VariableDeclaration; |
27 | 24 |
28 import 'package:kernel/class_hierarchy.dart' show ClassHierarchy; | 25 import 'package:kernel/class_hierarchy.dart' show ClassHierarchy; |
29 | 26 |
30 import '../deprecated_problems.dart' show deprecated_internalProblem; | 27 import '../dill/dill_member_builder.dart' show DillMemberBuilder; |
31 | 28 |
32 import '../fasta_codes.dart' show templateRedirectionTargetNotFound; | 29 import '../fasta_codes.dart' show templateRedirectionTargetNotFound; |
33 | 30 |
34 import '../dill/dill_member_builder.dart' show DillMemberBuilder; | 31 import '../problems.dart' show unhandled, unimplemented; |
35 | 32 |
36 import 'kernel_builder.dart' | 33 import 'kernel_builder.dart' |
37 show | 34 show |
38 Builder, | 35 Builder, |
39 ClassBuilder, | 36 ClassBuilder, |
40 ConstructorReferenceBuilder, | 37 ConstructorReferenceBuilder, |
41 KernelLibraryBuilder, | 38 KernelLibraryBuilder, |
42 KernelProcedureBuilder, | 39 KernelProcedureBuilder, |
43 KernelTypeBuilder, | 40 KernelTypeBuilder, |
44 LibraryBuilder, | 41 LibraryBuilder, |
45 MemberBuilder, | 42 MemberBuilder, |
46 MetadataBuilder, | 43 MetadataBuilder, |
47 ProcedureBuilder, | 44 ProcedureBuilder, |
48 Scope, | 45 Scope, |
49 TypeVariableBuilder, | 46 TypeVariableBuilder, |
50 computeDefaultTypeArguments; | 47 computeDefaultTypeArguments; |
51 | 48 |
| 49 import 'kernel_shadow_ast.dart' show KernelMember; |
| 50 |
52 import 'redirecting_factory_body.dart' show RedirectingFactoryBody; | 51 import 'redirecting_factory_body.dart' show RedirectingFactoryBody; |
53 | 52 |
54 abstract class KernelClassBuilder | 53 abstract class KernelClassBuilder |
55 extends ClassBuilder<KernelTypeBuilder, InterfaceType> { | 54 extends ClassBuilder<KernelTypeBuilder, InterfaceType> { |
56 KernelClassBuilder( | 55 KernelClassBuilder( |
57 List<MetadataBuilder> metadata, | 56 List<MetadataBuilder> metadata, |
58 int modifiers, | 57 int modifiers, |
59 String name, | 58 String name, |
60 List<TypeVariableBuilder> typeVariables, | 59 List<TypeVariableBuilder> typeVariables, |
61 KernelTypeBuilder supertype, | 60 KernelTypeBuilder supertype, |
(...skipping 15 matching lines...) Expand all Loading... |
77 assert(arguments == null || cls.typeParameters.length == arguments.length); | 76 assert(arguments == null || cls.typeParameters.length == arguments.length); |
78 return arguments == null ? cls.rawType : new InterfaceType(cls, arguments); | 77 return arguments == null ? cls.rawType : new InterfaceType(cls, arguments); |
79 } | 78 } |
80 | 79 |
81 List<DartType> buildTypeArguments( | 80 List<DartType> buildTypeArguments( |
82 LibraryBuilder library, List<KernelTypeBuilder> arguments) { | 81 LibraryBuilder library, List<KernelTypeBuilder> arguments) { |
83 List<DartType> typeArguments = <DartType>[]; | 82 List<DartType> typeArguments = <DartType>[]; |
84 for (KernelTypeBuilder builder in arguments) { | 83 for (KernelTypeBuilder builder in arguments) { |
85 DartType type = builder.build(library); | 84 DartType type = builder.build(library); |
86 if (type == null) { | 85 if (type == null) { |
87 deprecated_internalProblem("Bad type: ${builder.runtimeType}"); | 86 unhandled("${builder.runtimeType}", "buildTypeArguments", -1, null); |
88 } | 87 } |
89 typeArguments.add(type); | 88 typeArguments.add(type); |
90 } | 89 } |
91 return computeDefaultTypeArguments( | 90 return computeDefaultTypeArguments( |
92 library, cls.typeParameters, typeArguments); | 91 library, cls.typeParameters, typeArguments); |
93 } | 92 } |
94 | 93 |
95 InterfaceType buildType( | 94 InterfaceType buildType( |
96 LibraryBuilder library, List<KernelTypeBuilder> arguments) { | 95 LibraryBuilder library, List<KernelTypeBuilder> arguments) { |
97 List<DartType> typeArguments; | 96 List<DartType> typeArguments; |
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
183 } | 182 } |
184 | 183 |
185 void checkOverrides(ClassHierarchy hierarchy) { | 184 void checkOverrides(ClassHierarchy hierarchy) { |
186 hierarchy.forEachOverridePair(cls, checkOverride); | 185 hierarchy.forEachOverridePair(cls, checkOverride); |
187 hierarchy.forEachCrossOverridePair(cls, handleCrossOverride); | 186 hierarchy.forEachCrossOverridePair(cls, handleCrossOverride); |
188 } | 187 } |
189 | 188 |
190 void checkOverride( | 189 void checkOverride( |
191 Member declaredMember, Member interfaceMember, bool isSetter) { | 190 Member declaredMember, Member interfaceMember, bool isSetter) { |
192 if (declaredMember is Constructor || interfaceMember is Constructor) { | 191 if (declaredMember is Constructor || interfaceMember is Constructor) { |
193 deprecated_internalProblem( | 192 unimplemented( |
194 "Constructor in override check.", fileUri, declaredMember.fileOffset); | 193 "Constructor in override check.", declaredMember.fileOffset, fileUri); |
195 } | 194 } |
196 if (declaredMember is Procedure && interfaceMember is Procedure) { | 195 if (declaredMember is Procedure && interfaceMember is Procedure) { |
197 if (declaredMember.kind == ProcedureKind.Method && | 196 if (declaredMember.kind == ProcedureKind.Method && |
198 interfaceMember.kind == ProcedureKind.Method) { | 197 interfaceMember.kind == ProcedureKind.Method) { |
199 checkMethodOverride(declaredMember, interfaceMember); | 198 checkMethodOverride(declaredMember, interfaceMember); |
200 } | 199 } |
201 } | 200 } |
202 // TODO(ahe): Handle other cases: accessors, operators, and fields. | 201 // TODO(ahe): Handle other cases: accessors, operators, and fields. |
203 | 202 |
204 // Also record any cases where a field or getter/setter overrides something | 203 // Also record any cases where a field or getter/setter overrides something |
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
295 } | 294 } |
296 } | 295 } |
297 } | 296 } |
298 | 297 |
299 String get fullNameForErrors { | 298 String get fullNameForErrors { |
300 return isMixinApplication | 299 return isMixinApplication |
301 ? "${supertype.fullNameForErrors} with ${mixedInType.fullNameForErrors}" | 300 ? "${supertype.fullNameForErrors} with ${mixedInType.fullNameForErrors}" |
302 : name; | 301 : name; |
303 } | 302 } |
304 } | 303 } |
OLD | NEW |