| 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 computer.highlights; | 5 library computer.highlights; |
| 6 | 6 |
| 7 import 'dart:collection'; | |
| 8 | |
| 9 import 'package:analysis_server/src/constants.dart'; | 7 import 'package:analysis_server/src/constants.dart'; |
| 10 import 'package:analyzer/src/generated/ast.dart'; | 8 import 'package:analyzer/src/generated/ast.dart'; |
| 11 import 'package:analyzer/src/generated/element.dart'; | 9 import 'package:analyzer/src/generated/element.dart'; |
| 12 import 'package:analyzer/src/generated/scanner.dart'; | 10 import 'package:analyzer/src/generated/scanner.dart'; |
| 13 | 11 |
| 14 | 12 |
| 15 /** | 13 /** |
| 16 * A computer for [HighlightRegion]s in a Dart [CompilationUnit]. | 14 * A computer for [HighlightRegion]s in a Dart [CompilationUnit]. |
| 17 */ | 15 */ |
| 18 class DartUnitHighlightsComputer { | 16 class DartUnitHighlightsComputer { |
| 19 final CompilationUnit _unit; | 17 final CompilationUnit _unit; |
| 20 | 18 |
| 21 final List<Map<String, Object>> _regions = <HashMap<String, Object>>[]; | 19 final List<HighlightRegion> _regions = <HighlightRegion>[]; |
| 22 | 20 |
| 23 DartUnitHighlightsComputer(this._unit); | 21 DartUnitHighlightsComputer(this._unit); |
| 24 | 22 |
| 25 /** | 23 /** |
| 26 * Returns the computed highlight regions, not `null`. | 24 * Returns the computed highlight regions, not `null`. |
| 27 */ | 25 */ |
| 28 List<Map<String, Object>> compute() { | 26 List<Map<String, Object>> compute() { |
| 29 _unit.accept(new _DartUnitHighlightsComputerVisitor(this)); | 27 _unit.accept(new _DartUnitHighlightsComputerVisitor(this)); |
| 30 return _regions; | 28 _addCommentRanges(); |
| 29 return _regions.map((region) => region.toJson()).toList(); |
| 30 } |
| 31 |
| 32 void _addCommentRanges() { |
| 33 Token token = _unit.beginToken; |
| 34 while (token != null && token.type != TokenType.EOF) { |
| 35 Token commentToken = token.precedingComments; |
| 36 while (commentToken != null) { |
| 37 HighlightType highlightType = null; |
| 38 if (commentToken.type == TokenType.MULTI_LINE_COMMENT) { |
| 39 if (commentToken.lexeme.startsWith('/**')) { |
| 40 highlightType = HighlightType.COMMENT_DOCUMENTATION; |
| 41 } else { |
| 42 highlightType = HighlightType.COMMENT_BLOCK; |
| 43 } |
| 44 } |
| 45 if (commentToken.type == TokenType.SINGLE_LINE_COMMENT) { |
| 46 highlightType = HighlightType.COMMENT_END_OF_LINE; |
| 47 } |
| 48 if (highlightType != null) { |
| 49 _addRegion_token(commentToken, highlightType); |
| 50 } |
| 51 commentToken = commentToken.next; |
| 52 } |
| 53 token = token.next; |
| 54 } |
| 31 } | 55 } |
| 32 | 56 |
| 33 void _addIdentifierRegion(SimpleIdentifier node) { | 57 void _addIdentifierRegion(SimpleIdentifier node) { |
| 34 if (_addIdentifierRegion_keyword(node)) { | 58 if (_addIdentifierRegion_keyword(node)) { |
| 35 return; | 59 return; |
| 36 } | 60 } |
| 37 if (_addIdentifierRegion_class(node)) { | 61 if (_addIdentifierRegion_class(node)) { |
| 38 return; | 62 return; |
| 39 } | 63 } |
| 40 if (_addIdentifierRegion_constructor(node)) { | 64 if (_addIdentifierRegion_constructor(node)) { |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 74 return; | 98 return; |
| 75 } | 99 } |
| 76 _addRegion_node(node, HighlightType.IDENTIFIER_DEFAULT); | 100 _addRegion_node(node, HighlightType.IDENTIFIER_DEFAULT); |
| 77 } | 101 } |
| 78 | 102 |
| 79 void _addIdentifierRegion_annotation(Annotation node) { | 103 void _addIdentifierRegion_annotation(Annotation node) { |
| 80 ArgumentList arguments = node.arguments; | 104 ArgumentList arguments = node.arguments; |
| 81 if (arguments == null) { | 105 if (arguments == null) { |
| 82 _addRegion_node(node, HighlightType.ANNOTATION); | 106 _addRegion_node(node, HighlightType.ANNOTATION); |
| 83 } else { | 107 } else { |
| 84 _addRegion_nodeStart_tokenEnd(node, arguments.beginToken, HighlightType.AN
NOTATION); | 108 _addRegion_nodeStart_tokenEnd(node, arguments.beginToken, |
| 109 HighlightType.ANNOTATION); |
| 85 _addRegion_token(arguments.endToken, HighlightType.ANNOTATION); | 110 _addRegion_token(arguments.endToken, HighlightType.ANNOTATION); |
| 86 } | 111 } |
| 87 } | 112 } |
| 88 | 113 |
| 89 bool _addIdentifierRegion_class(SimpleIdentifier node) { | 114 bool _addIdentifierRegion_class(SimpleIdentifier node) { |
| 90 Element element = node.staticElement; | 115 Element element = node.staticElement; |
| 91 if (element is! ClassElement) { | 116 if (element is! ClassElement) { |
| 92 return false; | 117 return false; |
| 93 } | 118 } |
| 94 return _addRegion_node(node, HighlightType.CLASS); | 119 return _addRegion_node(node, HighlightType.CLASS); |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 170 AstNode parent = node.parent; | 195 AstNode parent = node.parent; |
| 171 if (!(parent is MethodDeclaration || parent is FunctionDeclaration)) { | 196 if (!(parent is MethodDeclaration || parent is FunctionDeclaration)) { |
| 172 return false; | 197 return false; |
| 173 } | 198 } |
| 174 // should be property accessor | 199 // should be property accessor |
| 175 Element element = node.staticElement; | 200 Element element = node.staticElement; |
| 176 if (element is! PropertyAccessorElement) { | 201 if (element is! PropertyAccessorElement) { |
| 177 return false; | 202 return false; |
| 178 } | 203 } |
| 179 // getter or setter | 204 // getter or setter |
| 180 PropertyAccessorElement propertyAccessorElement = element as PropertyAccesso
rElement; | 205 PropertyAccessorElement propertyAccessorElement = element as |
| 206 PropertyAccessorElement; |
| 181 if (propertyAccessorElement.isGetter) { | 207 if (propertyAccessorElement.isGetter) { |
| 182 return _addRegion_node(node, HighlightType.GETTER_DECLARATION); | 208 return _addRegion_node(node, HighlightType.GETTER_DECLARATION); |
| 183 } else { | 209 } else { |
| 184 return _addRegion_node(node, HighlightType.SETTER_DECLARATION); | 210 return _addRegion_node(node, HighlightType.SETTER_DECLARATION); |
| 185 } | 211 } |
| 186 } | 212 } |
| 187 | 213 |
| 188 bool _addIdentifierRegion_importPrefix(SimpleIdentifier node) { | 214 bool _addIdentifierRegion_importPrefix(SimpleIdentifier node) { |
| 189 Element element = node.staticElement; | 215 Element element = node.staticElement; |
| 190 if (element is! PrefixElement) { | 216 if (element is! PrefixElement) { |
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 259 | 285 |
| 260 bool _addIdentifierRegion_typeParameter(SimpleIdentifier node) { | 286 bool _addIdentifierRegion_typeParameter(SimpleIdentifier node) { |
| 261 Element element = node.staticElement; | 287 Element element = node.staticElement; |
| 262 if (element is! TypeParameterElement) { | 288 if (element is! TypeParameterElement) { |
| 263 return false; | 289 return false; |
| 264 } | 290 } |
| 265 return _addRegion_node(node, HighlightType.TYPE_PARAMETER); | 291 return _addRegion_node(node, HighlightType.TYPE_PARAMETER); |
| 266 } | 292 } |
| 267 | 293 |
| 268 void _addRegion(int offset, int length, HighlightType type) { | 294 void _addRegion(int offset, int length, HighlightType type) { |
| 269 _regions.add({OFFSET: offset, LENGTH: length, TYPE: type.name}); | 295 _regions.add(new HighlightRegion(offset, length, type)); |
| 270 } | 296 } |
| 271 | 297 |
| 272 bool _addRegion_node(AstNode node, HighlightType type) { | 298 bool _addRegion_node(AstNode node, HighlightType type) { |
| 273 int offset = node.offset; | 299 int offset = node.offset; |
| 274 int length = node.length; | 300 int length = node.length; |
| 275 _addRegion(offset, length, type); | 301 _addRegion(offset, length, type); |
| 276 return true; | 302 return true; |
| 277 } | 303 } |
| 278 | 304 |
| 279 void _addRegion_nodeStart_tokenEnd(AstNode a, Token b, HighlightType type) { | 305 void _addRegion_nodeStart_tokenEnd(AstNode a, Token b, HighlightType type) { |
| (...skipping 11 matching lines...) Expand all Loading... |
| 291 } | 317 } |
| 292 | 318 |
| 293 void _addRegion_tokenStart_tokenEnd(Token a, Token b, HighlightType type) { | 319 void _addRegion_tokenStart_tokenEnd(Token a, Token b, HighlightType type) { |
| 294 int offset = a.offset; | 320 int offset = a.offset; |
| 295 int end = b.end; | 321 int end = b.end; |
| 296 _addRegion(offset, end - offset, type); | 322 _addRegion(offset, end - offset, type); |
| 297 } | 323 } |
| 298 } | 324 } |
| 299 | 325 |
| 300 | 326 |
| 327 class HighlightRegion { |
| 328 final int offset; |
| 329 final int length; |
| 330 final HighlightType type; |
| 331 |
| 332 HighlightRegion(this.offset, this.length, this.type); |
| 333 |
| 334 factory HighlightRegion.fromJson(Map<String, Object> map) { |
| 335 HighlightType type = HighlightType.valueOf(map[TYPE]); |
| 336 return new HighlightRegion(map[OFFSET], map[LENGTH], type); |
| 337 } |
| 338 |
| 339 Map<String, Object> toJson() { |
| 340 Map<String, Object> json = <String, Object>{}; |
| 341 json[OFFSET] = offset; |
| 342 json[LENGTH] = length; |
| 343 json[TYPE] = type.name; |
| 344 return json; |
| 345 } |
| 346 |
| 347 @override |
| 348 String toString() => toJson().toString(); |
| 349 } |
| 350 |
| 351 |
| 352 /** |
| 353 * Highlighting kinds constants. |
| 354 */ |
| 355 class HighlightType { |
| 356 static const HighlightType ANNOTATION = const HighlightType('ANNOTATION'); |
| 357 static const HighlightType BUILT_IN = const HighlightType('BUILT_IN'); |
| 358 static const HighlightType CLASS = const HighlightType('CLASS'); |
| 359 static const HighlightType COMMENT_BLOCK = const HighlightType( |
| 360 'COMMENT_BLOCK'); |
| 361 static const HighlightType COMMENT_DOCUMENTATION = const HighlightType( |
| 362 'COMMENT_DOCUMENTATION'); |
| 363 static const HighlightType COMMENT_END_OF_LINE = const HighlightType( |
| 364 'COMMENT_END_OF_LINE'); |
| 365 static const HighlightType CONSTRUCTOR = const HighlightType('CONSTRUCTOR'); |
| 366 static const HighlightType DIRECTIVE = const HighlightType('DIRECTIVE'); |
| 367 static const HighlightType DYNAMIC_TYPE = const HighlightType('DYNAMIC_TYPE'); |
| 368 static const HighlightType FIELD = const HighlightType('FIELD'); |
| 369 static const HighlightType FIELD_STATIC = const HighlightType('FIELD_STATIC'); |
| 370 static const HighlightType FUNCTION_DECLARATION = const HighlightType( |
| 371 'FUNCTION_DECLARATION'); |
| 372 static const HighlightType FUNCTION = const HighlightType('FUNCTION'); |
| 373 static const HighlightType FUNCTION_TYPE_ALIAS = const HighlightType( |
| 374 'FUNCTION_TYPE_ALIAS'); |
| 375 static const HighlightType GETTER_DECLARATION = const HighlightType( |
| 376 'GETTER_DECLARATION'); |
| 377 static const HighlightType KEYWORD = const HighlightType('KEYWORD'); |
| 378 static const HighlightType IDENTIFIER_DEFAULT = const HighlightType( |
| 379 'IDENTIFIER_DEFAULT'); |
| 380 static const HighlightType IMPORT_PREFIX = const HighlightType( |
| 381 'IMPORT_PREFIX'); |
| 382 static const HighlightType LITERAL_BOOLEAN = const HighlightType( |
| 383 'LITERAL_BOOLEAN'); |
| 384 static const HighlightType LITERAL_DOUBLE = const HighlightType( |
| 385 'LITERAL_DOUBLE'); |
| 386 static const HighlightType LITERAL_INTEGER = const HighlightType( |
| 387 'LITERAL_INTEGER'); |
| 388 static const HighlightType LITERAL_LIST = const HighlightType('LITERAL_LIST'); |
| 389 static const HighlightType LITERAL_MAP = const HighlightType('LITERAL_MAP'); |
| 390 static const HighlightType LITERAL_STRING = const HighlightType( |
| 391 'LITERAL_STRING'); |
| 392 static const HighlightType LOCAL_VARIABLE_DECLARATION = const HighlightType( |
| 393 'LOCAL_VARIABLE_DECLARATION'); |
| 394 static const HighlightType LOCAL_VARIABLE = const HighlightType( |
| 395 'LOCAL_VARIABLE'); |
| 396 static const HighlightType METHOD_DECLARATION = const HighlightType( |
| 397 'METHOD_DECLARATION'); |
| 398 static const HighlightType METHOD_DECLARATION_STATIC = const HighlightType( |
| 399 'METHOD_DECLARATION_STATIC'); |
| 400 static const HighlightType METHOD = const HighlightType('METHOD'); |
| 401 static const HighlightType METHOD_STATIC = const HighlightType( |
| 402 'METHOD_STATIC'); |
| 403 static const HighlightType PARAMETER = const HighlightType('PARAMETER'); |
| 404 static const HighlightType SETTER_DECLARATION = const HighlightType( |
| 405 'SETTER_DECLARATION'); |
| 406 static const HighlightType TOP_LEVEL_VARIABLE = const HighlightType( |
| 407 'TOP_LEVEL_VARIABLE'); |
| 408 static const HighlightType TYPE_NAME_DYNAMIC = const HighlightType( |
| 409 'TYPE_NAME_DYNAMIC'); |
| 410 static const HighlightType TYPE_PARAMETER = const HighlightType( |
| 411 'TYPE_PARAMETER'); |
| 412 |
| 413 final String name; |
| 414 |
| 415 const HighlightType(this.name); |
| 416 |
| 417 @override |
| 418 String toString() => name; |
| 419 |
| 420 static HighlightType valueOf(String name) { |
| 421 if (ANNOTATION.name == name) return ANNOTATION; |
| 422 if (BUILT_IN.name == name) return BUILT_IN; |
| 423 if (CLASS.name == name) return CLASS; |
| 424 if (COMMENT_BLOCK.name == name) return COMMENT_BLOCK; |
| 425 if (COMMENT_DOCUMENTATION.name == name) return COMMENT_DOCUMENTATION; |
| 426 if (COMMENT_END_OF_LINE.name == name) return COMMENT_END_OF_LINE; |
| 427 if (CONSTRUCTOR.name == name) return CONSTRUCTOR; |
| 428 if (DIRECTIVE.name == name) return DIRECTIVE; |
| 429 if (DYNAMIC_TYPE.name == name) return DYNAMIC_TYPE; |
| 430 if (FIELD.name == name) return FIELD; |
| 431 if (FIELD_STATIC.name == name) return FIELD_STATIC; |
| 432 if (FUNCTION_DECLARATION.name == name) return FUNCTION_DECLARATION; |
| 433 if (FUNCTION.name == name) return FUNCTION; |
| 434 if (FUNCTION_TYPE_ALIAS.name == name) return FUNCTION_TYPE_ALIAS; |
| 435 if (GETTER_DECLARATION.name == name) return GETTER_DECLARATION; |
| 436 if (KEYWORD.name == name) return KEYWORD; |
| 437 if (IDENTIFIER_DEFAULT.name == name) return IDENTIFIER_DEFAULT; |
| 438 if (IMPORT_PREFIX.name == name) return IMPORT_PREFIX; |
| 439 if (LITERAL_BOOLEAN.name == name) return LITERAL_BOOLEAN; |
| 440 if (LITERAL_DOUBLE.name == name) return LITERAL_DOUBLE; |
| 441 if (LITERAL_INTEGER.name == name) return LITERAL_INTEGER; |
| 442 if (LITERAL_LIST.name == name) return LITERAL_LIST; |
| 443 if (LITERAL_MAP.name == name) return LITERAL_MAP; |
| 444 if (LITERAL_STRING.name == name) return LITERAL_STRING; |
| 445 if (LOCAL_VARIABLE_DECLARATION.name == name) return |
| 446 LOCAL_VARIABLE_DECLARATION; |
| 447 if (LOCAL_VARIABLE.name == name) return LOCAL_VARIABLE; |
| 448 if (METHOD_DECLARATION.name == name) return METHOD_DECLARATION; |
| 449 if (METHOD_DECLARATION_STATIC.name == name) return |
| 450 METHOD_DECLARATION_STATIC; |
| 451 if (METHOD.name == name) return METHOD; |
| 452 if (METHOD_STATIC.name == name) return METHOD_STATIC; |
| 453 if (PARAMETER.name == name) return PARAMETER; |
| 454 if (SETTER_DECLARATION.name == name) return SETTER_DECLARATION; |
| 455 if (TOP_LEVEL_VARIABLE.name == name) return TOP_LEVEL_VARIABLE; |
| 456 if (TYPE_NAME_DYNAMIC.name == name) return TYPE_NAME_DYNAMIC; |
| 457 if (TYPE_PARAMETER.name == name) return TYPE_PARAMETER; |
| 458 throw new ArgumentError('Unknown HighlightType: $name'); |
| 459 } |
| 460 } |
| 461 |
| 462 |
| 301 /** | 463 /** |
| 302 * An AST visitor for [DartUnitHighlightsComputer]. | 464 * An AST visitor for [DartUnitHighlightsComputer]. |
| 303 */ | 465 */ |
| 304 class _DartUnitHighlightsComputerVisitor extends RecursiveAstVisitor<Object> { | 466 class _DartUnitHighlightsComputerVisitor extends RecursiveAstVisitor<Object> { |
| 305 final DartUnitHighlightsComputer computer; | 467 final DartUnitHighlightsComputer computer; |
| 306 | 468 |
| 307 _DartUnitHighlightsComputerVisitor(this.computer); | 469 _DartUnitHighlightsComputerVisitor(this.computer); |
| 308 | 470 |
| 309 @override | 471 @override |
| 310 Object visitAnnotation(Annotation node) { | 472 Object visitAnnotation(Annotation node) { |
| (...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 428 } | 590 } |
| 429 | 591 |
| 430 @override | 592 @override |
| 431 Object visitPartDirective(PartDirective node) { | 593 Object visitPartDirective(PartDirective node) { |
| 432 computer._addRegion_token(node.keyword, HighlightType.BUILT_IN); | 594 computer._addRegion_token(node.keyword, HighlightType.BUILT_IN); |
| 433 return super.visitPartDirective(node); | 595 return super.visitPartDirective(node); |
| 434 } | 596 } |
| 435 | 597 |
| 436 @override | 598 @override |
| 437 Object visitPartOfDirective(PartOfDirective node) { | 599 Object visitPartOfDirective(PartOfDirective node) { |
| 438 computer._addRegion_tokenStart_tokenEnd(node.partToken, node.ofToken, Highli
ghtType.BUILT_IN); | 600 computer._addRegion_tokenStart_tokenEnd(node.partToken, node.ofToken, |
| 601 HighlightType.BUILT_IN); |
| 439 return super.visitPartOfDirective(node); | 602 return super.visitPartOfDirective(node); |
| 440 } | 603 } |
| 441 | 604 |
| 442 @override | 605 @override |
| 443 Object visitShowCombinator(ShowCombinator node) { | 606 Object visitShowCombinator(ShowCombinator node) { |
| 444 computer._addRegion_token(node.keyword, HighlightType.BUILT_IN); | 607 computer._addRegion_token(node.keyword, HighlightType.BUILT_IN); |
| 445 return super.visitShowCombinator(node); | 608 return super.visitShowCombinator(node); |
| 446 } | 609 } |
| 447 | 610 |
| 448 @override | 611 @override |
| (...skipping 13 matching lines...) Expand all Loading... |
| 462 DartType type = node.type; | 625 DartType type = node.type; |
| 463 if (type != null) { | 626 if (type != null) { |
| 464 if (type.isDynamic && node.name.name == "dynamic") { | 627 if (type.isDynamic && node.name.name == "dynamic") { |
| 465 computer._addRegion_node(node, HighlightType.TYPE_NAME_DYNAMIC); | 628 computer._addRegion_node(node, HighlightType.TYPE_NAME_DYNAMIC); |
| 466 return null; | 629 return null; |
| 467 } | 630 } |
| 468 } | 631 } |
| 469 return super.visitTypeName(node); | 632 return super.visitTypeName(node); |
| 470 } | 633 } |
| 471 } | 634 } |
| 472 | |
| 473 | |
| 474 /** | |
| 475 * Highlighting kinds constants. | |
| 476 */ | |
| 477 class HighlightType { | |
| 478 static const HighlightType ANNOTATION = const HighlightType('ANNOTATION'); | |
| 479 static const HighlightType BUILT_IN = const HighlightType('BUILT_IN'); | |
| 480 static const HighlightType CLASS = const HighlightType('CLASS'); | |
| 481 static const HighlightType COMMENT_BLOCK = const HighlightType('COMMENT_BLOCK'
); | |
| 482 static const HighlightType COMMENT_DOCUMENTATION = const HighlightType('COMMEN
T_DOCUMENTATION'); | |
| 483 static const HighlightType COMMENT_END_OF_LINE = const HighlightType('COMMENT_
END_OF_LINE'); | |
| 484 static const HighlightType CONSTRUCTOR = const HighlightType('CONSTRUCTOR'); | |
| 485 static const HighlightType DIRECTIVE = const HighlightType('DIRECTIVE'); | |
| 486 static const HighlightType DYNAMIC_TYPE = const HighlightType('DYNAMIC_TYPE'); | |
| 487 static const HighlightType FIELD = const HighlightType('FIELD'); | |
| 488 static const HighlightType FIELD_STATIC = const HighlightType('FIELD_STATIC'); | |
| 489 static const HighlightType FUNCTION_DECLARATION = const HighlightType('FUNCTIO
N_DECLARATION'); | |
| 490 static const HighlightType FUNCTION = const HighlightType('FUNCTION'); | |
| 491 static const HighlightType FUNCTION_TYPE_ALIAS = const HighlightType('FUNCTION
_TYPE_ALIAS'); | |
| 492 static const HighlightType GETTER_DECLARATION = const HighlightType('GETTER_DE
CLARATION'); | |
| 493 static const HighlightType KEYWORD = const HighlightType('KEYWORD'); | |
| 494 static const HighlightType IDENTIFIER_DEFAULT = const HighlightType('IDENTIFIE
R_DEFAULT'); | |
| 495 static const HighlightType IMPORT_PREFIX = const HighlightType('IMPORT_PREFIX'
); | |
| 496 static const HighlightType LITERAL_BOOLEAN = const HighlightType('LITERAL_BOOL
EAN'); | |
| 497 static const HighlightType LITERAL_DOUBLE = const HighlightType('LITERAL_DOUBL
E'); | |
| 498 static const HighlightType LITERAL_INTEGER = const HighlightType('LITERAL_INTE
GER'); | |
| 499 static const HighlightType LITERAL_LIST = const HighlightType('LITERAL_LIST'); | |
| 500 static const HighlightType LITERAL_MAP = const HighlightType('LITERAL_MAP'); | |
| 501 static const HighlightType LITERAL_STRING = const HighlightType('LITERAL_STRIN
G'); | |
| 502 static const HighlightType LOCAL_VARIABLE_DECLARATION = const HighlightType('L
OCAL_VARIABLE_DECLARATION'); | |
| 503 static const HighlightType LOCAL_VARIABLE = const HighlightType('LOCAL_VARIABL
E'); | |
| 504 static const HighlightType METHOD_DECLARATION = const HighlightType('METHOD_DE
CLARATION'); | |
| 505 static const HighlightType METHOD_DECLARATION_STATIC = const HighlightType('ME
THOD_DECLARATION_STATIC'); | |
| 506 static const HighlightType METHOD = const HighlightType('METHOD'); | |
| 507 static const HighlightType METHOD_STATIC = const HighlightType('METHOD_STATIC'
); | |
| 508 static const HighlightType PARAMETER = const HighlightType('PARAMETER'); | |
| 509 static const HighlightType SETTER_DECLARATION = const HighlightType('SETTER_DE
CLARATION'); | |
| 510 static const HighlightType TOP_LEVEL_VARIABLE = const HighlightType('TOP_LEVEL
_VARIABLE'); | |
| 511 static const HighlightType TYPE_NAME_DYNAMIC = const HighlightType('TYPE_NAME_
DYNAMIC'); | |
| 512 static const HighlightType TYPE_PARAMETER = const HighlightType('TYPE_PARAMETE
R'); | |
| 513 | |
| 514 final String name; | |
| 515 | |
| 516 const HighlightType(this.name); | |
| 517 } | |
| OLD | NEW |