Index: editor/tools/plugins/com.google.dart.engine/src/com/google/dart/engine/internal/task/ParseHtmlTask.java |
diff --git a/editor/tools/plugins/com.google.dart.engine/src/com/google/dart/engine/internal/task/ParseHtmlTask.java b/editor/tools/plugins/com.google.dart.engine/src/com/google/dart/engine/internal/task/ParseHtmlTask.java |
index 16cf1333c3b47505a8d7673a8c62783cfb8a963b..a33765d0e18cd92b59e5462dd35e1efce4263200 100644 |
--- a/editor/tools/plugins/com.google.dart.engine/src/com/google/dart/engine/internal/task/ParseHtmlTask.java |
+++ b/editor/tools/plugins/com.google.dart.engine/src/com/google/dart/engine/internal/task/ParseHtmlTask.java |
@@ -13,8 +13,15 @@ |
*/ |
package com.google.dart.engine.internal.task; |
+import com.google.dart.engine.ast.CompilationUnit; |
+import com.google.dart.engine.ast.Directive; |
+import com.google.dart.engine.ast.ExportDirective; |
+import com.google.dart.engine.ast.ImportDirective; |
+import com.google.dart.engine.ast.PartDirective; |
+import com.google.dart.engine.context.AnalysisContext; |
import com.google.dart.engine.context.AnalysisException; |
import com.google.dart.engine.error.AnalysisError; |
+import com.google.dart.engine.error.AnalysisErrorListener; |
import com.google.dart.engine.html.ast.HtmlScriptTagNode; |
import com.google.dart.engine.html.ast.HtmlUnit; |
import com.google.dart.engine.html.ast.XmlAttributeNode; |
@@ -174,8 +181,15 @@ public class ParseHtmlTask extends AnalysisTask { |
scanner.setPassThroughElements(new String[] {TAG_SCRIPT}); |
Token token = scanner.tokenize(); |
lineInfo = new LineInfo(scanner.getLineStarts()); |
- RecordingErrorListener errorListener = new RecordingErrorListener(); |
+ final RecordingErrorListener errorListener = new RecordingErrorListener(); |
unit = new HtmlParser(source, errorListener).parse(token, lineInfo); |
+ unit.accept(new RecursiveXmlVisitor<Void>() { |
+ @Override |
+ public Void visitHtmlScriptTagNode(HtmlScriptTagNode node) { |
+ resolveScriptDirectives(node.getScript(), errorListener); |
+ return null; |
+ } |
+ }); |
errors = errorListener.getErrorsForSource(source); |
referencedLibraries = getLibrarySources(); |
} catch (Exception exception) { |
@@ -219,4 +233,35 @@ public class ParseHtmlTask extends AnalysisTask { |
} |
return libraries.toArray(new Source[libraries.size()]); |
} |
+ |
+ /** |
+ * Resolves directives in the given {@link CompilationUnit}. |
+ */ |
+ private void resolveScriptDirectives(CompilationUnit script, AnalysisErrorListener errorListener) { |
+ if (script == null) { |
+ return; |
+ } |
+ AnalysisContext analysisContext = getContext(); |
+ for (Directive directive : script.getDirectives()) { |
+ if (directive instanceof ExportDirective) { |
+ ParseDartTask.resolveSource( |
+ analysisContext, |
+ source, |
+ (ExportDirective) directive, |
+ errorListener); |
+ } else if (directive instanceof ImportDirective) { |
+ ParseDartTask.resolveSource( |
+ analysisContext, |
+ source, |
+ (ImportDirective) directive, |
+ errorListener); |
+ } else if (directive instanceof PartDirective) { |
+ ParseDartTask.resolveSource( |
+ analysisContext, |
+ source, |
+ (PartDirective) directive, |
+ errorListener); |
+ } |
+ } |
+ } |
} |