| 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 engine.resolver; | 5 library engine.resolver; |
| 6 | 6 |
| 7 import 'dart:collection'; | 7 import 'dart:collection'; |
| 8 import "dart:math" as math; | 8 import "dart:math" as math; |
| 9 | 9 |
| 10 import 'package:analyzer/src/generated/utilities_collection.dart'; | 10 import 'package:analyzer/src/generated/utilities_collection.dart'; |
| (...skipping 2514 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2525 _inFunction = true; | 2525 _inFunction = true; |
| 2526 try { | 2526 try { |
| 2527 _visitChildren(holder, node); | 2527 _visitChildren(holder, node); |
| 2528 } finally { | 2528 } finally { |
| 2529 _inFunction = wasInFunction; | 2529 _inFunction = wasInFunction; |
| 2530 } | 2530 } |
| 2531 FunctionBody body = node.body; | 2531 FunctionBody body = node.body; |
| 2532 SimpleIdentifier constructorName = node.name; | 2532 SimpleIdentifier constructorName = node.name; |
| 2533 ConstructorElementImpl element = | 2533 ConstructorElementImpl element = |
| 2534 new ConstructorElementImpl.forNode(constructorName); | 2534 new ConstructorElementImpl.forNode(constructorName); |
| 2535 if (node.externalKeyword != null) { |
| 2536 element.external = true; |
| 2537 } |
| 2535 if (node.factoryKeyword != null) { | 2538 if (node.factoryKeyword != null) { |
| 2536 element.factory = true; | 2539 element.factory = true; |
| 2537 } | 2540 } |
| 2538 element.functions = holder.functions; | 2541 element.functions = holder.functions; |
| 2539 element.labels = holder.labels; | 2542 element.labels = holder.labels; |
| 2540 element.localVariables = holder.localVariables; | 2543 element.localVariables = holder.localVariables; |
| 2541 element.parameters = holder.parameters; | 2544 element.parameters = holder.parameters; |
| 2542 element.const2 = node.constKeyword != null; | 2545 element.const2 = node.constKeyword != null; |
| 2543 if (body.isAsynchronous) { | 2546 if (body.isAsynchronous) { |
| 2544 element.asynchronous = true; | 2547 element.asynchronous = true; |
| (...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2684 _visitChildren(holder, node); | 2687 _visitChildren(holder, node); |
| 2685 } finally { | 2688 } finally { |
| 2686 _inFunction = wasInFunction; | 2689 _inFunction = wasInFunction; |
| 2687 } | 2690 } |
| 2688 FunctionBody body = expression.body; | 2691 FunctionBody body = expression.body; |
| 2689 sc.Token property = node.propertyKeyword; | 2692 sc.Token property = node.propertyKeyword; |
| 2690 if (property == null || _inFunction) { | 2693 if (property == null || _inFunction) { |
| 2691 SimpleIdentifier functionName = node.name; | 2694 SimpleIdentifier functionName = node.name; |
| 2692 FunctionElementImpl element = | 2695 FunctionElementImpl element = |
| 2693 new FunctionElementImpl.forNode(functionName); | 2696 new FunctionElementImpl.forNode(functionName); |
| 2697 if (node.externalKeyword != null) { |
| 2698 element.external = true; |
| 2699 } |
| 2694 element.functions = holder.functions; | 2700 element.functions = holder.functions; |
| 2695 element.labels = holder.labels; | 2701 element.labels = holder.labels; |
| 2696 element.localVariables = holder.localVariables; | 2702 element.localVariables = holder.localVariables; |
| 2697 element.parameters = holder.parameters; | 2703 element.parameters = holder.parameters; |
| 2698 if (body.isAsynchronous) { | 2704 if (body.isAsynchronous) { |
| 2699 element.asynchronous = true; | 2705 element.asynchronous = true; |
| 2700 } | 2706 } |
| 2701 if (body.isGenerator) { | 2707 if (body.isGenerator) { |
| 2702 element.generator = true; | 2708 element.generator = true; |
| 2703 } | 2709 } |
| (...skipping 19 matching lines...) Expand all Loading... |
| 2723 .getTopLevelVariable(propertyName) as TopLevelVariableElementImpl; | 2729 .getTopLevelVariable(propertyName) as TopLevelVariableElementImpl; |
| 2724 if (variable == null) { | 2730 if (variable == null) { |
| 2725 variable = new TopLevelVariableElementImpl(node.name.name, -1); | 2731 variable = new TopLevelVariableElementImpl(node.name.name, -1); |
| 2726 variable.final2 = true; | 2732 variable.final2 = true; |
| 2727 variable.synthetic = true; | 2733 variable.synthetic = true; |
| 2728 _currentHolder.addTopLevelVariable(variable); | 2734 _currentHolder.addTopLevelVariable(variable); |
| 2729 } | 2735 } |
| 2730 if (node.isGetter) { | 2736 if (node.isGetter) { |
| 2731 PropertyAccessorElementImpl getter = | 2737 PropertyAccessorElementImpl getter = |
| 2732 new PropertyAccessorElementImpl.forNode(propertyNameNode); | 2738 new PropertyAccessorElementImpl.forNode(propertyNameNode); |
| 2739 if (node.externalKeyword != null) { |
| 2740 getter.external = true; |
| 2741 } |
| 2733 getter.functions = holder.functions; | 2742 getter.functions = holder.functions; |
| 2734 getter.labels = holder.labels; | 2743 getter.labels = holder.labels; |
| 2735 getter.localVariables = holder.localVariables; | 2744 getter.localVariables = holder.localVariables; |
| 2736 if (body.isAsynchronous) { | 2745 if (body.isAsynchronous) { |
| 2737 getter.asynchronous = true; | 2746 getter.asynchronous = true; |
| 2738 } | 2747 } |
| 2739 if (body.isGenerator) { | 2748 if (body.isGenerator) { |
| 2740 getter.generator = true; | 2749 getter.generator = true; |
| 2741 } | 2750 } |
| 2742 getter.variable = variable; | 2751 getter.variable = variable; |
| 2743 getter.getter = true; | 2752 getter.getter = true; |
| 2744 getter.static = true; | 2753 getter.static = true; |
| 2745 variable.getter = getter; | 2754 variable.getter = getter; |
| 2746 _currentHolder.addAccessor(getter); | 2755 _currentHolder.addAccessor(getter); |
| 2747 expression.element = getter; | 2756 expression.element = getter; |
| 2748 propertyNameNode.staticElement = getter; | 2757 propertyNameNode.staticElement = getter; |
| 2749 } else { | 2758 } else { |
| 2750 PropertyAccessorElementImpl setter = | 2759 PropertyAccessorElementImpl setter = |
| 2751 new PropertyAccessorElementImpl.forNode(propertyNameNode); | 2760 new PropertyAccessorElementImpl.forNode(propertyNameNode); |
| 2761 if (node.externalKeyword != null) { |
| 2762 setter.external = true; |
| 2763 } |
| 2752 setter.functions = holder.functions; | 2764 setter.functions = holder.functions; |
| 2753 setter.labels = holder.labels; | 2765 setter.labels = holder.labels; |
| 2754 setter.localVariables = holder.localVariables; | 2766 setter.localVariables = holder.localVariables; |
| 2755 setter.parameters = holder.parameters; | 2767 setter.parameters = holder.parameters; |
| 2756 if (body.isAsynchronous) { | 2768 if (body.isAsynchronous) { |
| 2757 setter.asynchronous = true; | 2769 setter.asynchronous = true; |
| 2758 } | 2770 } |
| 2759 if (body.isGenerator) { | 2771 if (body.isGenerator) { |
| 2760 setter.generator = true; | 2772 setter.generator = true; |
| 2761 } | 2773 } |
| (...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2893 if (property == null) { | 2905 if (property == null) { |
| 2894 SimpleIdentifier methodName = node.name; | 2906 SimpleIdentifier methodName = node.name; |
| 2895 String nameOfMethod = methodName.name; | 2907 String nameOfMethod = methodName.name; |
| 2896 if (nameOfMethod == sc.TokenType.MINUS.lexeme && | 2908 if (nameOfMethod == sc.TokenType.MINUS.lexeme && |
| 2897 node.parameters.parameters.length == 0) { | 2909 node.parameters.parameters.length == 0) { |
| 2898 nameOfMethod = "unary-"; | 2910 nameOfMethod = "unary-"; |
| 2899 } | 2911 } |
| 2900 MethodElementImpl element = | 2912 MethodElementImpl element = |
| 2901 new MethodElementImpl(nameOfMethod, methodName.offset); | 2913 new MethodElementImpl(nameOfMethod, methodName.offset); |
| 2902 element.abstract = node.isAbstract; | 2914 element.abstract = node.isAbstract; |
| 2915 if (node.externalKeyword != null) { |
| 2916 element.external = true; |
| 2917 } |
| 2903 element.functions = holder.functions; | 2918 element.functions = holder.functions; |
| 2904 element.labels = holder.labels; | 2919 element.labels = holder.labels; |
| 2905 element.localVariables = holder.localVariables; | 2920 element.localVariables = holder.localVariables; |
| 2906 element.parameters = holder.parameters; | 2921 element.parameters = holder.parameters; |
| 2907 element.static = isStatic; | 2922 element.static = isStatic; |
| 2908 if (body.isAsynchronous) { | 2923 if (body.isAsynchronous) { |
| 2909 element.asynchronous = true; | 2924 element.asynchronous = true; |
| 2910 } | 2925 } |
| 2911 if (body.isGenerator) { | 2926 if (body.isGenerator) { |
| 2912 element.generator = true; | 2927 element.generator = true; |
| 2913 } | 2928 } |
| 2914 _currentHolder.addMethod(element); | 2929 _currentHolder.addMethod(element); |
| 2915 methodName.staticElement = element; | 2930 methodName.staticElement = element; |
| 2916 } else { | 2931 } else { |
| 2917 SimpleIdentifier propertyNameNode = node.name; | 2932 SimpleIdentifier propertyNameNode = node.name; |
| 2918 String propertyName = propertyNameNode.name; | 2933 String propertyName = propertyNameNode.name; |
| 2919 FieldElementImpl field = | 2934 FieldElementImpl field = |
| 2920 _currentHolder.getField(propertyName) as FieldElementImpl; | 2935 _currentHolder.getField(propertyName) as FieldElementImpl; |
| 2921 if (field == null) { | 2936 if (field == null) { |
| 2922 field = new FieldElementImpl(node.name.name, -1); | 2937 field = new FieldElementImpl(node.name.name, -1); |
| 2923 field.final2 = true; | 2938 field.final2 = true; |
| 2924 field.static = isStatic; | 2939 field.static = isStatic; |
| 2925 field.synthetic = true; | 2940 field.synthetic = true; |
| 2926 _currentHolder.addField(field); | 2941 _currentHolder.addField(field); |
| 2927 } | 2942 } |
| 2928 if (node.isGetter) { | 2943 if (node.isGetter) { |
| 2929 PropertyAccessorElementImpl getter = | 2944 PropertyAccessorElementImpl getter = |
| 2930 new PropertyAccessorElementImpl.forNode(propertyNameNode); | 2945 new PropertyAccessorElementImpl.forNode(propertyNameNode); |
| 2946 if (node.externalKeyword != null) { |
| 2947 getter.external = true; |
| 2948 } |
| 2931 getter.functions = holder.functions; | 2949 getter.functions = holder.functions; |
| 2932 getter.labels = holder.labels; | 2950 getter.labels = holder.labels; |
| 2933 getter.localVariables = holder.localVariables; | 2951 getter.localVariables = holder.localVariables; |
| 2934 if (body.isAsynchronous) { | 2952 if (body.isAsynchronous) { |
| 2935 getter.asynchronous = true; | 2953 getter.asynchronous = true; |
| 2936 } | 2954 } |
| 2937 if (body.isGenerator) { | 2955 if (body.isGenerator) { |
| 2938 getter.generator = true; | 2956 getter.generator = true; |
| 2939 } | 2957 } |
| 2940 getter.variable = field; | 2958 getter.variable = field; |
| 2941 getter.abstract = node.isAbstract; | 2959 getter.abstract = node.isAbstract; |
| 2942 getter.getter = true; | 2960 getter.getter = true; |
| 2943 getter.static = isStatic; | 2961 getter.static = isStatic; |
| 2944 field.getter = getter; | 2962 field.getter = getter; |
| 2945 _currentHolder.addAccessor(getter); | 2963 _currentHolder.addAccessor(getter); |
| 2946 propertyNameNode.staticElement = getter; | 2964 propertyNameNode.staticElement = getter; |
| 2947 } else { | 2965 } else { |
| 2948 PropertyAccessorElementImpl setter = | 2966 PropertyAccessorElementImpl setter = |
| 2949 new PropertyAccessorElementImpl.forNode(propertyNameNode); | 2967 new PropertyAccessorElementImpl.forNode(propertyNameNode); |
| 2968 if (node.externalKeyword != null) { |
| 2969 setter.external = true; |
| 2970 } |
| 2950 setter.functions = holder.functions; | 2971 setter.functions = holder.functions; |
| 2951 setter.labels = holder.labels; | 2972 setter.labels = holder.labels; |
| 2952 setter.localVariables = holder.localVariables; | 2973 setter.localVariables = holder.localVariables; |
| 2953 setter.parameters = holder.parameters; | 2974 setter.parameters = holder.parameters; |
| 2954 if (body.isAsynchronous) { | 2975 if (body.isAsynchronous) { |
| 2955 setter.asynchronous = true; | 2976 setter.asynchronous = true; |
| 2956 } | 2977 } |
| 2957 if (body.isGenerator) { | 2978 if (body.isGenerator) { |
| 2958 setter.generator = true; | 2979 setter.generator = true; |
| 2959 } | 2980 } |
| (...skipping 12507 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 15467 nonFields.add(node); | 15488 nonFields.add(node); |
| 15468 return null; | 15489 return null; |
| 15469 } | 15490 } |
| 15470 | 15491 |
| 15471 @override | 15492 @override |
| 15472 Object visitNode(AstNode node) => node.accept(TypeResolverVisitor_this); | 15493 Object visitNode(AstNode node) => node.accept(TypeResolverVisitor_this); |
| 15473 | 15494 |
| 15474 @override | 15495 @override |
| 15475 Object visitWithClause(WithClause node) => null; | 15496 Object visitWithClause(WithClause node) => null; |
| 15476 } | 15497 } |
| OLD | NEW |