| OLD | NEW |
| 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 summary_resynthesizer; | 5 library summary_resynthesizer; |
| 6 | 6 |
| 7 import 'dart:collection'; | 7 import 'dart:collection'; |
| 8 | 8 |
| 9 import 'package:analyzer/dart/ast/ast.dart'; | 9 import 'package:analyzer/dart/ast/ast.dart'; |
| 10 import 'package:analyzer/dart/ast/token.dart'; | 10 import 'package:analyzer/dart/ast/token.dart'; |
| (...skipping 2275 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2286 serializedLabel.isOnSwitchStatement, | 2286 serializedLabel.isOnSwitchStatement, |
| 2287 serializedLabel.isOnSwitchMember); | 2287 serializedLabel.isOnSwitchMember); |
| 2288 } | 2288 } |
| 2289 | 2289 |
| 2290 /** | 2290 /** |
| 2291 * Resynthesize a [LocalVariableElement]. | 2291 * Resynthesize a [LocalVariableElement]. |
| 2292 */ | 2292 */ |
| 2293 LocalVariableElement buildLocalVariable(UnlinkedVariable serializedVariable, | 2293 LocalVariableElement buildLocalVariable(UnlinkedVariable serializedVariable, |
| 2294 ExecutableElementImpl enclosingExecutable) { | 2294 ExecutableElementImpl enclosingExecutable) { |
| 2295 LocalVariableElementImpl element; | 2295 LocalVariableElementImpl element; |
| 2296 if (serializedVariable.constExpr != null && serializedVariable.isConst) { | 2296 if (serializedVariable.initializer?.bodyExpr != null && |
| 2297 serializedVariable.isConst) { |
| 2297 ConstLocalVariableElementImpl constElement = | 2298 ConstLocalVariableElementImpl constElement = |
| 2298 new ConstLocalVariableElementImpl.forSerialized( | 2299 new ConstLocalVariableElementImpl.forSerialized( |
| 2299 serializedVariable, enclosingExecutable); | 2300 serializedVariable, enclosingExecutable); |
| 2300 element = constElement; | 2301 element = constElement; |
| 2301 constElement.constantInitializer = _buildConstExpression( | 2302 constElement.constantInitializer = _buildConstExpression( |
| 2302 enclosingExecutable, serializedVariable.constExpr); | 2303 enclosingExecutable, serializedVariable.initializer.bodyExpr); |
| 2303 } else { | 2304 } else { |
| 2304 element = new LocalVariableElementImpl.forSerialized( | 2305 element = new LocalVariableElementImpl.forSerialized( |
| 2305 serializedVariable, enclosingExecutable); | 2306 serializedVariable, enclosingExecutable); |
| 2306 } | 2307 } |
| 2307 if (serializedVariable.visibleOffset != 0) { | 2308 if (serializedVariable.visibleOffset != 0) { |
| 2308 element.setVisibleRange( | 2309 element.setVisibleRange( |
| 2309 serializedVariable.visibleOffset, serializedVariable.visibleLength); | 2310 serializedVariable.visibleOffset, serializedVariable.visibleLength); |
| 2310 } | 2311 } |
| 2311 buildVariableCommonParts(element, serializedVariable); | 2312 buildVariableCommonParts(element, serializedVariable); |
| 2312 return element; | 2313 return element; |
| (...skipping 291 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2604 } | 2605 } |
| 2605 | 2606 |
| 2606 UnitExplicitTopLevelVariables buildUnitExplicitTopLevelVariables() { | 2607 UnitExplicitTopLevelVariables buildUnitExplicitTopLevelVariables() { |
| 2607 List<UnlinkedVariable> unlinkedVariables = unlinkedUnit.variables; | 2608 List<UnlinkedVariable> unlinkedVariables = unlinkedUnit.variables; |
| 2608 int numberOfVariables = unlinkedVariables.length; | 2609 int numberOfVariables = unlinkedVariables.length; |
| 2609 UnitExplicitTopLevelVariables variablesData = | 2610 UnitExplicitTopLevelVariables variablesData = |
| 2610 new UnitExplicitTopLevelVariables(numberOfVariables); | 2611 new UnitExplicitTopLevelVariables(numberOfVariables); |
| 2611 for (int i = 0; i < numberOfVariables; i++) { | 2612 for (int i = 0; i < numberOfVariables; i++) { |
| 2612 UnlinkedVariable unlinkedVariable = unlinkedVariables[i]; | 2613 UnlinkedVariable unlinkedVariable = unlinkedVariables[i]; |
| 2613 TopLevelVariableElementImpl element; | 2614 TopLevelVariableElementImpl element; |
| 2614 if (unlinkedVariable.constExpr != null && unlinkedVariable.isConst) { | 2615 if (unlinkedVariable.initializer?.bodyExpr != null && |
| 2616 unlinkedVariable.isConst) { |
| 2615 ConstTopLevelVariableElementImpl constElement = | 2617 ConstTopLevelVariableElementImpl constElement = |
| 2616 new ConstTopLevelVariableElementImpl.forSerialized( | 2618 new ConstTopLevelVariableElementImpl.forSerialized( |
| 2617 unlinkedVariable, unit); | 2619 unlinkedVariable, unit); |
| 2618 element = constElement; | 2620 element = constElement; |
| 2619 constElement.constantInitializer = | 2621 constElement.constantInitializer = |
| 2620 _buildConstExpression(null, unlinkedVariable.constExpr); | 2622 _buildConstExpression(null, unlinkedVariable.initializer.bodyExpr); |
| 2621 } else { | 2623 } else { |
| 2622 element = new TopLevelVariableElementImpl.forSerialized( | 2624 element = new TopLevelVariableElementImpl.forSerialized( |
| 2623 unlinkedVariable, unit); | 2625 unlinkedVariable, unit); |
| 2624 } | 2626 } |
| 2625 buildPropertyIntroducingElementCommonParts(element, unlinkedVariable); | 2627 buildPropertyIntroducingElementCommonParts(element, unlinkedVariable); |
| 2626 variablesData.variables[i] = element; | 2628 variablesData.variables[i] = element; |
| 2627 // implicit accessors | 2629 // implicit accessors |
| 2628 String name = element.name; | 2630 String name = element.name; |
| 2629 DartType type = element.type; | 2631 DartType type = element.type; |
| 2630 variablesData.implicitAccessors | 2632 variablesData.implicitAccessors |
| 2631 .add(buildImplicitGetter(element, name, type)); | 2633 .add(buildImplicitGetter(element, name, type)); |
| 2632 if (!(element.isConst || element.isFinal)) { | 2634 if (!(element.isConst || element.isFinal)) { |
| 2633 variablesData.implicitAccessors | 2635 variablesData.implicitAccessors |
| 2634 .add(buildImplicitSetter(element, name, type)); | 2636 .add(buildImplicitSetter(element, name, type)); |
| 2635 } | 2637 } |
| 2636 } | 2638 } |
| 2637 return variablesData; | 2639 return variablesData; |
| 2638 } | 2640 } |
| 2639 | 2641 |
| 2640 /** | 2642 /** |
| 2641 * Resynthesize a [TopLevelVariableElement] or [FieldElement]. | 2643 * Resynthesize a [TopLevelVariableElement] or [FieldElement]. |
| 2642 */ | 2644 */ |
| 2643 void buildVariable( | 2645 void buildVariable( |
| 2644 ClassElementImpl enclosingClass, UnlinkedVariable serializedVariable, | 2646 ClassElementImpl enclosingClass, UnlinkedVariable serializedVariable, |
| 2645 [ElementHolder holder]) { | 2647 [ElementHolder holder]) { |
| 2646 if (holder == null) { | 2648 if (holder == null) { |
| 2647 throw new UnimplementedError('Must be lazy'); | 2649 throw new UnimplementedError('Must be lazy'); |
| 2648 } else { | 2650 } else { |
| 2649 FieldElementImpl element; | 2651 FieldElementImpl element; |
| 2650 if (serializedVariable.constExpr != null && | 2652 if (serializedVariable.initializer?.bodyExpr != null && |
| 2651 (serializedVariable.isConst || | 2653 (serializedVariable.isConst || |
| 2652 serializedVariable.isFinal && !serializedVariable.isStatic)) { | 2654 serializedVariable.isFinal && !serializedVariable.isStatic)) { |
| 2653 ConstFieldElementImpl constElement = | 2655 ConstFieldElementImpl constElement = |
| 2654 new ConstFieldElementImpl.forSerialized( | 2656 new ConstFieldElementImpl.forSerialized( |
| 2655 serializedVariable, enclosingClass); | 2657 serializedVariable, enclosingClass); |
| 2656 element = constElement; | 2658 element = constElement; |
| 2657 constElement.constantInitializer = | 2659 constElement.constantInitializer = _buildConstExpression( |
| 2658 _buildConstExpression(enclosingClass, serializedVariable.constExpr); | 2660 enclosingClass, serializedVariable.initializer.bodyExpr); |
| 2659 } else { | 2661 } else { |
| 2660 element = new FieldElementImpl.forSerialized( | 2662 element = new FieldElementImpl.forSerialized( |
| 2661 serializedVariable, enclosingClass); | 2663 serializedVariable, enclosingClass); |
| 2662 } | 2664 } |
| 2663 buildPropertyIntroducingElementCommonParts(element, serializedVariable); | 2665 buildPropertyIntroducingElementCommonParts(element, serializedVariable); |
| 2664 element.static = serializedVariable.isStatic; | 2666 element.static = serializedVariable.isStatic; |
| 2665 holder.addField(element); | 2667 holder.addField(element); |
| 2666 buildImplicitAccessors(element, holder); | 2668 buildImplicitAccessors(element, holder); |
| 2667 fields[element.name] = element; | 2669 fields[element.name] = element; |
| 2668 } | 2670 } |
| (...skipping 291 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2960 static String _getElementIdentifier(String name, ReferenceKind kind) { | 2962 static String _getElementIdentifier(String name, ReferenceKind kind) { |
| 2961 if (kind == ReferenceKind.topLevelPropertyAccessor || | 2963 if (kind == ReferenceKind.topLevelPropertyAccessor || |
| 2962 kind == ReferenceKind.propertyAccessor) { | 2964 kind == ReferenceKind.propertyAccessor) { |
| 2963 if (!name.endsWith('=')) { | 2965 if (!name.endsWith('=')) { |
| 2964 return name + '?'; | 2966 return name + '?'; |
| 2965 } | 2967 } |
| 2966 } | 2968 } |
| 2967 return name; | 2969 return name; |
| 2968 } | 2970 } |
| 2969 } | 2971 } |
| OLD | NEW |