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

Side by Side Diff: pkg/analyzer/lib/src/generated/resolver.dart

Issue 1447373002: re-land Use FunctionElementImpl for inline function type parameters (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 5 years, 1 month 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
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 engine.resolver; 5 library engine.resolver;
6 6
7 import 'dart:collection'; 7 import 'dart:collection';
8 8
9 import 'ast.dart'; 9 import 'ast.dart';
10 import 'constant.dart'; 10 import 'constant.dart';
(...skipping 14921 matching lines...) Expand 10 before | Expand all | Expand 10 after
14932 * Given a parameter element, create a function type based on the given return type and parameter 14932 * Given a parameter element, create a function type based on the given return type and parameter
14933 * list and associate the created type with the element. 14933 * list and associate the created type with the element.
14934 * 14934 *
14935 * @param element the parameter element whose type is to be set 14935 * @param element the parameter element whose type is to be set
14936 * @param returnType the (possibly `null`) return type of the function 14936 * @param returnType the (possibly `null`) return type of the function
14937 * @param parameterList the list of parameters to the function 14937 * @param parameterList the list of parameters to the function
14938 */ 14938 */
14939 void _setFunctionTypedParameterType(ParameterElementImpl element, 14939 void _setFunctionTypedParameterType(ParameterElementImpl element,
14940 TypeName returnType, FormalParameterList parameterList) { 14940 TypeName returnType, FormalParameterList parameterList) {
14941 List<ParameterElement> parameters = _getElements(parameterList); 14941 List<ParameterElement> parameters = _getElements(parameterList);
14942 FunctionTypeAliasElementImpl aliasElement = 14942 FunctionElementImpl functionElement = new FunctionElementImpl.forNode(null);
14943 new FunctionTypeAliasElementImpl.forNode(null); 14943 functionElement.synthetic = true;
14944 aliasElement.synthetic = true; 14944 functionElement.shareParameters(parameters);
14945 aliasElement.shareParameters(parameters); 14945 functionElement.returnType = _computeReturnType(returnType);
14946 aliasElement.returnType = _computeReturnType(returnType); 14946 functionElement.enclosingElement = element;
14947 // FunctionTypeAliasElementImpl assumes the enclosing element is a 14947 element.type = new FunctionTypeImpl(functionElement);
14948 // CompilationUnitElement (because non-synthetic function types can only be
14949 // declared at top level), so to avoid breaking things, go find the
14950 // compilation unit element.
14951 aliasElement.enclosingElement =
14952 element.getAncestor((element) => element is CompilationUnitElement);
14953 ClassElement definingClass =
14954 element.getAncestor((element) => element is ClassElement);
14955 if (definingClass != null) {
14956 aliasElement.shareTypeParameters(definingClass.typeParameters);
14957 } else {
14958 FunctionTypeAliasElement alias =
14959 element.getAncestor((element) => element is FunctionTypeAliasElement);
14960 while (alias != null && alias.isSynthetic) {
14961 alias =
14962 alias.getAncestor((element) => element is FunctionTypeAliasElement);
14963 }
14964 if (alias != null) {
14965 aliasElement.typeParameters = alias.typeParameters;
14966 }
14967 }
14968 element.type = new FunctionTypeImpl.forTypedef(aliasElement);
14969 } 14948 }
14970 14949
14971 /** 14950 /**
14972 * @return `true` if the name of the given [TypeName] is an built-in identifie r. 14951 * @return `true` if the name of the given [TypeName] is an built-in identifie r.
14973 */ 14952 */
14974 static bool _isBuiltInIdentifier(TypeName node) { 14953 static bool _isBuiltInIdentifier(TypeName node) {
14975 sc.Token token = node.name.beginToken; 14954 sc.Token token = node.name.beginToken;
14976 return token.type == sc.TokenType.KEYWORD; 14955 return token.type == sc.TokenType.KEYWORD;
14977 } 14956 }
14978 14957
(...skipping 591 matching lines...) Expand 10 before | Expand all | Expand 10 after
15570 nonFields.add(node); 15549 nonFields.add(node);
15571 return null; 15550 return null;
15572 } 15551 }
15573 15552
15574 @override 15553 @override
15575 Object visitNode(AstNode node) => node.accept(TypeResolverVisitor_this); 15554 Object visitNode(AstNode node) => node.accept(TypeResolverVisitor_this);
15576 15555
15577 @override 15556 @override
15578 Object visitWithClause(WithClause node) => null; 15557 Object visitWithClause(WithClause node) => null;
15579 } 15558 }
OLDNEW
« no previous file with comments | « pkg/analyzer/lib/src/generated/error_verifier.dart ('k') | pkg/analyzer/test/generated/resolver_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698