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

Side by Side Diff: pkg/compiler/lib/src/js_emitter/program_builder/collector.dart

Issue 2938823002: Starting making dart2js strong mode clean. (Closed)
Patch Set: Address some comments. Created 3 years, 6 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) 2015, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2015, 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 part of dart2js.js_emitter.program_builder; 5 part of dart2js.js_emitter.program_builder;
6 6
7 /** 7 /**
8 * Generates the code for all used classes in the program. Static fields (even 8 * Generates the code for all used classes in the program. Static fields (even
9 * in classes) are ignored, since they can be treated as non-class elements. 9 * in classes) are ignored, since they can be treated as non-class elements.
10 * 10 *
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after
138 // multiple times. 138 // multiple times.
139 for (MemberElement element in _generatedCode.keys) { 139 for (MemberElement element in _generatedCode.keys) {
140 if (_mirrorsData.isMemberAccessibleByReflection(element)) { 140 if (_mirrorsData.isMemberAccessibleByReflection(element)) {
141 bool shouldRetainMetadata = 141 bool shouldRetainMetadata =
142 _mirrorsData.retainMetadataOfMember(element); 142 _mirrorsData.retainMetadataOfMember(element);
143 if (shouldRetainMetadata && 143 if (shouldRetainMetadata &&
144 (element.isFunction || 144 (element.isFunction ||
145 element.isConstructor || 145 element.isConstructor ||
146 element.isSetter)) { 146 element.isSetter)) {
147 MethodElement function = element; 147 MethodElement function = element;
148 function.functionSignature 148 function.functionSignature.forEachParameter((parameter) =>
149 .forEachParameter(_mirrorsData.retainMetadataOfParameter); 149 _mirrorsData.retainMetadataOfParameter(parameter));
150 } 150 }
151 } 151 }
152 } 152 }
153 for (ClassElement cls in neededClasses) { 153 for (ClassElement cls in neededClasses) {
154 final onlyForRti = classesOnlyNeededForRti.contains(cls); 154 final onlyForRti = classesOnlyNeededForRti.contains(cls);
155 if (!onlyForRti) { 155 if (!onlyForRti) {
156 _mirrorsData.retainMetadataOfClass(cls); 156 _mirrorsData.retainMetadataOfClass(cls);
157 new FieldVisitor(_options, _elementEnvironment, _worldBuilder, 157 new FieldVisitor(_options, _elementEnvironment, _worldBuilder,
158 _nativeData, _mirrorsData, _namer, _closedWorld) 158 _nativeData, _mirrorsData, _namer, _closedWorld)
159 .visitFields((FieldElement member, 159 .visitFields((FieldEntity member,
160 js.Name name, 160 js.Name name,
161 js.Name accessorName, 161 js.Name accessorName,
162 bool needsGetter, 162 bool needsGetter,
163 bool needsSetter, 163 bool needsSetter,
164 bool needsCheckedSetter) { 164 bool needsCheckedSetter) {
165 bool needsAccessor = needsGetter || needsSetter; 165 bool needsAccessor = needsGetter || needsSetter;
166 if (needsAccessor && 166 if (needsAccessor &&
167 _mirrorsData.isMemberAccessibleByReflection(member)) { 167 _mirrorsData.isMemberAccessibleByReflection(member)) {
168 _mirrorsData.retainMetadataOfMember(member); 168 _mirrorsData.retainMetadataOfMember(member);
169 } 169 }
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after
327 !field.isInstanceMember && 327 !field.isInstanceMember &&
328 !field.isFinal && 328 !field.isFinal &&
329 field.constant != null; 329 field.constant != null;
330 } else { 330 } else {
331 // We also need to emit static const fields if they are available for 331 // We also need to emit static const fields if they are available for
332 // reflection. 332 // reflection.
333 return _mirrorsData.isMemberAccessibleByReflection(field); 333 return _mirrorsData.isMemberAccessibleByReflection(field);
334 } 334 }
335 }); 335 });
336 336
337 _sorter.sortMembers(fields).forEach(addToOutputUnit); 337 _sorter.sortMembers(fields).forEach((MemberEntity e) => addToOutputUnit(e));
338 } 338 }
339 339
340 void computeNeededLibraries() { 340 void computeNeededLibraries() {
341 _generatedCode.keys.forEach((MemberEntity element) { 341 _generatedCode.keys.forEach((MemberEntity element) {
342 OutputUnit unit = _deferredLoadTask.outputUnitForMember(element); 342 OutputUnit unit = _deferredLoadTask.outputUnitForMember(element);
343 LibraryEntity library = element.library; 343 LibraryEntity library = element.library;
344 outputLibraryLists 344 outputLibraryLists
345 .putIfAbsent(unit, () => new Set<LibraryEntity>()) 345 .putIfAbsent(unit, () => new Set<LibraryEntity>())
346 .add(library); 346 .add(library);
347 }); 347 });
348 neededClasses.forEach((ClassEntity element) { 348 neededClasses.forEach((ClassEntity element) {
349 OutputUnit unit = _deferredLoadTask.outputUnitForClass(element); 349 OutputUnit unit = _deferredLoadTask.outputUnitForClass(element);
350 LibraryEntity library = element.library; 350 LibraryEntity library = element.library;
351 outputLibraryLists 351 outputLibraryLists
352 .putIfAbsent(unit, () => new Set<LibraryEntity>()) 352 .putIfAbsent(unit, () => new Set<LibraryEntity>())
353 .add(library); 353 .add(library);
354 }); 354 });
355 } 355 }
356 356
357 void collect() { 357 void collect() {
358 computeNeededDeclarations(); 358 computeNeededDeclarations();
359 computeNeededConstants(); 359 computeNeededConstants();
360 computeNeededStatics(); 360 computeNeededStatics();
361 computeNeededStaticNonFinalFields(); 361 computeNeededStaticNonFinalFields();
362 computeNeededLibraries(); 362 computeNeededLibraries();
363 } 363 }
364 } 364 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/js_backend/namer.dart ('k') | pkg/compiler/lib/src/js_emitter/program_builder/program_builder.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698