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 analyzer.src.dart.element.element; | 5 library analyzer.src.dart.element.element; |
6 | 6 |
7 import 'dart:collection'; | 7 import 'dart:collection'; |
8 import 'dart:math' show min; | 8 import 'dart:math' show min; |
9 | 9 |
10 import 'package:analyzer/dart/ast/ast.dart'; | 10 import 'package:analyzer/dart/ast/ast.dart'; |
11 import 'package:analyzer/dart/ast/token.dart'; | 11 import 'package:analyzer/dart/ast/token.dart'; |
12 import 'package:analyzer/dart/constant/value.dart'; | 12 import 'package:analyzer/dart/constant/value.dart'; |
13 import 'package:analyzer/dart/element/element.dart'; | 13 import 'package:analyzer/dart/element/element.dart'; |
14 import 'package:analyzer/dart/element/type.dart'; | 14 import 'package:analyzer/dart/element/type.dart'; |
15 import 'package:analyzer/dart/element/visitor.dart'; | 15 import 'package:analyzer/dart/element/visitor.dart'; |
16 import 'package:analyzer/src/dart/ast/utilities.dart'; | 16 import 'package:analyzer/src/dart/ast/utilities.dart'; |
17 import 'package:analyzer/src/dart/constant/value.dart'; | 17 import 'package:analyzer/src/dart/constant/value.dart'; |
18 import 'package:analyzer/src/dart/element/handle.dart'; | 18 import 'package:analyzer/src/dart/element/handle.dart'; |
19 import 'package:analyzer/src/dart/element/type.dart'; | 19 import 'package:analyzer/src/dart/element/type.dart'; |
20 import 'package:analyzer/src/error/codes.dart' show CompileTimeErrorCode; | 20 import 'package:analyzer/src/error/codes.dart' show CompileTimeErrorCode; |
21 import 'package:analyzer/src/generated/constant.dart' show EvaluationResultImpl; | 21 import 'package:analyzer/src/generated/constant.dart' show EvaluationResultImpl; |
22 import 'package:analyzer/src/generated/engine.dart' | 22 import 'package:analyzer/src/generated/engine.dart' |
23 show AnalysisContext, AnalysisEngine; | 23 show AnalysisContext, AnalysisEngine; |
24 import 'package:analyzer/src/generated/java_core.dart'; | |
25 import 'package:analyzer/src/generated/java_engine.dart'; | 24 import 'package:analyzer/src/generated/java_engine.dart'; |
26 import 'package:analyzer/src/generated/resolver.dart'; | 25 import 'package:analyzer/src/generated/resolver.dart'; |
27 import 'package:analyzer/src/generated/sdk.dart' show DartSdk; | 26 import 'package:analyzer/src/generated/sdk.dart' show DartSdk; |
28 import 'package:analyzer/src/generated/source.dart'; | 27 import 'package:analyzer/src/generated/source.dart'; |
29 import 'package:analyzer/src/generated/testing/ast_factory.dart'; | 28 import 'package:analyzer/src/generated/testing/ast_factory.dart'; |
30 import 'package:analyzer/src/generated/utilities_collection.dart'; | 29 import 'package:analyzer/src/generated/utilities_collection.dart'; |
31 import 'package:analyzer/src/generated/utilities_dart.dart'; | 30 import 'package:analyzer/src/generated/utilities_dart.dart'; |
32 import 'package:analyzer/src/generated/utilities_general.dart'; | 31 import 'package:analyzer/src/generated/utilities_general.dart'; |
33 import 'package:analyzer/src/summary/idl.dart'; | 32 import 'package:analyzer/src/summary/idl.dart'; |
34 import 'package:analyzer/src/task/dart.dart'; | 33 import 'package:analyzer/src/task/dart.dart'; |
(...skipping 3032 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3067 if (node == null) { | 3066 if (node == null) { |
3068 return null; | 3067 return null; |
3069 } | 3068 } |
3070 return node.getAncestor(predicate); | 3069 return node.getAncestor(predicate); |
3071 } | 3070 } |
3072 | 3071 |
3073 /** | 3072 /** |
3074 * Return `true` if this element has the given [modifier] associated with it. | 3073 * Return `true` if this element has the given [modifier] associated with it. |
3075 */ | 3074 */ |
3076 bool hasModifier(Modifier modifier) => | 3075 bool hasModifier(Modifier modifier) => |
3077 BooleanArray.getEnum(_modifiers, modifier); | 3076 BooleanArray.get(_modifiers, modifier.ordinal); |
3078 | 3077 |
3079 @override | 3078 @override |
3080 bool isAccessibleIn(LibraryElement library) { | 3079 bool isAccessibleIn(LibraryElement library) { |
3081 if (Identifier.isPrivateName(name)) { | 3080 if (Identifier.isPrivateName(name)) { |
3082 return library == this.library; | 3081 return library == this.library; |
3083 } | 3082 } |
3084 return true; | 3083 return true; |
3085 } | 3084 } |
3086 | 3085 |
3087 /** | 3086 /** |
(...skipping 14 matching lines...) Expand all Loading... |
3102 assert(!isResynthesized); | 3101 assert(!isResynthesized); |
3103 _codeOffset = offset; | 3102 _codeOffset = offset; |
3104 _codeLength = length; | 3103 _codeLength = length; |
3105 } | 3104 } |
3106 | 3105 |
3107 /** | 3106 /** |
3108 * Set whether the given [modifier] is associated with this element to | 3107 * Set whether the given [modifier] is associated with this element to |
3109 * correspond to the given [value]. | 3108 * correspond to the given [value]. |
3110 */ | 3109 */ |
3111 void setModifier(Modifier modifier, bool value) { | 3110 void setModifier(Modifier modifier, bool value) { |
3112 _modifiers = BooleanArray.setEnum(_modifiers, modifier, value); | 3111 _modifiers = BooleanArray.set(_modifiers, modifier.ordinal, value); |
3113 } | 3112 } |
3114 | 3113 |
3115 @override | 3114 @override |
3116 String toString() { | 3115 String toString() { |
3117 StringBuffer buffer = new StringBuffer(); | 3116 StringBuffer buffer = new StringBuffer(); |
3118 appendTo(buffer); | 3117 appendTo(buffer); |
3119 return buffer.toString(); | 3118 return buffer.toString(); |
3120 } | 3119 } |
3121 | 3120 |
3122 @override | 3121 @override |
(...skipping 3049 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6172 buffer.write(displayName); | 6171 buffer.write(displayName); |
6173 super.appendTo(buffer); | 6172 super.appendTo(buffer); |
6174 } | 6173 } |
6175 | 6174 |
6176 @override | 6175 @override |
6177 MethodDeclaration computeNode() => | 6176 MethodDeclaration computeNode() => |
6178 getNodeMatching((node) => node is MethodDeclaration); | 6177 getNodeMatching((node) => node is MethodDeclaration); |
6179 } | 6178 } |
6180 | 6179 |
6181 /** | 6180 /** |
6182 * The enumeration `Modifier` defines constants for all of the modifiers defined | 6181 * The constants for all of the modifiers defined by the Dart language and for a |
6183 * by the Dart language and for a few additional flags that are useful. | 6182 * few additional flags that are useful. |
6184 * | 6183 * |
6185 * Clients may not extend, implement or mix-in this class. | 6184 * Clients may not extend, implement or mix-in this class. |
6186 */ | 6185 */ |
6187 class Modifier extends Enum<Modifier> { | 6186 class Modifier implements Comparable<Modifier> { |
6188 /** | 6187 /** |
6189 * Indicates that the modifier 'abstract' was applied to the element. | 6188 * Indicates that the modifier 'abstract' was applied to the element. |
6190 */ | 6189 */ |
6191 static const Modifier ABSTRACT = const Modifier('ABSTRACT', 0); | 6190 static const Modifier ABSTRACT = const Modifier('ABSTRACT', 0); |
6192 | 6191 |
6193 /** | 6192 /** |
6194 * Indicates that an executable element has a body marked as being | 6193 * Indicates that an executable element has a body marked as being |
6195 * asynchronous. | 6194 * asynchronous. |
6196 */ | 6195 */ |
6197 static const Modifier ASYNCHRONOUS = const Modifier('ASYNCHRONOUS', 1); | 6196 static const Modifier ASYNCHRONOUS = const Modifier('ASYNCHRONOUS', 1); |
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6294 GETTER, | 6293 GETTER, |
6295 HAS_EXT_URI, | 6294 HAS_EXT_URI, |
6296 IMPLICIT_TYPE, | 6295 IMPLICIT_TYPE, |
6297 MIXIN_APPLICATION, | 6296 MIXIN_APPLICATION, |
6298 REFERENCES_SUPER, | 6297 REFERENCES_SUPER, |
6299 SETTER, | 6298 SETTER, |
6300 STATIC, | 6299 STATIC, |
6301 SYNTHETIC | 6300 SYNTHETIC |
6302 ]; | 6301 ]; |
6303 | 6302 |
6304 const Modifier(String name, int ordinal) : super(name, ordinal); | 6303 /** |
| 6304 * The name of this modifier. |
| 6305 */ |
| 6306 final String name; |
| 6307 |
| 6308 /** |
| 6309 * The ordinal value of the modifier. |
| 6310 */ |
| 6311 final int ordinal; |
| 6312 |
| 6313 const Modifier(this.name, this.ordinal); |
| 6314 |
| 6315 @override |
| 6316 int get hashCode => ordinal; |
| 6317 |
| 6318 @override |
| 6319 int compareTo(Modifier other) => ordinal - other.ordinal; |
| 6320 |
| 6321 @override |
| 6322 String toString() => name; |
6305 } | 6323 } |
6306 | 6324 |
6307 /** | 6325 /** |
6308 * A concrete implementation of a [MultiplyDefinedElement]. | 6326 * A concrete implementation of a [MultiplyDefinedElement]. |
6309 */ | 6327 */ |
6310 class MultiplyDefinedElementImpl implements MultiplyDefinedElement { | 6328 class MultiplyDefinedElementImpl implements MultiplyDefinedElement { |
6311 /** | 6329 /** |
6312 * The unique integer identifier of this element. | 6330 * The unique integer identifier of this element. |
6313 */ | 6331 */ |
6314 final int id = ElementImpl._NEXT_ID++; | 6332 final int id = ElementImpl._NEXT_ID++; |
(...skipping 2100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
8415 | 8433 |
8416 @override | 8434 @override |
8417 void visitElement(Element element) { | 8435 void visitElement(Element element) { |
8418 int offset = element.nameOffset; | 8436 int offset = element.nameOffset; |
8419 if (offset != -1) { | 8437 if (offset != -1) { |
8420 map[offset] = element; | 8438 map[offset] = element; |
8421 } | 8439 } |
8422 super.visitElement(element); | 8440 super.visitElement(element); |
8423 } | 8441 } |
8424 } | 8442 } |
OLD | NEW |