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

Side by Side Diff: pkg/analyzer/lib/src/summary/resynthesize.dart

Issue 2014713002: Create lazy (Const)FieldElementImpl. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 4 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
« no previous file with comments | « pkg/analyzer/lib/src/dart/element/element.dart ('k') | no next file » | 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) 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 2290 matching lines...) Expand 10 before | Expand all | Expand 10 after
2301 constElement.constantInitializer = _buildConstExpression( 2301 constElement.constantInitializer = _buildConstExpression(
2302 enclosingExecutable, serializedVariable.constExpr); 2302 enclosingExecutable, serializedVariable.constExpr);
2303 } else { 2303 } else {
2304 element = new LocalVariableElementImpl.forSerialized( 2304 element = new LocalVariableElementImpl.forSerialized(
2305 serializedVariable, enclosingExecutable); 2305 serializedVariable, enclosingExecutable);
2306 } 2306 }
2307 if (serializedVariable.visibleOffset != 0) { 2307 if (serializedVariable.visibleOffset != 0) {
2308 element.setVisibleRange( 2308 element.setVisibleRange(
2309 serializedVariable.visibleOffset, serializedVariable.visibleLength); 2309 serializedVariable.visibleOffset, serializedVariable.visibleLength);
2310 } 2310 }
2311 buildVariableCommonParts(element, serializedVariable, 2311 buildVariableCommonParts(element, serializedVariable);
2312 isLazilyResynthesized: true);
2313 return element; 2312 return element;
2314 } 2313 }
2315 2314
2316 /** 2315 /**
2317 * Resynthesize a [ParameterElement]. 2316 * Resynthesize a [ParameterElement].
2318 */ 2317 */
2319 ParameterElement buildParameter( 2318 ParameterElement buildParameter(
2320 UnlinkedParam serializedParameter, ElementImpl enclosingElement, 2319 UnlinkedParam serializedParameter, ElementImpl enclosingElement,
2321 {bool synthetic: false}) { 2320 {bool synthetic: false}) {
2322 ParameterElementImpl parameterElement; 2321 ParameterElementImpl parameterElement;
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
2414 serializedParameter.visibleLength); 2413 serializedParameter.visibleLength);
2415 } 2414 }
2416 } 2415 }
2417 return parameterElement; 2416 return parameterElement;
2418 } 2417 }
2419 2418
2420 /** 2419 /**
2421 * Handle the parts that are common to top level variables and fields. 2420 * Handle the parts that are common to top level variables and fields.
2422 */ 2421 */
2423 void buildPropertyIntroducingElementCommonParts( 2422 void buildPropertyIntroducingElementCommonParts(
2424 PropertyInducingElementImpl element, UnlinkedVariable serializedVariable, 2423 PropertyInducingElementImpl element,
2425 {bool isLazilyResynthesized: false}) { 2424 UnlinkedVariable serializedVariable) {
2426 buildVariableCommonParts(element, serializedVariable, 2425 buildVariableCommonParts(element, serializedVariable);
2427 isLazilyResynthesized: isLazilyResynthesized);
2428 element.propagatedType = buildLinkedType( 2426 element.propagatedType = buildLinkedType(
2429 serializedVariable.propagatedTypeSlot, 2427 serializedVariable.propagatedTypeSlot,
2430 _currentTypeParameterizedElement); 2428 _currentTypeParameterizedElement);
2431 } 2429 }
2432 2430
2433 List<FunctionElementImpl> buildTopLevelFunctions() { 2431 List<FunctionElementImpl> buildTopLevelFunctions() {
2434 List<FunctionElementImpl> functions = <FunctionElementImpl>[]; 2432 List<FunctionElementImpl> functions = <FunctionElementImpl>[];
2435 List<UnlinkedExecutable> executables = unlinkedUnit.executables; 2433 List<UnlinkedExecutable> executables = unlinkedUnit.executables;
2436 for (UnlinkedExecutable unlinkedExecutable in executables) { 2434 for (UnlinkedExecutable unlinkedExecutable in executables) {
2437 if (unlinkedExecutable.kind == UnlinkedExecutableKind.functionOrMethod) { 2435 if (unlinkedExecutable.kind == UnlinkedExecutableKind.functionOrMethod) {
(...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after
2617 ConstTopLevelVariableElementImpl constElement = 2615 ConstTopLevelVariableElementImpl constElement =
2618 new ConstTopLevelVariableElementImpl.forSerialized( 2616 new ConstTopLevelVariableElementImpl.forSerialized(
2619 unlinkedVariable, unit); 2617 unlinkedVariable, unit);
2620 element = constElement; 2618 element = constElement;
2621 constElement.constantInitializer = 2619 constElement.constantInitializer =
2622 _buildConstExpression(null, unlinkedVariable.constExpr); 2620 _buildConstExpression(null, unlinkedVariable.constExpr);
2623 } else { 2621 } else {
2624 element = new TopLevelVariableElementImpl.forSerialized( 2622 element = new TopLevelVariableElementImpl.forSerialized(
2625 unlinkedVariable, unit); 2623 unlinkedVariable, unit);
2626 } 2624 }
2627 buildPropertyIntroducingElementCommonParts(element, unlinkedVariable, 2625 buildPropertyIntroducingElementCommonParts(element, unlinkedVariable);
2628 isLazilyResynthesized: true);
2629 variablesData.variables[i] = element; 2626 variablesData.variables[i] = element;
2630 // implicit accessors 2627 // implicit accessors
2631 String name = element.name; 2628 String name = element.name;
2632 DartType type = element.type; 2629 DartType type = element.type;
2633 variablesData.implicitAccessors 2630 variablesData.implicitAccessors
2634 .add(buildImplicitGetter(element, name, type)); 2631 .add(buildImplicitGetter(element, name, type));
2635 if (!(element.isConst || element.isFinal)) { 2632 if (!(element.isConst || element.isFinal)) {
2636 variablesData.implicitAccessors 2633 variablesData.implicitAccessors
2637 .add(buildImplicitSetter(element, name, type)); 2634 .add(buildImplicitSetter(element, name, type));
2638 } 2635 }
2639 } 2636 }
2640 return variablesData; 2637 return variablesData;
2641 } 2638 }
2642 2639
2643 /** 2640 /**
2644 * Resynthesize a [TopLevelVariableElement] or [FieldElement]. 2641 * Resynthesize a [TopLevelVariableElement] or [FieldElement].
2645 */ 2642 */
2646 void buildVariable( 2643 void buildVariable(
2647 ClassElementImpl enclosingClass, UnlinkedVariable serializedVariable, 2644 ClassElementImpl enclosingClass, UnlinkedVariable serializedVariable,
2648 [ElementHolder holder]) { 2645 [ElementHolder holder]) {
2649 if (holder == null) { 2646 if (holder == null) {
2650 throw new UnimplementedError('Must be lazy'); 2647 throw new UnimplementedError('Must be lazy');
2651 } else { 2648 } else {
2652 FieldElementImpl element; 2649 FieldElementImpl element;
2653 if (serializedVariable.constExpr != null && 2650 if (serializedVariable.constExpr != null &&
2654 (serializedVariable.isConst || 2651 (serializedVariable.isConst ||
2655 serializedVariable.isFinal && !serializedVariable.isStatic)) { 2652 serializedVariable.isFinal && !serializedVariable.isStatic)) {
2656 ConstFieldElementImpl constElement = new ConstFieldElementImpl( 2653 ConstFieldElementImpl constElement =
2657 serializedVariable.name, serializedVariable.nameOffset); 2654 new ConstFieldElementImpl.forSerialized(
2655 serializedVariable, enclosingClass);
2658 element = constElement; 2656 element = constElement;
2659 constElement.constantInitializer = 2657 constElement.constantInitializer =
2660 _buildConstExpression(enclosingClass, serializedVariable.constExpr); 2658 _buildConstExpression(enclosingClass, serializedVariable.constExpr);
2661 } else { 2659 } else {
2662 element = new FieldElementImpl( 2660 element = new FieldElementImpl.forSerialized(
2663 serializedVariable.name, serializedVariable.nameOffset); 2661 serializedVariable, enclosingClass);
2664 } 2662 }
2665 buildPropertyIntroducingElementCommonParts(element, serializedVariable); 2663 buildPropertyIntroducingElementCommonParts(element, serializedVariable);
2666 element.static = serializedVariable.isStatic; 2664 element.static = serializedVariable.isStatic;
2667 holder.addField(element); 2665 holder.addField(element);
2668 buildImplicitAccessors(element, holder); 2666 buildImplicitAccessors(element, holder);
2669 fields[element.name] = element; 2667 fields[element.name] = element;
2670 } 2668 }
2671 } 2669 }
2672 2670
2673 /** 2671 /**
2674 * Handle the parts that are common to variables. 2672 * Handle the parts that are common to variables.
2675 */ 2673 */
2676 void buildVariableCommonParts( 2674 void buildVariableCommonParts(
2677 VariableElementImpl element, UnlinkedVariable serializedVariable, 2675 VariableElementImpl element, UnlinkedVariable serializedVariable) {
2678 {bool isLazilyResynthesized: false}) {
2679 element.type = buildLinkedType(serializedVariable.inferredTypeSlot, 2676 element.type = buildLinkedType(serializedVariable.inferredTypeSlot,
2680 _currentTypeParameterizedElement) ?? 2677 _currentTypeParameterizedElement) ??
2681 buildType(serializedVariable.type, _currentTypeParameterizedElement); 2678 buildType(serializedVariable.type, _currentTypeParameterizedElement);
2682 if (!isLazilyResynthesized) {
2683 element.const3 = serializedVariable.isConst;
2684 element.final2 = serializedVariable.isFinal;
2685 element.hasImplicitType = serializedVariable.type == null;
2686 buildDocumentation(element, serializedVariable.documentationComment);
2687 buildAnnotations(element, serializedVariable.annotations);
2688 buildCodeRange(element, serializedVariable.codeRange);
2689 }
2690 buildVariableInitializer(element, serializedVariable.initializer); 2679 buildVariableInitializer(element, serializedVariable.initializer);
2691 } 2680 }
2692 2681
2693 /** 2682 /**
2694 * If the given [serializedInitializer] is not `null`, create the 2683 * If the given [serializedInitializer] is not `null`, create the
2695 * corresponding [FunctionElementImpl] and set it for the [variable]. 2684 * corresponding [FunctionElementImpl] and set it for the [variable].
2696 */ 2685 */
2697 void buildVariableInitializer( 2686 void buildVariableInitializer(
2698 VariableElementImpl variable, UnlinkedExecutable serializedInitializer) { 2687 VariableElementImpl variable, UnlinkedExecutable serializedInitializer) {
2699 if (serializedInitializer == null) { 2688 if (serializedInitializer == null) {
(...skipping 271 matching lines...) Expand 10 before | Expand all | Expand 10 after
2971 static String _getElementIdentifier(String name, ReferenceKind kind) { 2960 static String _getElementIdentifier(String name, ReferenceKind kind) {
2972 if (kind == ReferenceKind.topLevelPropertyAccessor || 2961 if (kind == ReferenceKind.topLevelPropertyAccessor ||
2973 kind == ReferenceKind.propertyAccessor) { 2962 kind == ReferenceKind.propertyAccessor) {
2974 if (!name.endsWith('=')) { 2963 if (!name.endsWith('=')) {
2975 return name + '?'; 2964 return name + '?';
2976 } 2965 }
2977 } 2966 }
2978 return name; 2967 return name;
2979 } 2968 }
2980 } 2969 }
OLDNEW
« no previous file with comments | « pkg/analyzer/lib/src/dart/element/element.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698