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

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

Issue 1519413002: Issue 25244. Disable invalid overrides. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | pkg/analysis_server/test/analysis/notification_overrides_test.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/analysis_server/lib/src/computer/computer_overrides.dart
diff --git a/pkg/analysis_server/lib/src/computer/computer_overrides.dart b/pkg/analysis_server/lib/src/computer/computer_overrides.dart
index b817147a4273bebc22fc58ce26d48f219363d0b2..23ca2550e68f74c52631dcbd4dc0358da871a42c 100644
--- a/pkg/analysis_server/lib/src/computer/computer_overrides.dart
+++ b/pkg/analysis_server/lib/src/computer/computer_overrides.dart
@@ -13,6 +13,26 @@ import 'package:analyzer/src/generated/element.dart' as engine;
* A computer for class member overrides in a Dart [CompilationUnit].
*/
class DartUnitOverridesComputer {
+ static const List<ElementKind> FIELD_KINDS = const <ElementKind>[
+ ElementKind.FIELD,
+ ElementKind.GETTER,
+ ElementKind.SETTER
+ ];
+
+ static const List<ElementKind> GETTER_KINDS = const <ElementKind>[
+ ElementKind.FIELD,
+ ElementKind.GETTER
+ ];
+
+ static const List<ElementKind> METHOD_KINDS = const <ElementKind>[
+ ElementKind.METHOD
+ ];
+
+ static const List<ElementKind> SETTER_KINDS = const <ElementKind>[
+ ElementKind.FIELD,
+ ElementKind.SETTER
+ ];
+
final CompilationUnit _unit;
final List<Override> _overrides = <Override>[];
@@ -33,7 +53,16 @@ class DartUnitOverridesComputer {
continue;
}
SimpleIdentifier nameNode = classMember.name;
- _addOverride(nameNode.offset, nameNode.length, nameNode.name);
+ List<ElementKind> kinds;
+ if (classMember.isGetter) {
+ kinds = GETTER_KINDS;
+ } else if (classMember.isSetter) {
+ kinds = SETTER_KINDS;
+ } else {
+ kinds = METHOD_KINDS;
+ }
+ _addOverride(
+ nameNode.offset, nameNode.length, nameNode.name, kinds);
}
if (classMember is FieldDeclaration) {
if (classMember.isStatic) {
@@ -42,7 +71,8 @@ class DartUnitOverridesComputer {
List<VariableDeclaration> fields = classMember.fields.variables;
for (VariableDeclaration field in fields) {
SimpleIdentifier nameNode = field.name;
- _addOverride(nameNode.offset, nameNode.length, nameNode.name);
+ _addOverride(
+ nameNode.offset, nameNode.length, nameNode.name, FIELD_KINDS);
}
}
}
@@ -54,6 +84,7 @@ class DartUnitOverridesComputer {
void _addInterfaceOverrides(
Set<engine.Element> elements,
String name,
+ List<ElementKind> kinds,
engine.InterfaceType type,
bool checkType,
Set<engine.InterfaceType> visited) {
@@ -65,7 +96,7 @@ class DartUnitOverridesComputer {
}
// check type
if (checkType) {
- engine.Element element = _lookupMember(type.element, name);
+ engine.Element element = _lookupMember(type.element, name, kinds);
if (element != null) {
elements.add(element);
return;
@@ -73,25 +104,28 @@ class DartUnitOverridesComputer {
}
// check interfaces
for (engine.InterfaceType interfaceType in type.interfaces) {
- _addInterfaceOverrides(elements, name, interfaceType, true, visited);
+ _addInterfaceOverrides(
+ elements, name, kinds, interfaceType, true, visited);
}
// check super
- _addInterfaceOverrides(elements, name, type.superclass, checkType, visited);
+ _addInterfaceOverrides(
+ elements, name, kinds, type.superclass, checkType, visited);
}
- void _addOverride(int offset, int length, String name) {
+ void _addOverride(
+ int offset, int length, String name, List<ElementKind> kinds) {
// super
engine.Element superEngineElement;
{
engine.InterfaceType superType = _currentClass.supertype;
if (superType != null) {
- superEngineElement = _lookupMember(superType.element, name);
+ superEngineElement = _lookupMember(superType.element, name, kinds);
}
}
// interfaces
Set<engine.Element> interfaceEngineElements = new Set<engine.Element>();
- _addInterfaceOverrides(interfaceEngineElements, name, _currentClass.type,
- false, new Set<engine.InterfaceType>());
+ _addInterfaceOverrides(interfaceEngineElements, name, kinds,
+ _currentClass.type, false, new Set<engine.InterfaceType>());
interfaceEngineElements.remove(superEngineElement);
// is there any override?
if (superEngineElement != null || interfaceEngineElements.isNotEmpty) {
@@ -108,25 +142,32 @@ class DartUnitOverridesComputer {
}
static engine.Element _lookupMember(
- engine.ClassElement classElement, String name) {
+ engine.ClassElement classElement, String name, List<ElementKind> kinds) {
if (classElement == null) {
return null;
}
engine.LibraryElement library = classElement.library;
+ engine.Element member;
// method
- engine.Element member = classElement.lookUpMethod(name, library);
- if (member != null) {
- return member;
+ if (kinds.contains(ElementKind.METHOD)) {
+ member = classElement.lookUpMethod(name, library);
+ if (member != null) {
+ return member;
+ }
}
// getter
- member = classElement.lookUpGetter(name, library);
- if (member != null) {
- return member;
+ if (kinds.contains(ElementKind.GETTER)) {
+ member = classElement.lookUpGetter(name, library);
+ if (member != null) {
+ return member;
+ }
}
// setter
- member = classElement.lookUpSetter(name + '=', library);
- if (member != null) {
- return member;
+ if (kinds.contains(ElementKind.SETTER)) {
+ member = classElement.lookUpSetter(name + '=', library);
+ if (member != null) {
+ return member;
+ }
}
// not found
return null;
« no previous file with comments | « no previous file | pkg/analysis_server/test/analysis/notification_overrides_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698