Index: dart/site/try/poi/poi.dart |
diff --git a/dart/site/try/poi/poi.dart b/dart/site/try/poi/poi.dart |
index 603a5a6e27cd1374703cb704369e1f30bfa573bf..f4e049804ee150ed1670d3e23e207cb3d17422a4 100644 |
--- a/dart/site/try/poi/poi.dart |
+++ b/dart/site/try/poi/poi.dart |
@@ -100,6 +100,8 @@ const bool PRINT_SCOPE_INFO = |
Stopwatch wallClock = new Stopwatch(); |
+Compiler cachedCompiler; |
+ |
/// Iterator for reading lines from [io.stdin]. |
class StdinIterator implements Iterator<String> { |
String current; |
@@ -183,7 +185,7 @@ main(List<String> arguments) { |
/// [simulateMutation]. |
api.CompilerInputProvider simulateMutation( |
String fileName, |
- SourceFileProvider inputProvider) { |
+ api.CompilerInputProvider inputProvider) { |
Uri script = Uri.base.resolveUri(new Uri.file(fileName)); |
int count = poiCount; |
Future cache; |
@@ -266,7 +268,7 @@ Future parseUserInput( |
Uri script = Uri.base.resolveUri(new Uri.file(fileName)); |
if (positionString == null) return null; |
int position = int.parse( |
- positionString, onError: (_) => print('Please enter an integer.')); |
+ positionString, onError: (_) { print('Please enter an integer.'); }); |
if (position == null) return repeat(); |
inputProvider(script); |
@@ -326,16 +328,16 @@ Future parseUserInput( |
/// Find the token corresponding to [position] in [element]. The method only |
/// works for instances of [PartialElement] or [LibraryElement]. Support for |
/// [LibraryElement] is currently limited, and works only for named libraries. |
-Token findToken(Element element, int position) { |
+Token findToken(modelx.ElementX element, int position) { |
Token beginToken; |
if (element is PartialElement) { |
- beginToken = element.beginToken; |
+ beginToken = (element as PartialElement).beginToken; |
} else if (element is PartialClassElement) { |
beginToken = element.beginToken; |
} else if (element.isLibrary) { |
// TODO(ahe): Generalize support for library elements (and update above |
// documentation). |
- LibraryElement lib = element; |
+ modelx.LibraryElementX lib = element; |
var tag = lib.libraryTag; |
if (tag != null) { |
beginToken = tag.libraryKeyword; |
@@ -352,13 +354,11 @@ Token findToken(Element element, int position) { |
return null; |
} |
-Compiler cachedCompiler; |
- |
Future<Element> runPoi( |
- Uri script, int position, |
+ Uri script, |
+ int position, |
api.CompilerInputProvider inputProvider, |
api.DiagnosticHandler handler) { |
- |
Uri libraryRoot = Uri.base.resolve('sdk/'); |
Uri packageRoot = Uri.base.resolveUri( |
new Uri.file('${Platform.packageRoot}/')); |
@@ -373,18 +373,27 @@ Future<Element> runPoi( |
'--disable-type-inference', |
]; |
- cachedCompiler = reuseCompiler( |
+ return reuseCompiler( |
diagnosticHandler: handler, |
inputProvider: inputProvider, |
options: options, |
cachedCompiler: cachedCompiler, |
libraryRoot: libraryRoot, |
packageRoot: packageRoot, |
- packagesAreImmutable: true); |
+ packagesAreImmutable: true).then((Compiler newCompiler) { |
+ var filter = new ScriptOnlyFilter(script); |
+ newCompiler.enqueuerFilter = filter; |
+ return runPoiInternal(newCompiler, script, position); |
+ }); |
+} |
- cachedCompiler.enqueuerFilter = new ScriptOnlyFilter(script); |
+Future<Element> runPoiInternal( |
+ Compiler newCompiler, |
+ Uri uri, |
+ int position) { |
+ cachedCompiler = newCompiler; |
- return cachedCompiler.run(script).then((success) { |
+ return cachedCompiler.run(uri).then((success) { |
if (success != true) { |
throw 'Compilation failed'; |
} |
@@ -413,8 +422,8 @@ class FindPositionVisitor extends ElementVisitor { |
visitElement(Element e) { |
if (e is PartialElement) { |
- if (e.beginToken.charOffset <= position && |
- position < e.endToken.next.charOffset) { |
+ if ((e as PartialElement).beginToken.charOffset <= position && |
+ position < (e as PartialElement).endToken.next.charOffset) { |
element = e; |
} |
} |