Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(305)

Side by Side Diff: pkg/front_end/lib/src/fasta/source/source_class_builder.dart

Issue 2691523002: Ensure locations are always provided, but don't store them yet. (Closed)
Patch Set: Address comments. Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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.source_class_builder; 5 library fasta.source_class_builder;
6 6
7 import 'package:kernel/ast.dart' show 7 import 'package:kernel/ast.dart' show
8 Class, 8 Class,
9 Constructor, 9 Constructor,
10 Supertype, 10 Supertype,
11 TreeNode,
11 setParents; 12 setParents;
12 13
13 import '../errors.dart' show 14 import '../errors.dart' show
14 internalError, 15 internalError,
15 inputError; 16 inputError;
16 17
17 import '../kernel/kernel_builder.dart' show 18 import '../kernel/kernel_builder.dart' show
18 Builder, 19 Builder,
19 ConstructorReferenceBuilder, 20 ConstructorReferenceBuilder,
20 KernelClassBuilder, 21 KernelClassBuilder,
21 KernelFieldBuilder, 22 KernelFieldBuilder,
22 KernelFunctionBuilder, 23 KernelFunctionBuilder,
23 KernelLibraryBuilder, 24 KernelLibraryBuilder,
24 KernelProcedureBuilder, 25 KernelProcedureBuilder,
25 KernelTypeBuilder, 26 KernelTypeBuilder,
26 KernelTypeVariableBuilder, 27 KernelTypeVariableBuilder,
27 LibraryBuilder, 28 LibraryBuilder,
28 MemberBuilder, 29 MemberBuilder,
29 MetadataBuilder, 30 MetadataBuilder,
30 ProcedureBuilder, 31 ProcedureBuilder,
31 TypeVariableBuilder; 32 TypeVariableBuilder;
32 33
33 import '../dill/dill_member_builder.dart' show 34 import '../dill/dill_member_builder.dart' show
34 DillMemberBuilder; 35 DillMemberBuilder;
35 36
37 import '../util/relativize.dart' show
38 relativizeUri;
39
40 Class initializeClass(Class cls, String name, LibraryBuilder parent,
41 int charOffset) {
42 cls ??= new Class(name: name);
43 cls.fileUri ??= relativizeUri(parent.fileUri);
44 if (cls.fileOffset != TreeNode.noOffset) {
45 cls.fileOffset = charOffset;
46 }
47 return cls;
48 }
49
36 class SourceClassBuilder extends KernelClassBuilder { 50 class SourceClassBuilder extends KernelClassBuilder {
37 final Class cls; 51 final Class cls;
38 52
39 final Map<String, Builder> constructors = <String, Builder>{}; 53 final Map<String, Builder> constructors = <String, Builder>{};
40 54
41 final Map<String, Builder> membersInScope; 55 final Map<String, Builder> membersInScope;
42 56
43 final List<ConstructorReferenceBuilder> constructorReferences; 57 final List<ConstructorReferenceBuilder> constructorReferences;
44 58
45 SourceClassBuilder(List<MetadataBuilder> metadata, int modifiers, 59 SourceClassBuilder(List<MetadataBuilder> metadata, int modifiers,
46 String name, List<TypeVariableBuilder> typeVariables, 60 String name, List<TypeVariableBuilder> typeVariables,
47 KernelTypeBuilder supertype, List<KernelTypeBuilder>interfaces, 61 KernelTypeBuilder supertype, List<KernelTypeBuilder>interfaces,
48 Map<String, Builder> members, List<KernelTypeBuilder> types, 62 Map<String, Builder> members, List<KernelTypeBuilder> types,
49 LibraryBuilder parent, this.constructorReferences, [Class cls]) 63 LibraryBuilder parent, this.constructorReferences, int charOffset,
50 : cls = cls ?? new Class(name: name), 64 [Class cls])
65 : cls = initializeClass(cls, name, parent, charOffset),
51 membersInScope = computeMembersInScope(members, name), 66 membersInScope = computeMembersInScope(members, name),
52 super(metadata, modifiers, name, typeVariables, supertype, interfaces, 67 super(metadata, modifiers, name, typeVariables, supertype, interfaces,
53 members, types, parent); 68 members, types, parent, charOffset);
54 69
55 int resolveTypes(LibraryBuilder library) { 70 int resolveTypes(LibraryBuilder library) {
56 int count = 0; 71 int count = 0;
57 if (typeVariables != null) { 72 if (typeVariables != null) {
58 for (KernelTypeVariableBuilder t in typeVariables) { 73 for (KernelTypeVariableBuilder t in typeVariables) {
59 cls.typeParameters.add(t.parameter); 74 cls.typeParameters.add(t.parameter);
60 } 75 }
61 setParents(cls.typeParameters, cls); 76 setParents(cls.typeParameters, cls);
62 count += cls.typeParameters.length; 77 count += cls.typeParameters.length;
63 } 78 }
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
158 if (isConstructorName(builder.name, className)) return; 173 if (isConstructorName(builder.name, className)) return;
159 } 174 }
160 if (name.indexOf(".") != -1) { 175 if (name.indexOf(".") != -1) {
161 inputError(null, null, "Only constructors and factories can have names " 176 inputError(null, null, "Only constructors and factories can have names "
162 "containing a period ('.'): $name"); 177 "containing a period ('.'): $name");
163 } 178 }
164 membersInScope[name] = builder; 179 membersInScope[name] = builder;
165 }); 180 });
166 return membersInScope; 181 return membersInScope;
167 } 182 }
OLDNEW
« no previous file with comments | « pkg/front_end/lib/src/fasta/source/scope_listener.dart ('k') | pkg/front_end/lib/src/fasta/source/source_library_builder.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698