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

Side by Side Diff: pkg/dev_compiler/tool/input_sdk/private/js_mirrors.dart

Issue 2847893002: fix #27258, don't allow dynamic set of a final field (Closed)
Patch Set: format Created 3 years, 7 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 library dart._js_mirrors; 5 library dart._js_mirrors;
6 6
7 import 'dart:mirrors'; 7 import 'dart:mirrors';
8 import 'dart:_foreign_helper' show JS; 8 import 'dart:_foreign_helper' show JS;
9 import 'dart:_internal' as _internal; 9 import 'dart:_internal' as _internal;
10 10
(...skipping 342 matching lines...) Expand 10 before | Expand all | Expand 10 after
353 if (constructors.isEmpty) { 353 if (constructors.isEmpty) {
354 // Add a default 354 // Add a default
355 var name = 'new'; 355 var name = 'new';
356 var ft = _defaultConstructorType(_unwrap(_cls)); 356 var ft = _defaultConstructorType(_unwrap(_cls));
357 var symbol = new Symbol(name); 357 var symbol = new Symbol(name);
358 _declarations[symbol] = 358 _declarations[symbol] =
359 new JsMethodMirror._constructor(this, symbol, ft); 359 new JsMethodMirror._constructor(this, symbol, ft);
360 } 360 }
361 var fields = _getFields(unwrapped); 361 var fields = _getFields(unwrapped);
362 fields.forEach((symbol, t) { 362 fields.forEach((symbol, t) {
363 var metadata = []; 363 _declarations[symbol] = new JsVariableMirror._fromField(symbol, t);
364 if (t is List) {
365 metadata = t.skip(1).toList();
366 t = t[0];
367 }
368 _declarations[symbol] =
369 new JsVariableMirror._(symbol, _wrap(t), metadata);
370 }); 364 });
371 var methods = _getMethods(unwrapped); 365 var methods = _getMethods(unwrapped);
372 methods.forEach((symbol, ft) { 366 methods.forEach((symbol, ft) {
373 var name = getName(symbol); 367 var name = getName(symbol);
374 _declarations[symbol] = 368 _declarations[symbol] =
375 new JsMethodMirror._instanceMethod(this, symbol, ft); 369 new JsMethodMirror._instanceMethod(this, symbol, ft);
376 }); 370 });
377 var getters = _getGetters(unwrapped); 371 var getters = _getGetters(unwrapped);
378 getters.forEach((symbol, ft) { 372 getters.forEach((symbol, ft) {
379 var name = getName(symbol); 373 var name = getName(symbol);
380 _declarations[symbol] = 374 _declarations[symbol] =
381 new JsMethodMirror._instanceMethod(this, symbol, ft); 375 new JsMethodMirror._instanceMethod(this, symbol, ft);
382 }); 376 });
383 var setters = _getSetters(unwrapped); 377 var setters = _getSetters(unwrapped);
384 setters.forEach((symbol, ft) { 378 setters.forEach((symbol, ft) {
385 var name = getName(symbol) + '='; 379 var name = getName(symbol) + '=';
386 // Create a separate symbol for the setter. 380 // Create a separate symbol for the setter.
387 symbol = new _internal.PrivateSymbol(name, _getESSymbol(symbol)); 381 symbol = new _internal.PrivateSymbol(name, _getESSymbol(symbol));
388 _declarations[symbol] = 382 _declarations[symbol] =
389 new JsMethodMirror._instanceMethod(this, symbol, ft); 383 new JsMethodMirror._instanceMethod(this, symbol, ft);
390 }); 384 });
391 var staticFields = _getStaticFields(unwrapped); 385 var staticFields = _getStaticFields(unwrapped);
392 staticFields.forEach((symbol, t) { 386 staticFields.forEach((symbol, t) {
393 var name = getName(symbol); 387 _declarations[symbol] = new JsVariableMirror._fromField(symbol, t);
394 var metadata = [];
395 if (t is List) {
396 metadata = t.skip(1).toList();
397 t = t[0];
398 }
399 _declarations[symbol] =
400 new JsVariableMirror._(symbol, _wrap(t), metadata);
401 }); 388 });
402 var statics = _getStatics(unwrapped); 389 var statics = _getStatics(unwrapped);
403 statics.forEach((symbol, ft) { 390 statics.forEach((symbol, ft) {
404 var name = getName(symbol); 391 var name = getName(symbol);
405 _declarations[symbol] = 392 _declarations[symbol] =
406 new JsMethodMirror._staticMethod(this, symbol, ft); 393 new JsMethodMirror._staticMethod(this, symbol, ft);
407 }); 394 });
408 var staticGetters = _getStaticGetters(unwrapped); 395 var staticGetters = _getStaticGetters(unwrapped);
409 staticGetters.forEach((symbol, ft) { 396 staticGetters.forEach((symbol, ft) {
410 var name = getName(symbol); 397 var name = getName(symbol);
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
530 } 517 }
531 518
532 String toString() => "ClassMirror on '$_cls'"; 519 String toString() => "ClassMirror on '$_cls'";
533 } 520 }
534 521
535 class JsVariableMirror extends JsMirror implements VariableMirror { 522 class JsVariableMirror extends JsMirror implements VariableMirror {
536 final Symbol _symbol; 523 final Symbol _symbol;
537 final String _name; 524 final String _name;
538 final TypeMirror type; 525 final TypeMirror type;
539 final List<InstanceMirror> metadata; 526 final List<InstanceMirror> metadata;
527 final bool isFinal;
540 528
541 // TODO(vsm): Refactor this out. 529 // TODO(vsm): Refactor this out.
542 Symbol get simpleName => _symbol; 530 Symbol get simpleName => _symbol;
543 531
544 // TODO(vsm): Fix this 532 // TODO(vsm): Fix this
545 final bool isStatic = false; 533 final bool isStatic = false;
546 final bool isFinal = false;
547 534
548 JsVariableMirror._(Symbol symbol, Type t, List annotations) 535 JsVariableMirror._(Symbol symbol, Type t, List annotations,
536 {this.isFinal: false})
549 : _symbol = symbol, 537 : _symbol = symbol,
550 _name = getName(symbol), 538 _name = getName(symbol),
551 type = reflectType(t), 539 type = reflectType(t),
552 metadata = new List<InstanceMirror>.unmodifiable( 540 metadata =
553 annotations.map((a) => reflect(a))); 541 new List<InstanceMirror>.unmodifiable(annotations.map(reflect));
542
543 JsVariableMirror._fromField(Symbol symbol, fieldInfo)
544 : this._(symbol, _wrap(JS('', '#.type', fieldInfo)),
545 JS('', '#.metadata', fieldInfo),
546 isFinal: JS('bool', '#.isFinal', fieldInfo));
554 547
555 String toString() => "VariableMirror on '$_name'"; 548 String toString() => "VariableMirror on '$_name'";
556 } 549 }
557 550
558 class JsParameterMirror extends JsVariableMirror implements ParameterMirror { 551 class JsParameterMirror extends JsVariableMirror implements ParameterMirror {
559 JsParameterMirror._(Symbol member, Type t, List annotations) 552 JsParameterMirror._(Symbol member, Type t, List annotations)
560 : super._(member, t, annotations); 553 : super._(member, t, annotations);
561 554
562 String toString() => "ParameterMirror on '$_name'"; 555 String toString() => "ParameterMirror on '$_name'";
563 } 556 }
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
654 var param = 647 var param =
655 new JsParameterMirror._(new Symbol(''), _wrap(type), metadata); 648 new JsParameterMirror._(new Symbol(''), _wrap(type), metadata);
656 params[i + args.length] = param; 649 params[i + args.length] = param;
657 } 650 }
658 651
659 _params = new List.unmodifiable(params); 652 _params = new List.unmodifiable(params);
660 } 653 }
661 654
662 String toString() => "MethodMirror on '$_name'"; 655 String toString() => "MethodMirror on '$_name'";
663 } 656 }
OLDNEW
« no previous file with comments | « pkg/dev_compiler/tool/input_sdk/private/ddc_runtime/utils.dart ('k') | tests/language_strong/dynamic_set_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698