OLD | NEW |
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 1000 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1011 ConstructorElement get unnamedConstructor { | 1011 ConstructorElement get unnamedConstructor { |
1012 for (ConstructorElement element in constructors) { | 1012 for (ConstructorElement element in constructors) { |
1013 String name = element.displayName; | 1013 String name = element.displayName; |
1014 if (name == null || name.isEmpty) { | 1014 if (name == null || name.isEmpty) { |
1015 return element; | 1015 return element; |
1016 } | 1016 } |
1017 } | 1017 } |
1018 return null; | 1018 return null; |
1019 } | 1019 } |
1020 | 1020 |
| 1021 bool get _hasConstConstructorKernel => |
| 1022 _kernel != null && _kernel.constructors.any((c) => c.isConst); |
| 1023 |
1021 @override | 1024 @override |
1022 void appendTo(StringBuffer buffer) { | 1025 void appendTo(StringBuffer buffer) { |
1023 if (isAbstract) { | 1026 if (isAbstract) { |
1024 buffer.write('abstract '); | 1027 buffer.write('abstract '); |
1025 } | 1028 } |
1026 buffer.write('class '); | 1029 buffer.write('class '); |
1027 String name = displayName; | 1030 String name = displayName; |
1028 if (name == null) { | 1031 if (name == null) { |
1029 buffer.write("{unnamed class}"); | 1032 buffer.write("{unnamed class}"); |
1030 } else { | 1033 } else { |
(...skipping 1557 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2588 * in which case there might be some constant variables that lack | 2591 * in which case there might be some constant variables that lack |
2589 * initializers. | 2592 * initializers. |
2590 */ | 2593 */ |
2591 Expression _constantInitializer; | 2594 Expression _constantInitializer; |
2592 | 2595 |
2593 EvaluationResultImpl _evaluationResult; | 2596 EvaluationResultImpl _evaluationResult; |
2594 | 2597 |
2595 Expression get constantInitializer { | 2598 Expression get constantInitializer { |
2596 if (_constantInitializer == null) { | 2599 if (_constantInitializer == null) { |
2597 if (_kernelInitializer != null) { | 2600 if (_kernelInitializer != null) { |
2598 _constantInitializer = | 2601 _constantInitializer = enclosingUnit._kernelContext |
2599 enclosingUnit._kernelContext.getExpression(_kernelInitializer); | 2602 .getExpression(this, _kernelInitializer); |
2600 } | 2603 } |
2601 if (_unlinkedConst != null) { | 2604 if (_unlinkedConst != null) { |
2602 _constantInitializer = enclosingUnit.resynthesizerContext | 2605 _constantInitializer = enclosingUnit.resynthesizerContext |
2603 .buildExpression(this, _unlinkedConst); | 2606 .buildExpression(this, _unlinkedConst); |
2604 } | 2607 } |
2605 } | 2608 } |
2606 return _constantInitializer; | 2609 return _constantInitializer; |
2607 } | 2610 } |
2608 | 2611 |
2609 void set constantInitializer(Expression constantInitializer) { | 2612 void set constantInitializer(Expression constantInitializer) { |
(...skipping 1938 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4548 * Initialize using the given kernel. | 4551 * Initialize using the given kernel. |
4549 */ | 4552 */ |
4550 FieldElementImpl.forKernel(ElementImpl enclosingElement, kernel.Field kernel) | 4553 FieldElementImpl.forKernel(ElementImpl enclosingElement, kernel.Field kernel) |
4551 : super.forKernel(enclosingElement, kernel); | 4554 : super.forKernel(enclosingElement, kernel); |
4552 | 4555 |
4553 /** | 4556 /** |
4554 * Initialize using the given kernel. | 4557 * Initialize using the given kernel. |
4555 */ | 4558 */ |
4556 factory FieldElementImpl.forKernelFactory( | 4559 factory FieldElementImpl.forKernelFactory( |
4557 ClassElementImpl enclosingClass, kernel.Field kernel) { | 4560 ClassElementImpl enclosingClass, kernel.Field kernel) { |
4558 if (kernel.isConst) { | 4561 if (kernel.isConst || |
| 4562 kernel.isFinal && enclosingClass._hasConstConstructorKernel) { |
4559 return new ConstFieldElementImpl.forKernel(enclosingClass, kernel); | 4563 return new ConstFieldElementImpl.forKernel(enclosingClass, kernel); |
4560 } else { | 4564 } else { |
4561 return new FieldElementImpl.forKernel(enclosingClass, kernel); | 4565 return new FieldElementImpl.forKernel(enclosingClass, kernel); |
4562 } | 4566 } |
4563 } | 4567 } |
4564 | 4568 |
4565 /** | 4569 /** |
4566 * Initialize a newly created field element to have the given [name]. | 4570 * Initialize a newly created field element to have the given [name]. |
4567 */ | 4571 */ |
4568 FieldElementImpl.forNode(Identifier name) : super.forNode(name); | 4572 FieldElementImpl.forNode(Identifier name) : super.forNode(name); |
(...skipping 1537 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6106 /** | 6110 /** |
6107 * Return the resynthesized [ConstructorInitializer] for the given Kernel | 6111 * Return the resynthesized [ConstructorInitializer] for the given Kernel |
6108 * [initializer], or `null` if synthetic. | 6112 * [initializer], or `null` if synthetic. |
6109 */ | 6113 */ |
6110 ConstructorInitializer getConstructorInitializer( | 6114 ConstructorInitializer getConstructorInitializer( |
6111 ConstructorElementImpl constructor, kernel.Initializer initializer); | 6115 ConstructorElementImpl constructor, kernel.Initializer initializer); |
6112 | 6116 |
6113 /** | 6117 /** |
6114 * Return the [Expression] for the given kernel. | 6118 * Return the [Expression] for the given kernel. |
6115 */ | 6119 */ |
6116 Expression getExpression(kernel.Expression expression); | 6120 Expression getExpression(ElementImpl context, kernel.Expression expression); |
6117 | 6121 |
6118 /** | 6122 /** |
6119 * Return the list with exactly two elements - positional and named parameter | 6123 * Return the list with exactly two elements - positional and named parameter |
6120 * lists. | 6124 * lists. |
6121 */ | 6125 */ |
6122 List<List<kernel.VariableDeclaration>> getFunctionTypeParameters( | 6126 List<List<kernel.VariableDeclaration>> getFunctionTypeParameters( |
6123 kernel.FunctionType functionType); | 6127 kernel.FunctionType functionType); |
6124 | 6128 |
6125 /** | 6129 /** |
6126 * Return the [InterfaceType] for the given Kernel [type], or `null` if the | 6130 * Return the [InterfaceType] for the given Kernel [type], or `null` if the |
(...skipping 3793 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
9920 | 9924 |
9921 @override | 9925 @override |
9922 DartObject computeConstantValue() => null; | 9926 DartObject computeConstantValue() => null; |
9923 | 9927 |
9924 @override | 9928 @override |
9925 void visitChildren(ElementVisitor visitor) { | 9929 void visitChildren(ElementVisitor visitor) { |
9926 super.visitChildren(visitor); | 9930 super.visitChildren(visitor); |
9927 _initializer?.accept(visitor); | 9931 _initializer?.accept(visitor); |
9928 } | 9932 } |
9929 } | 9933 } |
OLD | NEW |