blob: 61e3302150ab022b4ed53db51c7ae21021add135 [file] [log] [blame]
// Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
package com.google.dart.compiler;
import com.google.dart.compiler.ast.LibraryUnit;
import com.google.dart.compiler.metrics.CompilerMetrics;
import java.io.IOException;
import java.io.Reader;
import java.io.Writer;
import java.net.URI;
/**
* An interface used internally by the {@link DartCompiler} for determining where an artifact should
* be generated and providing feedback during the compilation process. This is an internal compiler
* construct and as such should not be instantiated or implemented by those outside the compiler
* itself.
*/
public interface DartCompilerContext {
/**
* Parse the application being compiled and return the result. The "application unit" is a
* library that specifies an entry-point.
*
* This method will be removed in favor of {@link #getAppLibraryUnit()}.
*
* @return the parsed result (not <code>null</code>)
*/
LibraryUnit getApplicationUnit();
/**
* Parse the application being compiled and return the result. The "app" library unit is a
* library that specifies an entry-point.
*
* @return the parsed result (not <code>null</code>)
*/
LibraryUnit getAppLibraryUnit();
/**
* Parse the specified library and return the result.
*
* @param lib the library to parse (not <code>null</code>)
* @return the parsed result (not <code>null</code>)
*/
LibraryUnit getLibraryUnit(LibrarySource lib);
/**
* Called by the compiler when a error (fatal or non-fatal) has occurred in a Dart file.
*
* @param event the event information (not <code>null</code>)
*/
void onError(DartCompilationError event);
/**
* Gets a reader for an artifact associated with the specified source, which
* must have been written to {@link #getArtifactWriter(Source, String, String)}. The
* caller is responsible for closing the reader. Only one artifact may be
* associated with the given extension.
*
* @param source the source file (not <code>null</code>)
* @param part a component of the source file to get a reader for (may be empty).
* @param extension the file extension for this artifact (not
* <code>null</code>, not empty)
* @return the reader, or <code>null</code> if no such artifact exists
*/
Reader getArtifactReader(Source source, String part, String extension) throws IOException;
/**
* Gets the {@link URI} for an artifact associated with this source.
*
* @param source the source file (not <code>null</code>)
* @param part a component of the source file to get a reader for (may be empty).
* @param extension the file extension for this artifact (not
* <code>null</code>, not empty)
*/
URI getArtifactUri(DartSource source, String part, String extension);
/**
* Gets a writer for an artifact associated with this source. The caller is
* responsible for closing the writer. Only one artifact may be associated
* with the given extension.
*
* @param source the source file (not <code>null</code>)
* @param part a component of the source file to get a reader for (may be empty).
* @param extension the file extension for this artifact (not
* <code>null</code>, not empty)
*/
Writer getArtifactWriter(Source source, String part, String extension) throws IOException;
/**
* Determines whether an artifact for the specified source is out of date
* with respect to some other source.
*
* @param source the source file to check (not <code>null</code>)
* @param base the artifact's base source (not <code>null</code>)
* @param extension the file extension for this artifact (not
* <code>null</code>, not empty)
* @return <code>true</code> if out of date
*/
boolean isOutOfDate(Source source, Source base, String extension);
/**
* Returns the {@link CompilerMetrics} instance or <code>null</code> if we should not record
* metrics.
*
* @return the metrics instance, <code>null</code> if metrics should not be recorded
*/
CompilerMetrics getCompilerMetrics();
/**
* Returns the {@link CompilerConfiguration} instance.
* @return the compiler configuration instance.
*/
CompilerConfiguration getCompilerConfiguration();
/**
* Return the system library corresponding to the specified "dart:<libname>" spec.
*/
LibrarySource getSystemLibraryFor(String importSpec);
}