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

Side by Side Diff: pkg/analyzer/lib/src/dart/element/member.dart

Issue 2707983002: Fix stack overflow printing recursive function types (issue 28835) (Closed)
Patch Set: Created 3 years, 10 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/error/listener.dart ('k') | pkg/analyzer/lib/src/dart/element/type.dart » ('j') | 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) 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.member; 5 library analyzer.src.dart.element.member;
6 6
7 import 'package:analyzer/dart/ast/ast.dart'; 7 import 'package:analyzer/dart/ast/ast.dart';
8 import 'package:analyzer/dart/constant/value.dart'; 8 import 'package:analyzer/dart/constant/value.dart';
9 import 'package:analyzer/dart/element/element.dart'; 9 import 'package:analyzer/dart/element/element.dart';
10 import 'package:analyzer/dart/element/type.dart'; 10 import 'package:analyzer/dart/element/type.dart';
(...skipping 213 matching lines...) Expand 10 before | Expand all | Expand 10 after
224 * Initialize a newly created element to represent a field formal parameter, 224 * Initialize a newly created element to represent a field formal parameter,
225 * based on the [baseElement], defined by the [definingType]. If [type] 225 * based on the [baseElement], defined by the [definingType]. If [type]
226 * is passed it will be used as the substituted type for this member. 226 * is passed it will be used as the substituted type for this member.
227 */ 227 */
228 FieldFormalParameterMember( 228 FieldFormalParameterMember(
229 FieldFormalParameterElement baseElement, ParameterizedType definingType, 229 FieldFormalParameterElement baseElement, ParameterizedType definingType,
230 [DartType type]) 230 [DartType type])
231 : super(baseElement, definingType, type); 231 : super(baseElement, definingType, type);
232 232
233 @override 233 @override
234 bool get isCovariant => baseElement.isCovariant;
235
236 @override
237 FieldElement get field { 234 FieldElement get field {
238 FieldElement field = (baseElement as FieldFormalParameterElement).field; 235 FieldElement field = (baseElement as FieldFormalParameterElement).field;
239 if (field is FieldElement) { 236 if (field is FieldElement) {
240 return FieldMember.from( 237 return FieldMember.from(
241 field, substituteFor(field.enclosingElement.type)); 238 field, substituteFor(field.enclosingElement.type));
242 } 239 }
243 return field; 240 return field;
244 } 241 }
245 242
246 @override 243 @override
244 bool get isCovariant => baseElement.isCovariant;
245
246 @override
247 /*=T*/ accept/*<T>*/(ElementVisitor<dynamic/*=T*/ > visitor) => 247 /*=T*/ accept/*<T>*/(ElementVisitor<dynamic/*=T*/ > visitor) =>
248 visitor.visitFieldFormalParameterElement(this); 248 visitor.visitFieldFormalParameterElement(this);
249 } 249 }
250 250
251 /** 251 /**
252 * A field element defined in a parameterized type where the values of the type 252 * A field element defined in a parameterized type where the values of the type
253 * parameters are known. 253 * parameters are known.
254 */ 254 */
255 class FieldMember extends VariableMember implements FieldElement { 255 class FieldMember extends VariableMember implements FieldElement {
256 /** 256 /**
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after
379 /*=T*/ accept/*<T>*/(ElementVisitor<dynamic/*=T*/ > visitor) => 379 /*=T*/ accept/*<T>*/(ElementVisitor<dynamic/*=T*/ > visitor) =>
380 visitor.visitFunctionElement(this); 380 visitor.visitFunctionElement(this);
381 381
382 @override 382 @override
383 FunctionDeclaration computeNode() => baseElement.computeNode(); 383 FunctionDeclaration computeNode() => baseElement.computeNode();
384 384
385 @override 385 @override
386 String toString() { 386 String toString() {
387 StringBuffer buffer = new StringBuffer(); 387 StringBuffer buffer = new StringBuffer();
388 buffer.write(baseElement.displayName); 388 buffer.write(baseElement.displayName);
389 (type as FunctionTypeImpl).appendTo(buffer); 389 (type as FunctionTypeImpl).appendTo(buffer, new Set.identity());
390 return buffer.toString(); 390 return buffer.toString();
391 } 391 }
392 392
393 /** 393 /**
394 * If the given [method]'s type is different when any type parameters from the 394 * If the given [method]'s type is different when any type parameters from the
395 * defining type's declaration are replaced with the actual type arguments 395 * defining type's declaration are replaced with the actual type arguments
396 * from the [definingType], create a method member representing the given 396 * from the [definingType], create a method member representing the given
397 * method. Return the member that was created, or the base method if no member 397 * method. Return the member that was created, or the base method if no member
398 * was created. 398 * was created.
399 */ 399 */
(...skipping 649 matching lines...) Expand 10 before | Expand all | Expand 10 after
1049 DartObject computeConstantValue() => baseElement.computeConstantValue(); 1049 DartObject computeConstantValue() => baseElement.computeConstantValue();
1050 1050
1051 @override 1051 @override
1052 void visitChildren(ElementVisitor visitor) { 1052 void visitChildren(ElementVisitor visitor) {
1053 // TODO(brianwilkerson) We need to finish implementing the accessors used 1053 // TODO(brianwilkerson) We need to finish implementing the accessors used
1054 // below so that we can safely invoke them. 1054 // below so that we can safely invoke them.
1055 super.visitChildren(visitor); 1055 super.visitChildren(visitor);
1056 baseElement.initializer?.accept(visitor); 1056 baseElement.initializer?.accept(visitor);
1057 } 1057 }
1058 } 1058 }
OLDNEW
« no previous file with comments | « pkg/analyzer/lib/error/listener.dart ('k') | pkg/analyzer/lib/src/dart/element/type.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698