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

Side by Side Diff: compiler/java/com/google/dart/compiler/resolver/MemberBuilder.java

Issue 9700019: Use NodeElement to access Node in Resolver (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 8 years, 9 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
OLDNEW
1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2011, 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 package com.google.dart.compiler.resolver; 5 package com.google.dart.compiler.resolver;
6 6
7 import com.google.common.annotations.VisibleForTesting; 7 import com.google.common.annotations.VisibleForTesting;
8 import com.google.dart.compiler.DartCompilerContext; 8 import com.google.dart.compiler.DartCompilerContext;
9 import com.google.dart.compiler.ErrorCode; 9 import com.google.dart.compiler.ErrorCode;
10 import com.google.dart.compiler.ast.ASTVisitor; 10 import com.google.dart.compiler.ast.ASTVisitor;
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
123 parameters, returnType)); 123 parameters, returnType));
124 currentHolder = libraryElement; 124 currentHolder = libraryElement;
125 context = topLevelContext; 125 context = topLevelContext;
126 return null; 126 return null;
127 } 127 }
128 128
129 @Override 129 @Override
130 public Element visitMethodDefinition(final DartMethodDefinition method) { 130 public Element visitMethodDefinition(final DartMethodDefinition method) {
131 isFactory = method.getModifiers().isFactory(); 131 isFactory = method.getModifiers().isFactory();
132 isStatic = method.getModifiers().isStatic() || isFactory; 132 isStatic = method.getModifiers().isStatic() || isFactory;
133 MethodElement element = method.getElement(); 133 MethodNodeElement element = method.getElement();
134 if (element == null) { 134 if (element == null) {
135 switch (getMethodKind(method)) { 135 switch (getMethodKind(method)) {
136 case NONE: 136 case NONE:
137 case CONSTRUCTOR: 137 case CONSTRUCTOR:
138 element = buildConstructor(method); 138 element = buildConstructor(method);
139 checkConstructor(element, method); 139 checkConstructor(element, method);
140 addConstructor((ClassElement) currentHolder, (ConstructorElement) el ement); 140 addConstructor((ClassElement) currentHolder, (ConstructorNodeElement ) element);
141 break; 141 break;
142 142
143 case METHOD: 143 case METHOD:
144 element = Elements.methodFromMethodNode(method, currentHolder); 144 element = Elements.methodFromMethodNode(method, currentHolder);
145 addMethod(currentHolder, element); 145 addMethod(currentHolder, element);
146 break; 146 break;
147 } 147 }
148 } else { 148 } else {
149 // This is a top-level element, and an element was already created in 149 // This is a top-level element, and an element was already created in
150 // TopLevelElementBuilder. 150 // TopLevelElementBuilder.
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
225 recordElement(node.getExpression(), element); 225 recordElement(node.getExpression(), element);
226 } 226 }
227 return element; 227 return element;
228 } 228 }
229 @Override public Element visitNode(DartNode node) { 229 @Override public Element visitNode(DartNode node) {
230 throw new RuntimeException("Unexpected node " + node); 230 throw new RuntimeException("Unexpected node " + node);
231 } 231 }
232 }); 232 });
233 } 233 }
234 234
235 private MethodElement buildConstructor(final DartMethodDefinition method) { 235 private MethodNodeElement buildConstructor(final DartMethodDefinition method ) {
236 // Resolve the constructor's name and class name. 236 // Resolve the constructor's name and class name.
237 Element e = resolveConstructorName(method); 237 Element e = resolveConstructorName(method);
238 238
239 switch (ElementKind.of(e)) { 239 switch (ElementKind.of(e)) {
240 default: 240 default:
241 // Report an error and create a fake constructor element below. 241 // Report an error and create a fake constructor element below.
242 resolutionError(method.getName(), ResolverErrorCode.INVALID_TYPE_NAME_ IN_CONSTRUCTOR); 242 resolutionError(method.getName(), ResolverErrorCode.INVALID_TYPE_NAME_ IN_CONSTRUCTOR);
243 break; 243 break;
244 244
245 case DYNAMIC: 245 case DYNAMIC:
246 case CLASS: 246 case CLASS:
247 break; 247 break;
248 248
249 case CONSTRUCTOR: 249 case CONSTRUCTOR:
250 return (ConstructorElement) e; 250 return (ConstructorNodeElement) e;
251 } 251 }
252 // If the constructor name resolves to a class or there was an error, 252 // If the constructor name resolves to a class or there was an error,
253 // create the unnamed constructor. 253 // create the unnamed constructor.
254 return Elements.constructorFromMethodNode(method, "", (ClassElement) curre ntHolder, 254 return Elements.constructorFromMethodNode(method, "", (ClassElement) curre ntHolder,
255 (ClassElement) e); 255 (ClassElement) e);
256 } 256 }
257 257
258 private FieldElement buildField(DartField fieldNode, Type type) { 258 private FieldElement buildField(DartField fieldNode, Type type) {
259 assert !fieldNode.getModifiers().isAbstractField(); 259 assert !fieldNode.getModifiers().isAbstractField();
260 Modifiers modifiers = fieldNode.getModifiers(); 260 Modifiers modifiers = fieldNode.getModifiers();
261 if (modifiers.isFinal() && (modifiers.isStatic() || context == topLevelCon text)) { 261 if (modifiers.isFinal() && (modifiers.isStatic() || context == topLevelCon text)) {
262 // final toplevel fields are implicitly compile-time constants. 262 // final toplevel fields are implicitly compile-time constants.
263 modifiers = modifiers.makeStatic(); 263 modifiers = modifiers.makeStatic();
264 // Set the "const" modifier so that it is easy to compare a constant fie ld to other 264 // Set the "const" modifier so that it is easy to compare a constant fie ld to other
265 // types of constant expressions. 265 // types of constant expressions.
266 modifiers = modifiers.makeConstant(); 266 modifiers = modifiers.makeConstant();
267 } 267 }
268 FieldElement fieldElement = fieldNode.getElement(); 268 FieldNodeElement fieldElement = fieldNode.getElement();
269 if (fieldElement == null) { 269 if (fieldElement == null) {
270 fieldElement = Elements.fieldFromNode(fieldNode, currentHolder, modifier s); 270 fieldElement = Elements.fieldFromNode(fieldNode, currentHolder, modifier s);
271 addField(currentHolder, fieldElement); 271 addField(currentHolder, fieldElement);
272 } else { 272 } else {
273 // This is a top-level element, and an element was already created in 273 // This is a top-level element, and an element was already created in
274 // TopLevelElementBuilder. 274 // TopLevelElementBuilder.
275 Elements.addField(currentHolder, fieldElement); 275 Elements.addField(currentHolder, fieldElement);
276 assertTopLevel(fieldNode); 276 assertTopLevel(fieldNode);
277 } 277 }
278 fieldElement.setType(type); 278 fieldElement.setType(type);
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
319 * + setter: 319 * + setter:
320 * MethodElement 320 * MethodElement
321 * + name: foo 321 * + name: foo
322 * + function: set foo(x) { ... } 322 * + function: set foo(x) { ... }
323 * 323 *
324 */ 324 */
325 private FieldElement buildAbstractField(DartField fieldNode) { 325 private FieldElement buildAbstractField(DartField fieldNode) {
326 assert fieldNode.getModifiers().isAbstractField(); 326 assert fieldNode.getModifiers().isAbstractField();
327 boolean topLevelDefinition = fieldNode.getParent().getParent() instanceof DartUnit; 327 boolean topLevelDefinition = fieldNode.getParent().getParent() instanceof DartUnit;
328 DartMethodDefinition accessorNode = fieldNode.getAccessor(); 328 DartMethodDefinition accessorNode = fieldNode.getAccessor();
329 MethodElement accessorElement = Elements.methodFromMethodNode(accessorNode , currentHolder); 329 MethodNodeElement accessorElement = Elements.methodFromMethodNode(accessor Node, currentHolder);
330 EnclosingElement previousEnclosingElement = enclosingElement; 330 EnclosingElement previousEnclosingElement = enclosingElement;
331 enclosingElement = accessorElement; 331 enclosingElement = accessorElement;
332 recordElement(accessorNode, accessorElement); 332 recordElement(accessorNode, accessorElement);
333 resolveFunction(accessorNode.getFunction(), accessorElement); 333 resolveFunction(accessorNode.getFunction(), accessorElement);
334 enclosingElement = previousEnclosingElement; 334 enclosingElement = previousEnclosingElement;
335 335
336 String name = fieldNode.getName().getName(); 336 String name = fieldNode.getName().getName();
337 Element element = null; 337 Element element = null;
338 if (currentHolder != null) { 338 if (currentHolder != null) {
339 element = currentHolder.lookupLocalElement(name); 339 element = currentHolder.lookupLocalElement(name);
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
378 type = getTypeProvider().getDynamicType(); 378 type = getTypeProvider().getDynamicType();
379 } else { 379 } else {
380 type = parameters.get(0).getType(); 380 type = parameters.get(0).getType();
381 } 381 }
382 fieldElement.setType(type); 382 fieldElement.setType(type);
383 } 383 }
384 } 384 }
385 return recordElement(fieldNode, fieldElement); 385 return recordElement(fieldNode, fieldElement);
386 } 386 }
387 387
388 private void addField(EnclosingElement holder, FieldElement element) { 388 private void addField(EnclosingElement holder, FieldNodeElement element) {
389 if (holder != null) { 389 if (holder != null) {
390 checkUniqueName(holder, element); 390 checkUniqueName(holder, element);
391 Elements.addField(holder, element); 391 Elements.addField(holder, element);
392 } 392 }
393 } 393 }
394 394
395 private void addMethod(EnclosingElement holder, MethodElement element) { 395 private void addMethod(EnclosingElement holder, MethodNodeElement element) {
396 checkUniqueName(holder, element); 396 checkUniqueName(holder, element);
397 Elements.addMethod(holder, element); 397 Elements.addMethod(holder, element);
398 } 398 }
399 399
400 private void addConstructor(ClassElement cls, MethodElement element) { 400 private void addConstructor(ClassElement cls, ConstructorNodeElement element ) {
401 checkUniqueName(cls, element); 401 checkUniqueName(cls, element);
402 Elements.addConstructor(cls, (ConstructorElement) element); 402 Elements.addConstructor(cls, element);
403 } 403 }
404 404
405 private ElementKind getMethodKind(DartMethodDefinition method) { 405 private ElementKind getMethodKind(DartMethodDefinition method) {
406 if (!ElementKind.of(currentHolder).equals(ElementKind.CLASS)) { 406 if (!ElementKind.of(currentHolder).equals(ElementKind.CLASS)) {
407 return ElementKind.METHOD; 407 return ElementKind.METHOD;
408 } 408 }
409 409
410 if (method.getModifiers().isFactory()) { 410 if (method.getModifiers().isFactory()) {
411 return ElementKind.CONSTRUCTOR; 411 return ElementKind.CONSTRUCTOR;
412 } 412 }
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after
560 */ 560 */
561 private void reportDuplicateDeclaration(ErrorCode errorCode, Element element ) { 561 private void reportDuplicateDeclaration(ErrorCode errorCode, Element element ) {
562 String name = 562 String name =
563 element instanceof MethodElement 563 element instanceof MethodElement
564 ? Elements.getRawMethodName((MethodElement) element) 564 ? Elements.getRawMethodName((MethodElement) element)
565 : element.getName(); 565 : element.getName();
566 resolutionError(element.getNameLocation(), errorCode, name); 566 resolutionError(element.getNameLocation(), errorCode, name);
567 } 567 }
568 } 568 }
569 } 569 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698