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

Side by Side Diff: pkg/analysis_server/lib/src/computer/computer_overrides.dart

Issue 440743002: Update 'analysis.override' notification to the latest spec. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 4 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | pkg/analysis_server/test/analysis_notification_overrides_test.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 computer.overrides; 5 library computer.overrides;
6 6
7 import 'package:analysis_server/src/computer/element.dart'; 7 import 'package:analysis_server/src/computer/element.dart';
8 import 'package:analysis_services/constants.dart'; 8 import 'package:analysis_services/constants.dart';
9 import 'package:analysis_services/json.dart'; 9 import 'package:analysis_services/json.dart';
10 import 'package:analyzer/src/generated/ast.dart'; 10 import 'package:analyzer/src/generated/ast.dart';
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
60 List<engine.Element> interfaceEngineElements = <engine.Element>[]; 60 List<engine.Element> interfaceEngineElements = <engine.Element>[];
61 for (engine.InterfaceType interfaceType in _currentClass.interfaces) { 61 for (engine.InterfaceType interfaceType in _currentClass.interfaces) {
62 engine.ClassElement interfaceElement = interfaceType.element; 62 engine.ClassElement interfaceElement = interfaceType.element;
63 engine.Element interfaceMember = _lookupMember(interfaceElement, name); 63 engine.Element interfaceMember = _lookupMember(interfaceElement, name);
64 if (interfaceMember != null) { 64 if (interfaceMember != null) {
65 interfaceEngineElements.add(interfaceMember); 65 interfaceEngineElements.add(interfaceMember);
66 } 66 }
67 } 67 }
68 // is there any override? 68 // is there any override?
69 if (superEngineElement != null || interfaceEngineElements.isNotEmpty) { 69 if (superEngineElement != null || interfaceEngineElements.isNotEmpty) {
70 Element superElement = superEngineElement != null ? 70 OverriddenMember superMember = superEngineElement != null ?
71 new Element.fromEngine(superEngineElement) : null; 71 OverriddenMember.fromEngine(superEngineElement) :
72 List<Element> interfaceElements = interfaceEngineElements.map( 72 null;
73 (engineElement) { 73 List<OverriddenMember> interfaceMembers =
74 return new Element.fromEngine(engineElement); 74 interfaceEngineElements.map(OverriddenMember.fromEngine).toList();
75 }).toList(); 75 _overrides.add(
76 _overrides.add(new Override(offset, length, superElement, 76 new Override(offset, length, superMember, interfaceMembers));
77 interfaceElements));
78 } 77 }
79 } 78 }
80 79
81 static engine.Element _lookupMember(engine.ClassElement classElement, 80 static engine.Element _lookupMember(engine.ClassElement classElement,
82 String name) { 81 String name) {
83 if (classElement == null) { 82 if (classElement == null) {
84 return null; 83 return null;
85 } 84 }
86 engine.LibraryElement library = classElement.library; 85 engine.LibraryElement library = classElement.library;
87 // method 86 // method
(...skipping 10 matching lines...) Expand all
98 member = classElement.lookUpSetter(name + '=', library); 97 member = classElement.lookUpSetter(name + '=', library);
99 if (member != null) { 98 if (member != null) {
100 return member; 99 return member;
101 } 100 }
102 // not found 101 // not found
103 return null; 102 return null;
104 } 103 }
105 } 104 }
106 105
107 106
107 class OverriddenMember implements HasToJson {
108 final Element element;
109 final String className;
110
111 OverriddenMember(this.element, this.className);
112
113 Map<String, Object> toJson() {
114 return {
115 ELEMENT: element.toJson(),
116 CLASS_NAME: className
117 };
118 }
119
120 @override
121 String toString() => toJson().toString();
122
123 static OverriddenMember fromEngine(engine.Element member) {
124 Element element = new Element.fromEngine(member);
125 String className = member.enclosingElement.displayName;
126 return new OverriddenMember(element, className);
127 }
128
129 static OverriddenMember fromJson(Map<String, Object> json) {
130 Map<String, Object> elementJson = json[ELEMENT];
131 Element element = new Element.fromJson(elementJson);
132 String className = json[CLASS_NAME];
133 return new OverriddenMember(element, className);
134 }
135 }
136
137
108 class Override implements HasToJson { 138 class Override implements HasToJson {
109 final int offset; 139 final int offset;
110 final int length; 140 final int length;
111 final Element superclassElement; 141 final OverriddenMember superclassMember;
112 final List<Element> interfaceElements; 142 final List<OverriddenMember> interfaceMembers;
113 143
114 Override(this.offset, this.length, this.superclassElement, 144 Override(this.offset, this.length, this.superclassMember,
115 this.interfaceElements); 145 this.interfaceMembers);
116
117 factory Override.fromJson(Map<String, Object> map) {
118 int offset = map[OFFSET];
119 int length = map[LENGTH];
120 // super
121 Element superclassElement = null;
122 {
123 Map<String, Object> superJson = map[SUPER_CLASS_ELEMENT];
124 if (superJson != null) {
125 superclassElement = new Element.fromJson(superJson);
126 }
127 }
128 // interfaces
129 List<Element> interfaceElements = null;
130 {
131 List<Map<String, Object>> jsonList = map[INTERFACE_ELEMENTS];
132 if (jsonList != null) {
133 interfaceElements = <Element>[];
134 for (Map<String, Object> json in jsonList) {
135 interfaceElements.add(new Element.fromJson(json));
136 }
137 }
138 }
139 // done
140 return new Override(offset, length, superclassElement, interfaceElements);
141 }
142 146
143 Map<String, Object> toJson() { 147 Map<String, Object> toJson() {
144 Map<String, Object> json = <String, Object>{}; 148 Map<String, Object> json = <String, Object>{};
145 json[OFFSET] = offset; 149 json[OFFSET] = offset;
146 json[LENGTH] = length; 150 json[LENGTH] = length;
147 if (superclassElement != null) { 151 if (superclassMember != null) {
148 json[SUPER_CLASS_ELEMENT] = superclassElement.toJson(); 152 json[SUPER_CLASS_MEMBER] = superclassMember.toJson();
149 } 153 }
150 if (interfaceElements != null && interfaceElements.isNotEmpty) { 154 if (interfaceMembers != null && interfaceMembers.isNotEmpty) {
151 json[INTERFACE_ELEMENTS] = interfaceElements.map((element) { 155 json[INTERFACE_MEMBERS] = objectToJson(interfaceMembers);
152 return element.toJson();
153 }).toList();
154 } 156 }
155 return json; 157 return json;
156 } 158 }
157 159
158 @override 160 @override
159 String toString() => toJson().toString(); 161 String toString() => toJson().toString();
162
163 static Override fromJson(Map<String, Object> map) {
164 int offset = map[OFFSET];
165 int length = map[LENGTH];
166 // super
167 OverriddenMember superclassMember = null;
168 {
169 Map<String, Object> superJson = map[SUPER_CLASS_MEMBER];
170 if (superJson != null) {
171 superclassMember = OverriddenMember.fromJson(superJson);
172 }
173 }
174 // interfaces
175 List<OverriddenMember> interfaceElements = null;
176 {
177 List<Map<String, Object>> jsonList = map[INTERFACE_MEMBERS];
178 if (jsonList != null) {
179 interfaceElements = jsonList.map(OverriddenMember.fromJson).toList();
180 }
181 }
182 // done
183 return new Override(offset, length, superclassMember, interfaceElements);
184 }
160 } 185 }
OLDNEW
« 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