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

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

Issue 1534043002: Cache element docs (and add to completions) (#23694). (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: tweaks Created 5 years 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/generated/element_handle.dart ('k') | pkg/analyzer/lib/src/task/dart.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.generated.resolver; 5 library analyzer.src.generated.resolver;
6 6
7 import 'dart:collection'; 7 import 'dart:collection';
8 8
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 2678 matching lines...) Expand 10 before | Expand all | Expand 10 after
2689 _currentHolder = previousHolder; 2689 _currentHolder = previousHolder;
2690 } 2690 }
2691 SimpleIdentifier className = node.name; 2691 SimpleIdentifier className = node.name;
2692 ClassElementImpl element = new ClassElementImpl.forNode(className); 2692 ClassElementImpl element = new ClassElementImpl.forNode(className);
2693 List<TypeParameterElement> typeParameters = holder.typeParameters; 2693 List<TypeParameterElement> typeParameters = holder.typeParameters;
2694 List<DartType> typeArguments = _createTypeParameterTypes(typeParameters); 2694 List<DartType> typeArguments = _createTypeParameterTypes(typeParameters);
2695 InterfaceTypeImpl interfaceType = new InterfaceTypeImpl(element); 2695 InterfaceTypeImpl interfaceType = new InterfaceTypeImpl(element);
2696 interfaceType.typeArguments = typeArguments; 2696 interfaceType.typeArguments = typeArguments;
2697 element.type = interfaceType; 2697 element.type = interfaceType;
2698 element.typeParameters = typeParameters; 2698 element.typeParameters = typeParameters;
2699 _setDocRange(element, node); 2699 _setDoc(element, node);
2700 element.abstract = node.isAbstract; 2700 element.abstract = node.isAbstract;
2701 element.accessors = holder.accessors; 2701 element.accessors = holder.accessors;
2702 List<ConstructorElement> constructors = holder.constructors; 2702 List<ConstructorElement> constructors = holder.constructors;
2703 if (constructors.isEmpty) { 2703 if (constructors.isEmpty) {
2704 constructors = _createDefaultConstructors(element); 2704 constructors = _createDefaultConstructors(element);
2705 } 2705 }
2706 element.constructors = constructors; 2706 element.constructors = constructors;
2707 element.fields = holder.fields; 2707 element.fields = holder.fields;
2708 element.methods = holder.methods; 2708 element.methods = holder.methods;
2709 element.validMixin = _isValidMixin; 2709 element.validMixin = _isValidMixin;
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
2761 _inFunction = true; 2761 _inFunction = true;
2762 try { 2762 try {
2763 _visitChildren(holder, node); 2763 _visitChildren(holder, node);
2764 } finally { 2764 } finally {
2765 _inFunction = wasInFunction; 2765 _inFunction = wasInFunction;
2766 } 2766 }
2767 FunctionBody body = node.body; 2767 FunctionBody body = node.body;
2768 SimpleIdentifier constructorName = node.name; 2768 SimpleIdentifier constructorName = node.name;
2769 ConstructorElementImpl element = 2769 ConstructorElementImpl element =
2770 new ConstructorElementImpl.forNode(constructorName); 2770 new ConstructorElementImpl.forNode(constructorName);
2771 _setDocRange(element, node); 2771 _setDoc(element, node);
2772 if (node.externalKeyword != null) { 2772 if (node.externalKeyword != null) {
2773 element.external = true; 2773 element.external = true;
2774 } 2774 }
2775 if (node.factoryKeyword != null) { 2775 if (node.factoryKeyword != null) {
2776 element.factory = true; 2776 element.factory = true;
2777 } 2777 }
2778 element.functions = holder.functions; 2778 element.functions = holder.functions;
2779 element.labels = holder.labels; 2779 element.labels = holder.labels;
2780 element.localVariables = holder.localVariables; 2780 element.localVariables = holder.localVariables;
2781 element.parameters = holder.parameters; 2781 element.parameters = holder.parameters;
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
2866 normalParameter.accept(this); 2866 normalParameter.accept(this);
2867 holder.validate(); 2867 holder.validate();
2868 return null; 2868 return null;
2869 } 2869 }
2870 2870
2871 @override 2871 @override
2872 Object visitEnumDeclaration(EnumDeclaration node) { 2872 Object visitEnumDeclaration(EnumDeclaration node) {
2873 SimpleIdentifier enumName = node.name; 2873 SimpleIdentifier enumName = node.name;
2874 ClassElementImpl enumElement = new ClassElementImpl.forNode(enumName); 2874 ClassElementImpl enumElement = new ClassElementImpl.forNode(enumName);
2875 enumElement.enum2 = true; 2875 enumElement.enum2 = true;
2876 _setDocRange(enumElement, node); 2876 _setDoc(enumElement, node);
2877 InterfaceTypeImpl enumType = new InterfaceTypeImpl(enumElement); 2877 InterfaceTypeImpl enumType = new InterfaceTypeImpl(enumElement);
2878 enumElement.type = enumType; 2878 enumElement.type = enumType;
2879 // The equivalent code for enums in the spec shows a single constructor, 2879 // The equivalent code for enums in the spec shows a single constructor,
2880 // but that constructor is not callable (since it is a compile-time error 2880 // but that constructor is not callable (since it is a compile-time error
2881 // to subclass, mix-in, implement, or explicitly instantiate an enum). So 2881 // to subclass, mix-in, implement, or explicitly instantiate an enum). So
2882 // we represent this as having no constructors. 2882 // we represent this as having no constructors.
2883 enumElement.constructors = ConstructorElement.EMPTY_LIST; 2883 enumElement.constructors = ConstructorElement.EMPTY_LIST;
2884 _currentHolder.addEnum(enumElement); 2884 _currentHolder.addEnum(enumElement);
2885 enumName.staticElement = enumElement; 2885 enumName.staticElement = enumElement;
2886 return super.visitEnumDeclaration(node); 2886 return super.visitEnumDeclaration(node);
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
2939 _visitChildren(holder, node); 2939 _visitChildren(holder, node);
2940 } finally { 2940 } finally {
2941 _inFunction = wasInFunction; 2941 _inFunction = wasInFunction;
2942 } 2942 }
2943 FunctionBody body = expression.body; 2943 FunctionBody body = expression.body;
2944 Token property = node.propertyKeyword; 2944 Token property = node.propertyKeyword;
2945 if (property == null || _inFunction) { 2945 if (property == null || _inFunction) {
2946 SimpleIdentifier functionName = node.name; 2946 SimpleIdentifier functionName = node.name;
2947 FunctionElementImpl element = 2947 FunctionElementImpl element =
2948 new FunctionElementImpl.forNode(functionName); 2948 new FunctionElementImpl.forNode(functionName);
2949 _setDocRange(element, node); 2949 _setDoc(element, node);
2950 if (node.externalKeyword != null) { 2950 if (node.externalKeyword != null) {
2951 element.external = true; 2951 element.external = true;
2952 } 2952 }
2953 element.functions = holder.functions; 2953 element.functions = holder.functions;
2954 element.labels = holder.labels; 2954 element.labels = holder.labels;
2955 element.localVariables = holder.localVariables; 2955 element.localVariables = holder.localVariables;
2956 element.parameters = holder.parameters; 2956 element.parameters = holder.parameters;
2957 element.typeParameters = holder.typeParameters; 2957 element.typeParameters = holder.typeParameters;
2958 if (body.isAsynchronous) { 2958 if (body.isAsynchronous) {
2959 element.asynchronous = true; 2959 element.asynchronous = true;
(...skipping 26 matching lines...) Expand all
2986 .getTopLevelVariable(propertyName) as TopLevelVariableElementImpl; 2986 .getTopLevelVariable(propertyName) as TopLevelVariableElementImpl;
2987 if (variable == null) { 2987 if (variable == null) {
2988 variable = new TopLevelVariableElementImpl(node.name.name, -1); 2988 variable = new TopLevelVariableElementImpl(node.name.name, -1);
2989 variable.final2 = true; 2989 variable.final2 = true;
2990 variable.synthetic = true; 2990 variable.synthetic = true;
2991 _currentHolder.addTopLevelVariable(variable); 2991 _currentHolder.addTopLevelVariable(variable);
2992 } 2992 }
2993 if (node.isGetter) { 2993 if (node.isGetter) {
2994 PropertyAccessorElementImpl getter = 2994 PropertyAccessorElementImpl getter =
2995 new PropertyAccessorElementImpl.forNode(propertyNameNode); 2995 new PropertyAccessorElementImpl.forNode(propertyNameNode);
2996 _setDocRange(getter, node); 2996 _setDoc(getter, node);
2997 if (node.externalKeyword != null) { 2997 if (node.externalKeyword != null) {
2998 getter.external = true; 2998 getter.external = true;
2999 } 2999 }
3000 getter.functions = holder.functions; 3000 getter.functions = holder.functions;
3001 getter.labels = holder.labels; 3001 getter.labels = holder.labels;
3002 getter.localVariables = holder.localVariables; 3002 getter.localVariables = holder.localVariables;
3003 if (body.isAsynchronous) { 3003 if (body.isAsynchronous) {
3004 getter.asynchronous = true; 3004 getter.asynchronous = true;
3005 } 3005 }
3006 if (body.isGenerator) { 3006 if (body.isGenerator) {
3007 getter.generator = true; 3007 getter.generator = true;
3008 } 3008 }
3009 getter.variable = variable; 3009 getter.variable = variable;
3010 getter.getter = true; 3010 getter.getter = true;
3011 getter.static = true; 3011 getter.static = true;
3012 variable.getter = getter; 3012 variable.getter = getter;
3013 if (node.returnType == null) { 3013 if (node.returnType == null) {
3014 getter.hasImplicitReturnType = true; 3014 getter.hasImplicitReturnType = true;
3015 } 3015 }
3016 _currentHolder.addAccessor(getter); 3016 _currentHolder.addAccessor(getter);
3017 expression.element = getter; 3017 expression.element = getter;
3018 propertyNameNode.staticElement = getter; 3018 propertyNameNode.staticElement = getter;
3019 } else { 3019 } else {
3020 PropertyAccessorElementImpl setter = 3020 PropertyAccessorElementImpl setter =
3021 new PropertyAccessorElementImpl.forNode(propertyNameNode); 3021 new PropertyAccessorElementImpl.forNode(propertyNameNode);
3022 _setDocRange(setter, node); 3022 _setDoc(setter, node);
3023 if (node.externalKeyword != null) { 3023 if (node.externalKeyword != null) {
3024 setter.external = true; 3024 setter.external = true;
3025 } 3025 }
3026 setter.functions = holder.functions; 3026 setter.functions = holder.functions;
3027 setter.labels = holder.labels; 3027 setter.labels = holder.labels;
3028 setter.localVariables = holder.localVariables; 3028 setter.localVariables = holder.localVariables;
3029 setter.parameters = holder.parameters; 3029 setter.parameters = holder.parameters;
3030 if (body.isAsynchronous) { 3030 if (body.isAsynchronous) {
3031 setter.asynchronous = true; 3031 setter.asynchronous = true;
3032 } 3032 }
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
3103 3103
3104 @override 3104 @override
3105 Object visitFunctionTypeAlias(FunctionTypeAlias node) { 3105 Object visitFunctionTypeAlias(FunctionTypeAlias node) {
3106 ElementHolder holder = new ElementHolder(); 3106 ElementHolder holder = new ElementHolder();
3107 _visitChildren(holder, node); 3107 _visitChildren(holder, node);
3108 SimpleIdentifier aliasName = node.name; 3108 SimpleIdentifier aliasName = node.name;
3109 List<ParameterElement> parameters = holder.parameters; 3109 List<ParameterElement> parameters = holder.parameters;
3110 List<TypeParameterElement> typeParameters = holder.typeParameters; 3110 List<TypeParameterElement> typeParameters = holder.typeParameters;
3111 FunctionTypeAliasElementImpl element = 3111 FunctionTypeAliasElementImpl element =
3112 new FunctionTypeAliasElementImpl.forNode(aliasName); 3112 new FunctionTypeAliasElementImpl.forNode(aliasName);
3113 _setDocRange(element, node); 3113 _setDoc(element, node);
3114 element.parameters = parameters; 3114 element.parameters = parameters;
3115 element.typeParameters = typeParameters; 3115 element.typeParameters = typeParameters;
3116 _createTypeParameterTypes(typeParameters); 3116 _createTypeParameterTypes(typeParameters);
3117 element.type = new FunctionTypeImpl.forTypedef(element); 3117 element.type = new FunctionTypeImpl.forTypedef(element);
3118 _currentHolder.addTypeAlias(element); 3118 _currentHolder.addTypeAlias(element);
3119 aliasName.staticElement = element; 3119 aliasName.staticElement = element;
3120 holder.validate(); 3120 holder.validate();
3121 return null; 3121 return null;
3122 } 3122 }
3123 3123
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
3174 FunctionBody body = node.body; 3174 FunctionBody body = node.body;
3175 if (property == null) { 3175 if (property == null) {
3176 SimpleIdentifier methodName = node.name; 3176 SimpleIdentifier methodName = node.name;
3177 String nameOfMethod = methodName.name; 3177 String nameOfMethod = methodName.name;
3178 if (nameOfMethod == TokenType.MINUS.lexeme && 3178 if (nameOfMethod == TokenType.MINUS.lexeme &&
3179 node.parameters.parameters.length == 0) { 3179 node.parameters.parameters.length == 0) {
3180 nameOfMethod = "unary-"; 3180 nameOfMethod = "unary-";
3181 } 3181 }
3182 MethodElementImpl element = 3182 MethodElementImpl element =
3183 new MethodElementImpl(nameOfMethod, methodName.offset); 3183 new MethodElementImpl(nameOfMethod, methodName.offset);
3184 _setDocRange(element, node); 3184 _setDoc(element, node);
3185 element.abstract = node.isAbstract; 3185 element.abstract = node.isAbstract;
3186 if (node.externalKeyword != null) { 3186 if (node.externalKeyword != null) {
3187 element.external = true; 3187 element.external = true;
3188 } 3188 }
3189 element.functions = holder.functions; 3189 element.functions = holder.functions;
3190 element.labels = holder.labels; 3190 element.labels = holder.labels;
3191 element.localVariables = holder.localVariables; 3191 element.localVariables = holder.localVariables;
3192 element.parameters = holder.parameters; 3192 element.parameters = holder.parameters;
3193 element.static = isStatic; 3193 element.static = isStatic;
3194 element.typeParameters = holder.typeParameters; 3194 element.typeParameters = holder.typeParameters;
(...skipping 16 matching lines...) Expand all
3211 if (field == null) { 3211 if (field == null) {
3212 field = new FieldElementImpl(node.name.name, -1); 3212 field = new FieldElementImpl(node.name.name, -1);
3213 field.final2 = true; 3213 field.final2 = true;
3214 field.static = isStatic; 3214 field.static = isStatic;
3215 field.synthetic = true; 3215 field.synthetic = true;
3216 _currentHolder.addField(field); 3216 _currentHolder.addField(field);
3217 } 3217 }
3218 if (node.isGetter) { 3218 if (node.isGetter) {
3219 PropertyAccessorElementImpl getter = 3219 PropertyAccessorElementImpl getter =
3220 new PropertyAccessorElementImpl.forNode(propertyNameNode); 3220 new PropertyAccessorElementImpl.forNode(propertyNameNode);
3221 _setDocRange(getter, node); 3221 _setDoc(getter, node);
3222 if (node.externalKeyword != null) { 3222 if (node.externalKeyword != null) {
3223 getter.external = true; 3223 getter.external = true;
3224 } 3224 }
3225 getter.functions = holder.functions; 3225 getter.functions = holder.functions;
3226 getter.labels = holder.labels; 3226 getter.labels = holder.labels;
3227 getter.localVariables = holder.localVariables; 3227 getter.localVariables = holder.localVariables;
3228 if (body.isAsynchronous) { 3228 if (body.isAsynchronous) {
3229 getter.asynchronous = true; 3229 getter.asynchronous = true;
3230 } 3230 }
3231 if (body.isGenerator) { 3231 if (body.isGenerator) {
3232 getter.generator = true; 3232 getter.generator = true;
3233 } 3233 }
3234 getter.variable = field; 3234 getter.variable = field;
3235 getter.abstract = node.isAbstract; 3235 getter.abstract = node.isAbstract;
3236 getter.getter = true; 3236 getter.getter = true;
3237 getter.static = isStatic; 3237 getter.static = isStatic;
3238 field.getter = getter; 3238 field.getter = getter;
3239 if (node.returnType == null) { 3239 if (node.returnType == null) {
3240 getter.hasImplicitReturnType = true; 3240 getter.hasImplicitReturnType = true;
3241 } 3241 }
3242 _currentHolder.addAccessor(getter); 3242 _currentHolder.addAccessor(getter);
3243 propertyNameNode.staticElement = getter; 3243 propertyNameNode.staticElement = getter;
3244 } else { 3244 } else {
3245 PropertyAccessorElementImpl setter = 3245 PropertyAccessorElementImpl setter =
3246 new PropertyAccessorElementImpl.forNode(propertyNameNode); 3246 new PropertyAccessorElementImpl.forNode(propertyNameNode);
3247 _setDocRange(setter, node); 3247 _setDoc(setter, node);
3248 if (node.externalKeyword != null) { 3248 if (node.externalKeyword != null) {
3249 setter.external = true; 3249 setter.external = true;
3250 } 3250 }
3251 setter.functions = holder.functions; 3251 setter.functions = holder.functions;
3252 setter.labels = holder.labels; 3252 setter.labels = holder.labels;
3253 setter.localVariables = holder.localVariables; 3253 setter.localVariables = holder.localVariables;
3254 setter.parameters = holder.parameters; 3254 setter.parameters = holder.parameters;
3255 if (body.isAsynchronous) { 3255 if (body.isAsynchronous) {
3256 setter.asynchronous = true; 3256 setter.asynchronous = true;
3257 } 3257 }
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
3375 if (_inFieldContext) { 3375 if (_inFieldContext) {
3376 SimpleIdentifier fieldName = node.name; 3376 SimpleIdentifier fieldName = node.name;
3377 FieldElementImpl field; 3377 FieldElementImpl field;
3378 if ((isConst || isFinal) && hasInitializer) { 3378 if ((isConst || isFinal) && hasInitializer) {
3379 field = new ConstFieldElementImpl.forNode(fieldName); 3379 field = new ConstFieldElementImpl.forNode(fieldName);
3380 } else { 3380 } else {
3381 field = new FieldElementImpl.forNode(fieldName); 3381 field = new FieldElementImpl.forNode(fieldName);
3382 } 3382 }
3383 element = field; 3383 element = field;
3384 if (node.parent.parent is FieldDeclaration) { 3384 if (node.parent.parent is FieldDeclaration) {
3385 _setDocRange(element, node.parent.parent); 3385 _setDoc(element, node.parent.parent);
3386 } 3386 }
3387 if ((node.parent as VariableDeclarationList).type == null) { 3387 if ((node.parent as VariableDeclarationList).type == null) {
3388 field.hasImplicitType = true; 3388 field.hasImplicitType = true;
3389 } 3389 }
3390 _currentHolder.addField(field); 3390 _currentHolder.addField(field);
3391 fieldName.staticElement = field; 3391 fieldName.staticElement = field;
3392 } else if (_inFunction) { 3392 } else if (_inFunction) {
3393 SimpleIdentifier variableName = node.name; 3393 SimpleIdentifier variableName = node.name;
3394 LocalVariableElementImpl variable; 3394 LocalVariableElementImpl variable;
3395 if (isConst && hasInitializer) { 3395 if (isConst && hasInitializer) {
(...skipping 14 matching lines...) Expand all
3410 } else { 3410 } else {
3411 SimpleIdentifier variableName = node.name; 3411 SimpleIdentifier variableName = node.name;
3412 TopLevelVariableElementImpl variable; 3412 TopLevelVariableElementImpl variable;
3413 if (isConst && hasInitializer) { 3413 if (isConst && hasInitializer) {
3414 variable = new ConstTopLevelVariableElementImpl(variableName); 3414 variable = new ConstTopLevelVariableElementImpl(variableName);
3415 } else { 3415 } else {
3416 variable = new TopLevelVariableElementImpl.forNode(variableName); 3416 variable = new TopLevelVariableElementImpl.forNode(variableName);
3417 } 3417 }
3418 element = variable; 3418 element = variable;
3419 if (node.parent.parent is TopLevelVariableDeclaration) { 3419 if (node.parent.parent is TopLevelVariableDeclaration) {
3420 _setDocRange(element, node.parent.parent); 3420 _setDoc(element, node.parent.parent);
3421 } 3421 }
3422 if ((node.parent as VariableDeclarationList).type == null) { 3422 if ((node.parent as VariableDeclarationList).type == null) {
3423 variable.hasImplicitType = true; 3423 variable.hasImplicitType = true;
3424 } 3424 }
3425 _currentHolder.addTopLevelVariable(variable); 3425 _currentHolder.addTopLevelVariable(variable);
3426 variableName.staticElement = element; 3426 variableName.staticElement = element;
3427 } 3427 }
3428 element.const3 = isConst; 3428 element.const3 = isConst;
3429 element.final2 = isFinal; 3429 element.final2 = isFinal;
3430 if (hasInitializer) { 3430 if (hasInitializer) {
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
3544 return parent.body; 3544 return parent.body;
3545 } else if (parent is MethodDeclaration) { 3545 } else if (parent is MethodDeclaration) {
3546 return parent.body; 3546 return parent.body;
3547 } 3547 }
3548 parent = parent.parent; 3548 parent = parent.parent;
3549 } 3549 }
3550 return null; 3550 return null;
3551 } 3551 }
3552 3552
3553 /** 3553 /**
3554 * If the given [node] has a documentation comment, remember its range 3554 * If the given [node] has a documentation comment, remember its content
3555 * into the given [element]. 3555 * and range into the given [element].
3556 */ 3556 */
3557 void _setDocRange(ElementImpl element, AnnotatedNode node) { 3557 void _setDoc(ElementImpl element, AnnotatedNode node) {
3558 Comment comment = node.documentationComment; 3558 Comment comment = node.documentationComment;
3559 if (comment != null && comment.isDocumentation) { 3559 if (comment != null && comment.isDocumentation) {
3560 element.documentationComment =
3561 comment.tokens.map((Token t) => t.lexeme).join('\n');
3560 element.setDocRange(comment.offset, comment.length); 3562 element.setDocRange(comment.offset, comment.length);
3561 } 3563 }
3562 } 3564 }
3563 3565
3564 /** 3566 /**
3565 * Sets the visible source range for formal parameter. 3567 * Sets the visible source range for formal parameter.
3566 */ 3568 */
3567 void _setParameterVisibleRange( 3569 void _setParameterVisibleRange(
3568 FormalParameter node, ParameterElementImpl element) { 3570 FormalParameter node, ParameterElementImpl element) {
3569 FunctionBody body = _getFunctionBody(node); 3571 FunctionBody body = _getFunctionBody(node);
(...skipping 9808 matching lines...) Expand 10 before | Expand all | Expand 10 after
13378 nonFields.add(node); 13380 nonFields.add(node);
13379 return null; 13381 return null;
13380 } 13382 }
13381 13383
13382 @override 13384 @override
13383 Object visitNode(AstNode node) => node.accept(TypeResolverVisitor_this); 13385 Object visitNode(AstNode node) => node.accept(TypeResolverVisitor_this);
13384 13386
13385 @override 13387 @override
13386 Object visitWithClause(WithClause node) => null; 13388 Object visitWithClause(WithClause node) => null;
13387 } 13389 }
OLDNEW
« no previous file with comments | « pkg/analyzer/lib/src/generated/element_handle.dart ('k') | pkg/analyzer/lib/src/task/dart.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698