/* * Copyright (c) 2013, the Dart project authors. * * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except * in compliance with the License. You may obtain a copy of the License at * * http://www.eclipse.org/legal/epl-v10.html * * Unless required by applicable law or agreed to in writing, software distributed under the License * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express * or implied. See the License for the specific language governing permissions and limitations under * the License. */ package com.google.dart.engine.internal.context; import com.google.dart.engine.context.AnalysisContext; import com.google.dart.engine.context.AnalysisContextStatistics; import com.google.dart.engine.context.AnalysisException; import com.google.dart.engine.element.LibraryElement; import com.google.dart.engine.internal.cache.SourceEntry; import com.google.dart.engine.internal.resolver.TypeProvider; import com.google.dart.engine.internal.scope.Namespace; import com.google.dart.engine.source.Source; import com.google.dart.engine.source.SourceContainer; import java.util.Map; /** * The interface {@code InternalAnalysisContext} defines additional behavior for an analysis context * that is required by internal users of the context. */ public interface InternalAnalysisContext extends AnalysisContext { /** * Add the given source with the given information to this context. * * @param source the source to be added * @param info the information about the source */ public void addSourceInfo(Source source, SourceEntry info); /** * Return an array containing the sources of the libraries that are exported by the library with * the given source. The array will be empty if the given source is invalid, if the given source * does not represent a library, or if the library does not export any other libraries. * * @param source the source representing the library whose exports are to be returned * @return the sources of the libraries that are exported by the given library * @throws AnalysisException if the exported libraries could not be computed */ public Source[] computeExportedLibraries(Source source) throws AnalysisException; /** * Return an array containing the sources of the libraries that are imported by the library with * the given source. The array will be empty if the given source is invalid, if the given source * does not represent a library, or if the library does not import any other libraries. * * @param source the source representing the library whose imports are to be returned * @return the sources of the libraries that are imported by the given library * @throws AnalysisException if the imported libraries could not be computed */ public Source[] computeImportedLibraries(Source source) throws AnalysisException; /** * Return an AST structure corresponding to the given source, but ensure that the structure has * not already been resolved and will not be resolved by any other threads or in any other * library. * <p> * <b>Note:</b> This method cannot be used in an async environment * * @param source the compilation unit for which an AST structure should be returned * @return the AST structure representing the content of the source * @throws AnalysisException if the analysis could not be performed */ public ResolvableCompilationUnit computeResolvableCompilationUnit(Source source) throws AnalysisException; /** * Initialize the specified context by removing the specified sources from the receiver and adding * them to the specified context. * * @param container the container containing sources that should be removed from this context and * added to the returned context * @param newContext the context to be initialized * @return the analysis context that was initialized */ public InternalAnalysisContext extractContextInto(SourceContainer container, InternalAnalysisContext newContext); /** * Return context that owns the given source. * * @param source the source whose context is to be returned * @return the context that owns the partition that contains the source */ public InternalAnalysisContext getContextFor(Source source); /** * Return an array containing all of the sources that have been marked as priority sources. * Clients must not modify the returned array. * * @return the sources that have been marked as priority sources */ public Source[] getPrioritySources(); /** * Return a namespace containing mappings for all of the public names defined by the given * library. * * @param library the library whose public namespace is to be returned * @return the public namespace of the given library */ public Namespace getPublicNamespace(LibraryElement library); /** * Returns a statistics about this context. */ public AnalysisContextStatistics getStatistics(); /** * Returns a type provider for this context or throws an exception if dart:core cannot be * resolved. * * @return the type provider (not {@code null}) * @throws AnalysisException if dart:core cannot be resolved */ public TypeProvider getTypeProvider() throws AnalysisException; /** * Given a table mapping the source for the libraries represented by the corresponding elements to * the elements representing the libraries, record those mappings. * * @param elementMap a table mapping the source for the libraries represented by the elements to * the elements representing the libraries */ public void recordLibraryElements(Map<Source, LibraryElement> elementMap); }