OLD | NEW |
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.base.Joiner; | 7 import com.google.common.base.Joiner; |
8 import com.google.common.base.Splitter; | 8 import com.google.common.base.Splitter; |
9 import com.google.common.collect.Lists; | 9 import com.google.common.collect.Lists; |
10 import com.google.dart.compiler.DartCompilationError; | 10 import com.google.dart.compiler.DartCompilationError; |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
42 @Override | 42 @Override |
43 public void setUp() { | 43 public void setUp() { |
44 resetParseErrors(); | 44 resetParseErrors(); |
45 } | 45 } |
46 | 46 |
47 @Override | 47 @Override |
48 public void tearDown() { | 48 public void tearDown() { |
49 resetParseErrors(); | 49 resetParseErrors(); |
50 } | 50 } |
51 | 51 |
| 52 private static CoreTypeProvider setupTypeProvider(DartUnit unit, TestCompilerC
ontext context, Scope scope) { |
| 53 new TopLevelElementBuilder().exec(unit, context); |
| 54 new TopLevelElementBuilder().fillInUnitScope(unit, context, scope); |
| 55 ClassElement object = (ClassElement) scope.findElement(null, "Object"); |
| 56 assertNotNull("Cannot resolve Object", object); |
| 57 return new MockCoreTypeProvider(object); |
| 58 } |
| 59 |
52 static Scope resolve(DartUnit unit, TestCompilerContext context) { | 60 static Scope resolve(DartUnit unit, TestCompilerContext context) { |
53 Scope scope = new Scope("library", null); | 61 Scope scope = new Scope("library", null); |
54 new TopLevelElementBuilder().exec(unit, context); | 62 CoreTypeProvider typeProvider = setupTypeProvider(unit, context, scope); |
55 new TopLevelElementBuilder().fillInUnitScope(unit, context, scope); | |
56 ClassElement object = (ClassElement) scope.findElement(null, "Object"); | |
57 assertNotNull("Cannot resolve Object", object); | |
58 CoreTypeProvider typeProvider = new MockCoreTypeProvider(object); | |
59 new SupertypeResolver().exec(unit, context, scope, typeProvider); | 63 new SupertypeResolver().exec(unit, context, scope, typeProvider); |
60 new MemberBuilder().exec(unit, context, scope, typeProvider); | 64 new MemberBuilder().exec(unit, context, scope, typeProvider); |
61 new Resolver(context, scope, typeProvider).exec(unit); | 65 new Resolver(context, scope, typeProvider).exec(unit); |
62 return scope; | 66 return scope; |
63 } | 67 } |
64 | 68 |
| 69 static Scope resolveCompileTimeConst (DartUnit unit, TestCompilerContext conte
xt) { |
| 70 Scope scope = new Scope("library", null); |
| 71 CoreTypeProvider typeProvider = setupTypeProvider(unit, context, scope); |
| 72 new SupertypeResolver().exec(unit, context, scope, typeProvider); |
| 73 new MemberBuilder().exec(unit, context, scope, typeProvider); |
| 74 // Substitute the lightweight CTConst resolver |
| 75 new CompileTimeConstantResolver().exec(unit, context, scope, typeProvider); |
| 76 new CompileTimeConstantAnalyzer(typeProvider, context).exec(unit); |
| 77 return scope; |
| 78 } |
| 79 |
| 80 |
65 static DartClass makeClass(String name, DartTypeNode supertype, String... type
Parameters) { | 81 static DartClass makeClass(String name, DartTypeNode supertype, String... type
Parameters) { |
66 return makeClass(name, supertype, Collections.<DartTypeNode>emptyList(), typ
eParameters); | 82 return makeClass(name, supertype, Collections.<DartTypeNode>emptyList(), typ
eParameters); |
67 } | 83 } |
68 | 84 |
69 static DartClass makeClass(String name, DartTypeNode supertype, List<DartTypeN
ode> interfaces, | 85 static DartClass makeClass(String name, DartTypeNode supertype, List<DartTypeN
ode> interfaces, |
70 String... typeParameters) { | 86 String... typeParameters) { |
71 List<DartTypeParameter> parameterNodes = new ArrayList<DartTypeParameter>(); | 87 List<DartTypeParameter> parameterNodes = new ArrayList<DartTypeParameter>(); |
72 for (String parameter : typeParameters) { | 88 for (String parameter : typeParameters) { |
73 parameterNodes.add(makeTypeVariable(parameter)); | 89 parameterNodes.add(makeTypeVariable(parameter)); |
74 } | 90 } |
(...skipping 283 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
358 for (String line : Splitter.on("\n").split(source)) { | 374 for (String line : Splitter.on("\n").split(source)) { |
359 System.out.println(String.format(" %02d: %s", count++, line)); | 375 System.out.println(String.format(" %02d: %s", count++, line)); |
360 } | 376 } |
361 } | 377 } |
362 } | 378 } |
363 /** | 379 /** |
364 * For debugging. | 380 * For debugging. |
365 */ | 381 */ |
366 protected void printEncountered(List<DartCompilationError> encountered) { | 382 protected void printEncountered(List<DartCompilationError> encountered) { |
367 for (DartCompilationError error : encountered) { | 383 for (DartCompilationError error : encountered) { |
368 ErrorCode errorCode = (ErrorCode) error.getErrorCode(); | 384 ErrorCode errorCode = error.getErrorCode(); |
369 String msg = | 385 String msg = |
370 String.format( | 386 String.format( |
371 "%s > %s (%d:%d)", | 387 "%s > %s (%d:%d)", |
372 errorCode.toString(), | 388 errorCode.toString(), |
373 error.getMessage(), | 389 error.getMessage(), |
374 error.getLineNumber(), | 390 error.getLineNumber(), |
375 error.getColumnNumber()); | 391 error.getColumnNumber()); |
376 System.out.println(msg); | 392 System.out.println(msg); |
377 } | 393 } |
378 } | 394 } |
379 | 395 |
380 /** | 396 /** |
381 * Convenience method to parse and resolve a code snippet, then test for error
codes. | 397 * Convenience method to parse and resolve a code snippet, then test for error
codes. |
382 * | 398 * |
383 * @return resolve errors. | 399 * @return resolve errors. |
384 */ | 400 */ |
385 protected List<DartCompilationError> resolveAndTest(String source, ErrorCode..
. errorCodes) { | 401 protected List<DartCompilationError> resolveAndTest(String source, ErrorCode..
. errorCodes) { |
386 // parse DartUnit | 402 // parse DartUnit |
387 DartUnit unit = parseUnit(source); | 403 DartUnit unit = parseUnit(source); |
388 if (parseErrors.size() != 0) { | 404 if (parseErrors.size() != 0) { |
389 printSource(source); | 405 printSource(source); |
390 printEncountered(parseErrors); | 406 printEncountered(parseErrors); |
391 assertEquals("Expected no errors in parse step:", 0, parseErrors.size()); | 407 assertEquals("Expected no errors in parse step:", 0, parseErrors.size()); |
392 } | 408 } |
393 // prepare for recording resolving errors | 409 // prepare for recording resolving errors |
394 resetParseErrors(); | 410 resetParseErrors(); |
395 final List<DartCompilationError> resolveErrors = Lists.newArrayList(); | 411 final List<DartCompilationError> resolveErrors = Lists.newArrayList(); |
396 TestCompilerContext ctx = new TestCompilerContext() { | 412 TestCompilerContext ctx = new TestCompilerContext() { |
397 @Override | 413 @Override |
398 public void onError(DartCompilationError event) { | 414 public void onError(DartCompilationError event) { |
399 resolveErrors.add(event); | 415 resolveErrors.add(event); |
400 } | 416 } |
401 }; | 417 }; |
402 // resolve and check errors | 418 // resolve and check errors |
403 resolve(unit, ctx); | 419 resolve(unit, ctx); |
404 checkExpectedErrors(resolveErrors, errorCodes, source); | 420 checkExpectedErrors(resolveErrors, errorCodes, source); |
405 return resolveErrors; | 421 return resolveErrors; |
406 } | 422 } |
| 423 |
| 424 /** |
| 425 * Convenience method to parse and resolve a code snippet, then test for error
codes. |
| 426 * |
| 427 * @return resolve errors. |
| 428 */ |
| 429 protected List<DartCompilationError> resolveAndTestCtConst(String source, Erro
rCode... errorCodes) { |
| 430 // parse DartUnit |
| 431 DartUnit unit = parseUnit(source); |
| 432 if (parseErrors.size() != 0) { |
| 433 printSource(source); |
| 434 printEncountered(parseErrors); |
| 435 assertEquals("Expected no errors in parse step:", 0, parseErrors.size()); |
| 436 } |
| 437 // prepare for recording resolving errors |
| 438 resetParseErrors(); |
| 439 final List<DartCompilationError> resolveErrors = Lists.newArrayList(); |
| 440 TestCompilerContext ctx = new TestCompilerContext() { |
| 441 @Override |
| 442 public void onError(DartCompilationError event) { |
| 443 resolveErrors.add(event); |
| 444 } |
| 445 }; |
| 446 // resolve and check errors |
| 447 resolveCompileTimeConst(unit, ctx); |
| 448 checkExpectedErrors(resolveErrors, errorCodes, source); |
| 449 return resolveErrors; |
| 450 } |
407 } | 451 } |
OLD | NEW |