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

Unified Diff: pkg/analysis_server/lib/src/computer/computer_highlights2.dart

Issue 1241193002: Add '--useAnalysisHighlight2' option to generate version 2 of semantic highlight. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 5 years, 5 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 side-by-side diff with in-line comments
Download patch
Index: pkg/analysis_server/lib/src/computer/computer_highlights2.dart
diff --git a/pkg/analysis_server/lib/src/computer/computer_highlights.dart b/pkg/analysis_server/lib/src/computer/computer_highlights2.dart
similarity index 84%
copy from pkg/analysis_server/lib/src/computer/computer_highlights.dart
copy to pkg/analysis_server/lib/src/computer/computer_highlights2.dart
index 0491336d3a78565f4190ac6118ecef43760da9e8..f89d2780aa0ae10471ce7f7305f6d52881544246 100644
--- a/pkg/analysis_server/lib/src/computer/computer_highlights.dart
+++ b/pkg/analysis_server/lib/src/computer/computer_highlights2.dart
@@ -2,7 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-library computer.highlights;
+library computer.highlights2;
import 'package:analysis_server/src/protocol.dart' hide Element;
import 'package:analyzer/src/generated/ast.dart';
@@ -12,18 +12,18 @@ import 'package:analyzer/src/generated/scanner.dart';
/**
* A computer for [HighlightRegion]s in a Dart [CompilationUnit].
*/
-class DartUnitHighlightsComputer {
+class DartUnitHighlightsComputer2 {
final CompilationUnit _unit;
final List<HighlightRegion> _regions = <HighlightRegion>[];
- DartUnitHighlightsComputer(this._unit);
+ DartUnitHighlightsComputer2(this._unit);
/**
* Returns the computed highlight regions, not `null`.
*/
List<HighlightRegion> compute() {
- _unit.accept(new _DartUnitHighlightsComputerVisitor(this));
+ _unit.accept(new _DartUnitHighlightsComputerVisitor2(this));
_addCommentRanges();
return _regions;
}
@@ -63,7 +63,7 @@ class DartUnitHighlightsComputer {
if (_addIdentifierRegion_constructor(node)) {
return;
}
- if (_addIdentifierRegion_dynamicType(node)) {
+ if (_addIdentifierRegion_dynamicLocal(node)) {
return;
}
if (_addIdentifierRegion_getterSetterDeclaration(node)) {
@@ -135,13 +135,8 @@ class DartUnitHighlightsComputer {
return _addRegion_node(node, HighlightRegionType.CONSTRUCTOR);
}
- bool _addIdentifierRegion_dynamicType(SimpleIdentifier node) {
- // should be variable
- Element element = node.staticElement;
- if (element is! VariableElement) {
- return false;
- }
- // has propagated type
+ bool _addIdentifierRegion_dynamicLocal(SimpleIdentifier node) {
+ // no propagated type
if (node.propagatedType != null) {
return false;
}
@@ -151,7 +146,20 @@ class DartUnitHighlightsComputer {
return false;
}
// OK
- return _addRegion_node(node, HighlightRegionType.DYNAMIC_TYPE);
+ Element element = node.staticElement;
+ if (element is LocalVariableElement) {
+ HighlightRegionType type = node.inDeclarationContext()
+ ? HighlightRegionType.DYNAMIC_LOCAL_VARIABLE_DECLARATION
+ : HighlightRegionType.DYNAMIC_LOCAL_VARIABLE_REFERENCE;
+ return _addRegion_node(node, type);
+ }
+ if (element is ParameterElement) {
+ HighlightRegionType type = node.inDeclarationContext()
+ ? HighlightRegionType.DYNAMIC_PARAMETER_DECLARATION
+ : HighlightRegionType.DYNAMIC_PARAMETER_REFERENCE;
+ return _addRegion_node(node, type);
+ }
+ return false;
}
bool _addIdentifierRegion_field(SimpleIdentifier node) {
@@ -159,9 +167,6 @@ class DartUnitHighlightsComputer {
if (element is FieldFormalParameterElement) {
element = (element as FieldFormalParameterElement).field;
}
- if (element is PropertyAccessorElement) {
- element = (element as PropertyAccessorElement).variable;
- }
// prepare type
HighlightRegionType type;
if (element is FieldElement) {
@@ -169,12 +174,33 @@ class DartUnitHighlightsComputer {
if (enclosingElement is ClassElement && enclosingElement.isEnum) {
type = HighlightRegionType.ENUM_CONSTANT;
} else if (element.isStatic) {
- type = HighlightRegionType.FIELD_STATIC;
+ type = HighlightRegionType.STATIC_FIELD_DECLARATION;
} else {
- type = HighlightRegionType.FIELD;
+ type = node.inDeclarationContext()
+ ? HighlightRegionType.INSTANCE_FIELD_DECLARATION
+ : HighlightRegionType.INSTANCE_FIELD_REFERENCE;
}
} else if (element is TopLevelVariableElement) {
- type = HighlightRegionType.TOP_LEVEL_VARIABLE;
+ type = HighlightRegionType.TOP_LEVEL_VARIABLE_DECLARATION;
+ }
+ if (element is PropertyAccessorElement) {
+ PropertyAccessorElement accessor = element;
+ Element enclosingElement = element.enclosingElement;
+ if (accessor.variable is TopLevelVariableElement) {
+ type = accessor.isGetter
+ ? HighlightRegionType.TOP_LEVEL_GETTER_REFERENCE
+ : HighlightRegionType.TOP_LEVEL_SETTER_REFERENCE;
+ } else if (enclosingElement is ClassElement && enclosingElement.isEnum) {
+ type = HighlightRegionType.ENUM_CONSTANT;
+ } else if (accessor.isStatic) {
+ type = accessor.isGetter
+ ? HighlightRegionType.STATIC_GETTER_REFERENCE
+ : HighlightRegionType.STATIC_SETTER_REFERENCE;
+ } else {
+ type = accessor.isGetter
+ ? HighlightRegionType.INSTANCE_GETTER_REFERENCE
+ : HighlightRegionType.INSTANCE_SETTER_REFERENCE;
+ }
}
// add region
if (type != null) {
@@ -189,10 +215,15 @@ class DartUnitHighlightsComputer {
return false;
}
HighlightRegionType type;
+ bool isTopLevel = element.enclosingElement is CompilationUnitElement;
if (node.inDeclarationContext()) {
- type = HighlightRegionType.FUNCTION_DECLARATION;
+ type = isTopLevel
+ ? HighlightRegionType.TOP_LEVEL_FUNCTION_DECLARATION
+ : HighlightRegionType.LOCAL_FUNCTION_DECLARATION;
} else {
- type = HighlightRegionType.FUNCTION;
+ type = isTopLevel
+ ? HighlightRegionType.TOP_LEVEL_FUNCTION_REFERENCE
+ : HighlightRegionType.LOCAL_FUNCTION_REFERENCE;
}
return _addRegion_node(node, type);
}
@@ -219,11 +250,26 @@ class DartUnitHighlightsComputer {
// getter or setter
PropertyAccessorElement propertyAccessorElement =
element as PropertyAccessorElement;
+ bool isTopLevel = element.enclosingElement is CompilationUnitElement;
+ HighlightRegionType type;
if (propertyAccessorElement.isGetter) {
- return _addRegion_node(node, HighlightRegionType.GETTER_DECLARATION);
+ if (isTopLevel) {
+ type = HighlightRegionType.TOP_LEVEL_GETTER_DECLARATION;
+ } else if (propertyAccessorElement.isStatic) {
+ type = HighlightRegionType.STATIC_GETTER_DECLARATION;
+ } else {
+ type = HighlightRegionType.INSTANCE_GETTER_DECLARATION;
+ }
} else {
- return _addRegion_node(node, HighlightRegionType.SETTER_DECLARATION);
+ if (isTopLevel) {
+ type = HighlightRegionType.TOP_LEVEL_SETTER_DECLARATION;
+ } else if (propertyAccessorElement.isStatic) {
+ type = HighlightRegionType.STATIC_SETTER_DECLARATION;
+ } else {
+ type = HighlightRegionType.INSTANCE_SETTER_DECLARATION;
+ }
}
+ return _addRegion_node(node, type);
}
bool _addIdentifierRegion_importPrefix(SimpleIdentifier node) {
@@ -256,12 +302,9 @@ class DartUnitHighlightsComputer {
return false;
}
// OK
- HighlightRegionType type;
- if (node.inDeclarationContext()) {
- type = HighlightRegionType.LOCAL_VARIABLE_DECLARATION;
- } else {
- type = HighlightRegionType.LOCAL_VARIABLE;
- }
+ HighlightRegionType type = node.inDeclarationContext()
+ ? HighlightRegionType.LOCAL_VARIABLE_DECLARATION
+ : HighlightRegionType.LOCAL_VARIABLE_REFERENCE;
return _addRegion_node(node, type);
}
@@ -276,15 +319,15 @@ class DartUnitHighlightsComputer {
HighlightRegionType type;
if (node.inDeclarationContext()) {
if (isStatic) {
- type = HighlightRegionType.METHOD_DECLARATION_STATIC;
+ type = HighlightRegionType.STATIC_METHOD_DECLARATION;
} else {
- type = HighlightRegionType.METHOD_DECLARATION;
+ type = HighlightRegionType.INSTANCE_METHOD_DECLARATION;
}
} else {
if (isStatic) {
- type = HighlightRegionType.METHOD_STATIC;
+ type = HighlightRegionType.STATIC_METHOD_REFERENCE;
} else {
- type = HighlightRegionType.METHOD;
+ type = HighlightRegionType.INSTANCE_METHOD_REFERENCE;
}
}
return _addRegion_node(node, type);
@@ -295,7 +338,10 @@ class DartUnitHighlightsComputer {
if (element is! ParameterElement) {
return false;
}
- return _addRegion_node(node, HighlightRegionType.PARAMETER);
+ HighlightRegionType type = node.inDeclarationContext()
+ ? HighlightRegionType.PARAMETER_DECLARATION
+ : HighlightRegionType.PARAMETER_REFERENCE;
+ return _addRegion_node(node, type);
}
bool _addIdentifierRegion_typeParameter(SimpleIdentifier node) {
@@ -341,12 +387,12 @@ class DartUnitHighlightsComputer {
}
/**
- * An AST visitor for [DartUnitHighlightsComputer].
+ * An AST visitor for [DartUnitHighlightsComputer2].
*/
-class _DartUnitHighlightsComputerVisitor extends RecursiveAstVisitor<Object> {
- final DartUnitHighlightsComputer computer;
+class _DartUnitHighlightsComputerVisitor2 extends RecursiveAstVisitor<Object> {
+ final DartUnitHighlightsComputer2 computer;
- _DartUnitHighlightsComputerVisitor(this.computer);
+ _DartUnitHighlightsComputerVisitor2(this.computer);
@override
Object visitAnnotation(Annotation node) {
« no previous file with comments | « pkg/analysis_server/lib/src/analysis_server.dart ('k') | pkg/analysis_server/lib/src/generated_protocol.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698