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

Side by Side Diff: pkg/analyzer/lib/src/dart/element/element.dart

Issue 2980863003: The very first bits of resynthesizing elements from kernels. (Closed)
Patch Set: Fixes for review comments. Created 3 years, 5 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
« no previous file with comments | « no previous file | pkg/analyzer/test/src/summary/resynthesize_common.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2014, 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 analyzer.src.dart.element.element; 5 library analyzer.src.dart.element.element;
6 6
7 import 'dart:collection'; 7 import 'dart:collection';
8 import 'dart:math' show min; 8 import 'dart:math' show min;
9 9
10 import 'package:analyzer/dart/ast/ast.dart'; 10 import 'package:analyzer/dart/ast/ast.dart';
(...skipping 12 matching lines...) Expand all
23 import 'package:analyzer/src/generated/java_engine.dart'; 23 import 'package:analyzer/src/generated/java_engine.dart';
24 import 'package:analyzer/src/generated/resolver.dart'; 24 import 'package:analyzer/src/generated/resolver.dart';
25 import 'package:analyzer/src/generated/sdk.dart' show DartSdk; 25 import 'package:analyzer/src/generated/sdk.dart' show DartSdk;
26 import 'package:analyzer/src/generated/source.dart'; 26 import 'package:analyzer/src/generated/source.dart';
27 import 'package:analyzer/src/generated/testing/ast_test_factory.dart'; 27 import 'package:analyzer/src/generated/testing/ast_test_factory.dart';
28 import 'package:analyzer/src/generated/utilities_collection.dart'; 28 import 'package:analyzer/src/generated/utilities_collection.dart';
29 import 'package:analyzer/src/generated/utilities_dart.dart'; 29 import 'package:analyzer/src/generated/utilities_dart.dart';
30 import 'package:analyzer/src/generated/utilities_general.dart'; 30 import 'package:analyzer/src/generated/utilities_general.dart';
31 import 'package:analyzer/src/summary/idl.dart'; 31 import 'package:analyzer/src/summary/idl.dart';
32 import 'package:analyzer/src/task/dart.dart'; 32 import 'package:analyzer/src/task/dart.dart';
33 import 'package:kernel/kernel.dart' as kernel;
33 34
34 /** 35 /**
35 * Assert that the given [object] is null, which in the places where this 36 * Assert that the given [object] is null, which in the places where this
36 * function is called means that the element is not resynthesized. 37 * function is called means that the element is not resynthesized.
37 */ 38 */
38 void _assertNotResynthesized(Object object) { 39 void _assertNotResynthesized(Object object) {
39 // TODO(scheglov) I comment this check for now. 40 // TODO(scheglov) I comment this check for now.
40 // When we make a decision about switch to the new analysis driver, 41 // When we make a decision about switch to the new analysis driver,
41 // we will need to rework the analysis code to don't call the setters 42 // we will need to rework the analysis code to don't call the setters
42 // or restore / inline it. 43 // or restore / inline it.
(...skipping 361 matching lines...) Expand 10 before | Expand all | Expand 10 after
404 * An [AbstractClassElementImpl] which is a class. 405 * An [AbstractClassElementImpl] which is a class.
405 */ 406 */
406 class ClassElementImpl extends AbstractClassElementImpl 407 class ClassElementImpl extends AbstractClassElementImpl
407 with TypeParameterizedElementMixin { 408 with TypeParameterizedElementMixin {
408 /** 409 /**
409 * The unlinked representation of the class in the summary. 410 * The unlinked representation of the class in the summary.
410 */ 411 */
411 final UnlinkedClass _unlinkedClass; 412 final UnlinkedClass _unlinkedClass;
412 413
413 /** 414 /**
415 * The kernel of the element.
416 */
417 final kernel.Class _kernel;
418
419 /**
414 * The superclass of the class, or `null` for [Object]. 420 * The superclass of the class, or `null` for [Object].
415 */ 421 */
416 InterfaceType _supertype; 422 InterfaceType _supertype;
417 423
418 /** 424 /**
419 * The type defined by the class. 425 * The type defined by the class.
420 */ 426 */
421 InterfaceType _type; 427 InterfaceType _type;
422 428
423 /** 429 /**
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
459 * methods might be different. 465 * methods might be different.
460 */ 466 */
461 int version = 0; 467 int version = 0;
462 468
463 /** 469 /**
464 * Initialize a newly created class element to have the given [name] at the 470 * Initialize a newly created class element to have the given [name] at the
465 * given [offset] in the file that contains the declaration of this element. 471 * given [offset] in the file that contains the declaration of this element.
466 */ 472 */
467 ClassElementImpl(String name, int offset) 473 ClassElementImpl(String name, int offset)
468 : _unlinkedClass = null, 474 : _unlinkedClass = null,
475 _kernel = null,
469 super(name, offset); 476 super(name, offset);
470 477
471 /** 478 /**
472 * Initialize a newly created class element to have the given [name]. 479 * Initialize a newly created class element to have the given [name].
473 */ 480 */
474 ClassElementImpl.forNode(Identifier name) 481 ClassElementImpl.forNode(Identifier name)
475 : _unlinkedClass = null, 482 : _unlinkedClass = null,
483 _kernel = null,
476 super.forNode(name); 484 super.forNode(name);
477 485
478 /** 486 /**
479 * Initialize using the given serialized information. 487 * Initialize using the given serialized information.
480 */ 488 */
481 ClassElementImpl.forSerialized( 489 ClassElementImpl.forSerialized(
482 this._unlinkedClass, CompilationUnitElementImpl enclosingUnit) 490 this._unlinkedClass, CompilationUnitElementImpl enclosingUnit)
483 : super.forSerialized(enclosingUnit); 491 : _kernel = null,
492 super.forSerialized(enclosingUnit);
493
494 /**
495 * Initialize using the given kernel.
496 */
497 ClassElementImpl.forKernel(
498 CompilationUnitElementImpl enclosingUnit, this._kernel)
499 : _unlinkedClass = null,
500 super.forSerialized(enclosingUnit);
484 501
485 /** 502 /**
486 * Set whether this class is abstract. 503 * Set whether this class is abstract.
487 */ 504 */
488 void set abstract(bool isAbstract) { 505 void set abstract(bool isAbstract) {
489 _assertNotResynthesized(_unlinkedClass); 506 _assertNotResynthesized(_unlinkedClass);
490 setModifier(Modifier.ABSTRACT, isAbstract); 507 setModifier(Modifier.ABSTRACT, isAbstract);
491 } 508 }
492 509
493 @override 510 @override
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
525 return _unlinkedClass.codeRange?.offset; 542 return _unlinkedClass.codeRange?.offset;
526 } 543 }
527 return super.codeOffset; 544 return super.codeOffset;
528 } 545 }
529 546
530 @override 547 @override
531 List<ConstructorElement> get constructors { 548 List<ConstructorElement> get constructors {
532 if (isMixinApplication) { 549 if (isMixinApplication) {
533 return _computeMixinAppConstructors(); 550 return _computeMixinAppConstructors();
534 } 551 }
552 if (_kernel != null && _constructors == null) {
553 _constructors = _kernel.constructors
554 .map((k) => new ConstructorElementImpl.forKernel(this, k))
555 .toList(growable: false);
556 }
535 if (_unlinkedClass != null && _constructors == null) { 557 if (_unlinkedClass != null && _constructors == null) {
536 _constructors = _unlinkedClass.executables 558 _constructors = _unlinkedClass.executables
537 .where((e) => e.kind == UnlinkedExecutableKind.constructor) 559 .where((e) => e.kind == UnlinkedExecutableKind.constructor)
538 .map((e) => new ConstructorElementImpl.forSerialized(e, this)) 560 .map((e) => new ConstructorElementImpl.forSerialized(e, this))
539 .toList(growable: false); 561 .toList(growable: false);
540 // Ensure at least implicit default constructor. 562 // Ensure at least implicit default constructor.
541 if (_constructors.isEmpty) { 563 if (_constructors.isEmpty) {
542 ConstructorElementImpl constructor = new ConstructorElementImpl('', -1); 564 ConstructorElementImpl constructor = new ConstructorElementImpl('', -1);
543 constructor.isSynthetic = true; 565 constructor.isSynthetic = true;
544 constructor.enclosingElement = this; 566 constructor.enclosingElement = this;
(...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after
729 return _interfaces ?? const <InterfaceType>[]; 751 return _interfaces ?? const <InterfaceType>[];
730 } 752 }
731 753
732 void set interfaces(List<InterfaceType> interfaces) { 754 void set interfaces(List<InterfaceType> interfaces) {
733 _assertNotResynthesized(_unlinkedClass); 755 _assertNotResynthesized(_unlinkedClass);
734 _interfaces = interfaces; 756 _interfaces = interfaces;
735 } 757 }
736 758
737 @override 759 @override
738 bool get isAbstract { 760 bool get isAbstract {
761 if (_kernel != null) {
762 return _kernel.isAbstract;
763 }
739 if (_unlinkedClass != null) { 764 if (_unlinkedClass != null) {
740 return _unlinkedClass.isAbstract; 765 return _unlinkedClass.isAbstract;
741 } 766 }
742 return hasModifier(Modifier.ABSTRACT); 767 return hasModifier(Modifier.ABSTRACT);
743 } 768 }
744 769
745 @override 770 @override
746 bool get isEnum => false; 771 bool get isEnum => false;
747 772
748 @override 773 @override
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
836 return _mixins ?? const <InterfaceType>[]; 861 return _mixins ?? const <InterfaceType>[];
837 } 862 }
838 863
839 void set mixins(List<InterfaceType> mixins) { 864 void set mixins(List<InterfaceType> mixins) {
840 _assertNotResynthesized(_unlinkedClass); 865 _assertNotResynthesized(_unlinkedClass);
841 _mixins = mixins; 866 _mixins = mixins;
842 } 867 }
843 868
844 @override 869 @override
845 String get name { 870 String get name {
871 if (_kernel != null) {
872 return _kernel.name;
873 }
846 if (_unlinkedClass != null) { 874 if (_unlinkedClass != null) {
847 return _unlinkedClass.name; 875 return _unlinkedClass.name;
848 } 876 }
849 return super.name; 877 return super.name;
850 } 878 }
851 879
852 @override 880 @override
853 int get nameOffset { 881 int get nameOffset {
854 int offset = super.nameOffset; 882 int offset = super.nameOffset;
855 if (offset == 0 && _unlinkedClass != null) { 883 if (offset == 0 && _unlinkedClass != null) {
(...skipping 414 matching lines...) Expand 10 before | Expand all | Expand 10 after
1270 * The unlinked representation of the unit in the summary. 1298 * The unlinked representation of the unit in the summary.
1271 */ 1299 */
1272 final UnlinkedUnit _unlinkedUnit; 1300 final UnlinkedUnit _unlinkedUnit;
1273 1301
1274 /** 1302 /**
1275 * The unlinked representation of the part in the summary. 1303 * The unlinked representation of the part in the summary.
1276 */ 1304 */
1277 final UnlinkedPart _unlinkedPart; 1305 final UnlinkedPart _unlinkedPart;
1278 1306
1279 /** 1307 /**
1308 * The kernel context in which the library is resynthesized.
1309 */
1310 final KernelLibraryResynthesizerContext _kernelContext;
1311
1312 /**
1280 * The source that corresponds to this compilation unit. 1313 * The source that corresponds to this compilation unit.
1281 */ 1314 */
1282 @override 1315 @override
1283 Source source; 1316 Source source;
1284 1317
1285 @override 1318 @override
1286 LineInfo lineInfo; 1319 LineInfo lineInfo;
1287 1320
1288 /** 1321 /**
1289 * The source of the library containing this compilation unit. 1322 * The source of the library containing this compilation unit.
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
1353 _topLevelVariableReplaceMap; 1386 _topLevelVariableReplaceMap;
1354 1387
1355 /** 1388 /**
1356 * Initialize a newly created compilation unit element to have the given 1389 * Initialize a newly created compilation unit element to have the given
1357 * [name]. 1390 * [name].
1358 */ 1391 */
1359 CompilationUnitElementImpl(String name) 1392 CompilationUnitElementImpl(String name)
1360 : resynthesizerContext = null, 1393 : resynthesizerContext = null,
1361 _unlinkedUnit = null, 1394 _unlinkedUnit = null,
1362 _unlinkedPart = null, 1395 _unlinkedPart = null,
1396 _kernelContext = null,
1363 super(name, -1); 1397 super(name, -1);
1364 1398
1365 /** 1399 /**
1366 * Initialize using the given serialized information. 1400 * Initialize using the given serialized information.
1367 */ 1401 */
1368 CompilationUnitElementImpl.forSerialized( 1402 CompilationUnitElementImpl.forSerialized(
1369 LibraryElementImpl enclosingLibrary, 1403 LibraryElementImpl enclosingLibrary,
1370 this.resynthesizerContext, 1404 this.resynthesizerContext,
1371 this._unlinkedUnit, 1405 this._unlinkedUnit,
1372 this._unlinkedPart, 1406 this._unlinkedPart,
1373 String name) 1407 String name)
1374 : super.forSerialized(null) { 1408 : _kernelContext = null,
1409 super.forSerialized(null) {
1375 _enclosingElement = enclosingLibrary; 1410 _enclosingElement = enclosingLibrary;
1376 _name = name; 1411 _name = name;
1377 _nameOffset = -1; 1412 _nameOffset = -1;
1413 }
1414
1415 /**
1416 * Initialize using the given kernel information.
1417 */
1418 CompilationUnitElementImpl.forKernel(
1419 LibraryElementImpl enclosingLibrary, this._kernelContext, String name)
1420 : resynthesizerContext = null,
1421 _unlinkedUnit = null,
1422 _unlinkedPart = null,
1423 super.forSerialized(null) {
1424 _enclosingElement = enclosingLibrary;
1425 _name = name;
1426 _nameOffset = -1;
1378 } 1427 }
1379 1428
1380 @override 1429 @override
1381 List<PropertyAccessorElement> get accessors { 1430 List<PropertyAccessorElement> get accessors {
1382 if (_unlinkedUnit != null) { 1431 if (_unlinkedUnit != null) {
1383 if (_accessors == null) { 1432 if (_accessors == null) {
1384 _explicitTopLevelAccessors ??= 1433 _explicitTopLevelAccessors ??=
1385 resynthesizerContext.buildTopLevelAccessors(); 1434 resynthesizerContext.buildTopLevelAccessors();
1386 _explicitTopLevelVariables ??= 1435 _explicitTopLevelVariables ??=
1387 resynthesizerContext.buildTopLevelVariables(); 1436 resynthesizerContext.buildTopLevelVariables();
(...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after
1568 (typeAlias as ElementImpl).enclosingElement = this; 1617 (typeAlias as ElementImpl).enclosingElement = this;
1569 } 1618 }
1570 this._typeAliases = typeAliases; 1619 this._typeAliases = typeAliases;
1571 } 1620 }
1572 1621
1573 @override 1622 @override
1574 TypeParameterizedElementMixin get typeParameterContext => null; 1623 TypeParameterizedElementMixin get typeParameterContext => null;
1575 1624
1576 @override 1625 @override
1577 List<ClassElement> get types { 1626 List<ClassElement> get types {
1627 if (_kernelContext != null) {
1628 _types ??= _kernelContext.library.classes
1629 .map((k) => new ClassElementImpl.forKernel(this, k))
1630 .toList(growable: false);
1631 }
1578 if (_unlinkedUnit != null) { 1632 if (_unlinkedUnit != null) {
1579 _types ??= _unlinkedUnit.classes 1633 _types ??= _unlinkedUnit.classes
1580 .map((c) => new ClassElementImpl.forSerialized(c, this)) 1634 .map((c) => new ClassElementImpl.forSerialized(c, this))
1581 .toList(growable: false); 1635 .toList(growable: false);
1582 } 1636 }
1583 return _types ?? const <ClassElement>[]; 1637 return _types ?? const <ClassElement>[];
1584 } 1638 }
1585 1639
1586 /** 1640 /**
1587 * Set the types contained in this compilation unit to the given [types]. 1641 * Set the types contained in this compilation unit to the given [types].
(...skipping 339 matching lines...) Expand 10 before | Expand all | Expand 10 after
1927 */ 1981 */
1928 ConstructorElement _redirectedConstructor; 1982 ConstructorElement _redirectedConstructor;
1929 1983
1930 /** 1984 /**
1931 * The initializers for this constructor (used for evaluating constant 1985 * The initializers for this constructor (used for evaluating constant
1932 * instance creation expressions). 1986 * instance creation expressions).
1933 */ 1987 */
1934 List<ConstructorInitializer> _constantInitializers; 1988 List<ConstructorInitializer> _constantInitializers;
1935 1989
1936 /** 1990 /**
1991 * The kernel of the element.
1992 */
1993 final kernel.Constructor _kernel;
1994
1995 /**
1937 * The offset of the `.` before this constructor name or `null` if not named. 1996 * The offset of the `.` before this constructor name or `null` if not named.
1938 */ 1997 */
1939 int _periodOffset; 1998 int _periodOffset;
1940 1999
1941 /** 2000 /**
1942 * Return the offset of the character immediately following the last character 2001 * Return the offset of the character immediately following the last character
1943 * of this constructor's name, or `null` if not named. 2002 * of this constructor's name, or `null` if not named.
1944 */ 2003 */
1945 int _nameEnd; 2004 int _nameEnd;
1946 2005
1947 /** 2006 /**
1948 * True if this constructor has been found by constant evaluation to be free 2007 * True if this constructor has been found by constant evaluation to be free
1949 * of redirect cycles, and is thus safe to evaluate. 2008 * of redirect cycles, and is thus safe to evaluate.
1950 */ 2009 */
1951 bool _isCycleFree = false; 2010 bool _isCycleFree = false;
1952 2011
1953 /** 2012 /**
1954 * Initialize a newly created constructor element to have the given [name] and 2013 * Initialize a newly created constructor element to have the given [name] and
1955 * [offset]. 2014 * [offset].
1956 */ 2015 */
1957 ConstructorElementImpl(String name, int offset) : super(name, offset); 2016 ConstructorElementImpl(String name, int offset)
2017 : _kernel = null,
2018 super(name, offset);
1958 2019
1959 /** 2020 /**
1960 * Initialize a newly created constructor element to have the given [name]. 2021 * Initialize a newly created constructor element to have the given [name].
1961 */ 2022 */
1962 ConstructorElementImpl.forNode(Identifier name) : super.forNode(name); 2023 ConstructorElementImpl.forNode(Identifier name)
2024 : _kernel = null,
2025 super.forNode(name);
1963 2026
1964 /** 2027 /**
1965 * Initialize using the given serialized information. 2028 * Initialize using the given serialized information.
1966 */ 2029 */
1967 ConstructorElementImpl.forSerialized( 2030 ConstructorElementImpl.forSerialized(
1968 UnlinkedExecutable serializedExecutable, ClassElementImpl enclosingClass) 2031 UnlinkedExecutable serializedExecutable, ClassElementImpl enclosingClass)
1969 : super.forSerialized(serializedExecutable, enclosingClass); 2032 : _kernel = null,
2033 super.forSerialized(serializedExecutable, enclosingClass);
2034
2035 /**
2036 * Initialize using the given serialized information.
2037 */
2038 ConstructorElementImpl.forKernel(
2039 ClassElementImpl enclosingClass, this._kernel)
2040 : super.forSerialized(null, enclosingClass) {
2041 isSynthetic = _kernel.isSyntheticDefault;
2042 }
1970 2043
1971 /** 2044 /**
1972 * Return the constant initializers for this element, which will be empty if 2045 * Return the constant initializers for this element, which will be empty if
1973 * there are no initializers, or `null` if there was an error in the source. 2046 * there are no initializers, or `null` if there was an error in the source.
1974 */ 2047 */
1975 List<ConstructorInitializer> get constantInitializers { 2048 List<ConstructorInitializer> get constantInitializers {
1976 if (serializedExecutable != null && _constantInitializers == null) { 2049 if (serializedExecutable != null && _constantInitializers == null) {
1977 _constantInitializers ??= serializedExecutable.constantInitializers 2050 _constantInitializers ??= serializedExecutable.constantInitializers
1978 .map((i) => _buildConstructorInitializer(i)) 2051 .map((i) => _buildConstructorInitializer(i))
1979 .toList(growable: false); 2052 .toList(growable: false);
(...skipping 1562 matching lines...) Expand 10 before | Expand all | Expand 10 after
3542 */ 3615 */
3543 abstract class ExecutableElementImpl extends ElementImpl 3616 abstract class ExecutableElementImpl extends ElementImpl
3544 with TypeParameterizedElementMixin 3617 with TypeParameterizedElementMixin
3545 implements ExecutableElement { 3618 implements ExecutableElement {
3546 /** 3619 /**
3547 * The unlinked representation of the executable in the summary. 3620 * The unlinked representation of the executable in the summary.
3548 */ 3621 */
3549 final UnlinkedExecutable serializedExecutable; 3622 final UnlinkedExecutable serializedExecutable;
3550 3623
3551 /** 3624 /**
3625 * The kernel of the element.
3626 */
3627 final kernel.Member _kernel;
3628
3629 /**
3552 * A list containing all of the functions defined within this executable 3630 * A list containing all of the functions defined within this executable
3553 * element. 3631 * element.
3554 */ 3632 */
3555 List<FunctionElement> _functions; 3633 List<FunctionElement> _functions;
3556 3634
3557 /** 3635 /**
3558 * A list containing all of the parameters defined by this executable element. 3636 * A list containing all of the parameters defined by this executable element.
3559 */ 3637 */
3560 List<ParameterElement> _parameters; 3638 List<ParameterElement> _parameters;
3561 3639
(...skipping 11 matching lines...) Expand all
3573 * The type of function defined by this executable element. 3651 * The type of function defined by this executable element.
3574 */ 3652 */
3575 FunctionType _type; 3653 FunctionType _type;
3576 3654
3577 /** 3655 /**
3578 * Initialize a newly created executable element to have the given [name] and 3656 * Initialize a newly created executable element to have the given [name] and
3579 * [offset]. 3657 * [offset].
3580 */ 3658 */
3581 ExecutableElementImpl(String name, int offset) 3659 ExecutableElementImpl(String name, int offset)
3582 : serializedExecutable = null, 3660 : serializedExecutable = null,
3661 _kernel = null,
3583 super(name, offset); 3662 super(name, offset);
3584 3663
3585 /** 3664 /**
3586 * Initialize a newly created executable element to have the given [name]. 3665 * Initialize a newly created executable element to have the given [name].
3587 */ 3666 */
3588 ExecutableElementImpl.forNode(Identifier name) 3667 ExecutableElementImpl.forNode(Identifier name)
3589 : serializedExecutable = null, 3668 : serializedExecutable = null,
3669 _kernel = null,
3590 super.forNode(name); 3670 super.forNode(name);
3591 3671
3592 /** 3672 /**
3593 * Initialize using the given serialized information. 3673 * Initialize using the given serialized information.
3594 */ 3674 */
3595 ExecutableElementImpl.forSerialized( 3675 ExecutableElementImpl.forSerialized(
3596 this.serializedExecutable, ElementImpl enclosingElement) 3676 this.serializedExecutable, ElementImpl enclosingElement)
3597 : super.forSerialized(enclosingElement); 3677 : _kernel = null,
3678 super.forSerialized(enclosingElement);
3679
3680 /**
3681 * Initialize using the given kernel.
3682 */
3683 ExecutableElementImpl.forKernel(ElementImpl enclosingElement, this._kernel)
3684 : serializedExecutable = null,
3685 super.forSerialized(enclosingElement);
3598 3686
3599 /** 3687 /**
3600 * Set whether this executable element's body is asynchronous. 3688 * Set whether this executable element's body is asynchronous.
3601 */ 3689 */
3602 void set asynchronous(bool isAsynchronous) { 3690 void set asynchronous(bool isAsynchronous) {
3603 _assertNotResynthesized(serializedExecutable); 3691 _assertNotResynthesized(serializedExecutable);
3604 setModifier(Modifier.ASYNCHRONOUS, isAsynchronous); 3692 setModifier(Modifier.ASYNCHRONOUS, isAsynchronous);
3605 } 3693 }
3606 3694
3607 @override 3695 @override
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after
3737 List<ElementAnnotation> get metadata { 3825 List<ElementAnnotation> get metadata {
3738 if (serializedExecutable != null) { 3826 if (serializedExecutable != null) {
3739 return _metadata ??= 3827 return _metadata ??=
3740 _buildAnnotations(enclosingUnit, serializedExecutable.annotations); 3828 _buildAnnotations(enclosingUnit, serializedExecutable.annotations);
3741 } 3829 }
3742 return super.metadata; 3830 return super.metadata;
3743 } 3831 }
3744 3832
3745 @override 3833 @override
3746 String get name { 3834 String get name {
3835 if (_kernel != null) {
3836 return _kernel.name.name;
3837 }
3747 if (serializedExecutable != null) { 3838 if (serializedExecutable != null) {
3748 return serializedExecutable.name; 3839 return serializedExecutable.name;
3749 } 3840 }
3750 return super.name; 3841 return super.name;
3751 } 3842 }
3752 3843
3753 @override 3844 @override
3754 int get nameOffset { 3845 int get nameOffset {
3755 int offset = super.nameOffset; 3846 int offset = super.nameOffset;
3756 if (offset == 0 && serializedExecutable != null) { 3847 if (offset == 0 && serializedExecutable != null) {
(...skipping 1768 matching lines...) Expand 10 before | Expand all | Expand 10 after
5525 * A concrete implementation of a [LibraryElement]. 5616 * A concrete implementation of a [LibraryElement].
5526 */ 5617 */
5527 class LibraryElementImpl extends ElementImpl implements LibraryElement { 5618 class LibraryElementImpl extends ElementImpl implements LibraryElement {
5528 /** 5619 /**
5529 * The analysis context in which this library is defined. 5620 * The analysis context in which this library is defined.
5530 */ 5621 */
5531 final AnalysisContext context; 5622 final AnalysisContext context;
5532 5623
5533 final LibraryResynthesizerContext resynthesizerContext; 5624 final LibraryResynthesizerContext resynthesizerContext;
5534 5625
5626 /**
5627 * The kernel context in which the library is resynthesized.
5628 */
5629 final KernelLibraryResynthesizerContext _kernelContext;
5630
5535 final UnlinkedUnit _unlinkedDefiningUnit; 5631 final UnlinkedUnit _unlinkedDefiningUnit;
5536 5632
5537 /** 5633 /**
5538 * The compilation unit that defines this library. 5634 * The compilation unit that defines this library.
5539 */ 5635 */
5540 CompilationUnitElement _definingCompilationUnit; 5636 CompilationUnitElement _definingCompilationUnit;
5541 5637
5542 /** 5638 /**
5543 * The entry point for this library, or `null` if this library does not have 5639 * The entry point for this library, or `null` if this library does not have
5544 * an entry point. 5640 * an entry point.
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
5602 * The cached list of prefixes. 5698 * The cached list of prefixes.
5603 */ 5699 */
5604 List<PrefixElement> _prefixes; 5700 List<PrefixElement> _prefixes;
5605 5701
5606 /** 5702 /**
5607 * Initialize a newly created library element in the given [context] to have 5703 * Initialize a newly created library element in the given [context] to have
5608 * the given [name] and [offset]. 5704 * the given [name] and [offset].
5609 */ 5705 */
5610 LibraryElementImpl(this.context, String name, int offset, this.nameLength) 5706 LibraryElementImpl(this.context, String name, int offset, this.nameLength)
5611 : resynthesizerContext = null, 5707 : resynthesizerContext = null,
5708 _kernelContext = null,
5612 _unlinkedDefiningUnit = null, 5709 _unlinkedDefiningUnit = null,
5613 super(name, offset); 5710 super(name, offset);
5614 5711
5615 /** 5712 /**
5616 * Initialize a newly created library element in the given [context] to have 5713 * Initialize a newly created library element in the given [context] to have
5617 * the given [name]. 5714 * the given [name].
5618 */ 5715 */
5619 LibraryElementImpl.forNode(this.context, LibraryIdentifier name) 5716 LibraryElementImpl.forNode(this.context, LibraryIdentifier name)
5620 : nameLength = name != null ? name.length : 0, 5717 : nameLength = name != null ? name.length : 0,
5621 resynthesizerContext = null, 5718 resynthesizerContext = null,
5719 _kernelContext = null,
5622 _unlinkedDefiningUnit = null, 5720 _unlinkedDefiningUnit = null,
5623 super.forNode(name); 5721 super.forNode(name);
5624 5722
5625 /** 5723 /**
5626 * Initialize using the given serialized information. 5724 * Initialize using the given serialized information.
5627 */ 5725 */
5628 LibraryElementImpl.forSerialized(this.context, String name, int offset, 5726 LibraryElementImpl.forSerialized(this.context, String name, int offset,
5629 this.nameLength, this.resynthesizerContext, this._unlinkedDefiningUnit) 5727 this.nameLength, this.resynthesizerContext, this._unlinkedDefiningUnit)
5630 : super.forSerialized(null) { 5728 : _kernelContext = null,
5729 super.forSerialized(null) {
5631 _name = name; 5730 _name = name;
5632 _nameOffset = offset; 5731 _nameOffset = offset;
5633 setResolutionCapability( 5732 setResolutionCapability(
5634 LibraryResolutionCapability.resolvedTypeNames, true); 5733 LibraryResolutionCapability.resolvedTypeNames, true);
5635 setResolutionCapability( 5734 setResolutionCapability(
5636 LibraryResolutionCapability.constantExpressions, true); 5735 LibraryResolutionCapability.constantExpressions, true);
5637 } 5736 }
5638 5737
5738 /**
5739 * Initialize using the given kernel information.
5740 */
5741 LibraryElementImpl.forKernel(this.context, this._kernelContext)
5742 : resynthesizerContext = null,
5743 _unlinkedDefiningUnit = null,
5744 nameLength = _kernelContext.library.name?.length ?? 0,
5745 super.forSerialized(null) {
5746 _name = _kernelContext.library.name ?? '';
5747 _nameOffset = _kernelContext.library.fileOffset;
5748 setResolutionCapability(
5749 LibraryResolutionCapability.resolvedTypeNames, true);
5750 setResolutionCapability(
5751 LibraryResolutionCapability.constantExpressions, true);
5752
5753 definingCompilationUnit = new CompilationUnitElementImpl.forKernel(
5754 this, _kernelContext, '<no-name>');
5755
5756 // TODO(scheglov) how to support parts?
5757 }
5758
5639 @override 5759 @override
5640 int get codeLength { 5760 int get codeLength {
5641 CompilationUnitElement unit = _definingCompilationUnit; 5761 CompilationUnitElement unit = _definingCompilationUnit;
5642 if (unit is CompilationUnitElementImpl) { 5762 if (unit is CompilationUnitElementImpl) {
5643 return unit.codeLength; 5763 return unit.codeLength;
5644 } 5764 }
5645 return null; 5765 return null;
5646 } 5766 }
5647 5767
5648 @override 5768 @override
(...skipping 3215 matching lines...) Expand 10 before | Expand all | Expand 10 after
8864 8984
8865 @override 8985 @override
8866 DartObject computeConstantValue() => null; 8986 DartObject computeConstantValue() => null;
8867 8987
8868 @override 8988 @override
8869 void visitChildren(ElementVisitor visitor) { 8989 void visitChildren(ElementVisitor visitor) {
8870 super.visitChildren(visitor); 8990 super.visitChildren(visitor);
8871 _initializer?.accept(visitor); 8991 _initializer?.accept(visitor);
8872 } 8992 }
8873 } 8993 }
8994
8995 /**
8996 * The kernel context in which a library is resynthesized.
8997 */
8998 abstract class KernelLibraryResynthesizerContext {
8999 kernel.Library get library;
9000 }
OLDNEW
« no previous file with comments | « no previous file | pkg/analyzer/test/src/summary/resynthesize_common.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698