| 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.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 Loading... |
| 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 } |
| OLD | NEW |