blob: af6ab2d2f91865f8b4787ee501255510e8900ea5 [file] [log] [blame]
/*
* Copyright (c) 2012, 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.compiler;
import com.google.dart.compiler.SystemLibrariesReader.DartLibrary;
import java.io.IOException;
import java.net.URI;
import java.util.Map;
/**
* A provider for System libraries.
*/
public abstract class SystemLibraryProvider {
private final URI sdkLibPathUri;
private SystemLibrariesReader reader;
/**
* Create a {@link SystemLibraryProvider} with the given path to the dart SDK.
*/
public SystemLibraryProvider(URI sdkLibPathUri) {
this.sdkLibPathUri = sdkLibPathUri;
}
/**
* Define a new system library.
*
* @param name the short name of the library
* @param host the host
* @param pathToLib the path to the library
* @param category the library category
* @param documented <code>true</code> if documented, <code>false</code> otherwise
* @param implementation <code>true</code> if an implementation library, <code>false</code>
* otherwise
* @return the resulting {@link SystemLibrary}
*/
public abstract SystemLibrary createSystemLibrary(String name, String host, String pathToLib,
String category, boolean documented, boolean implementation);
/**
* Tests whether the resource denoted by this abstract URI exists.
*
* @param uri the URI to test
* @return <code>true</code> if and only if the resource denoted by this URI exists;
* <code>false</code> otherwise
*/
public abstract boolean exists(URI uri);
/**
* Get a URI describing the root of the SDK.
*/
public URI getSdkLibPathUri() {
return sdkLibPathUri;
}
/**
* Get a mapping of symbolic names (e.g., "dart:html") to {@link DartLibrary}s.
*/
public Map<String, DartLibrary> getLibraryMap() {
return getReader().getLibrariesMap();
}
/**
* Check if this URI denotes a patch file.
*/
public boolean isPatchFile(URI uri) {
return getReader().getPatchPaths().contains(uri);
}
/**
* Constructs a new URI by parsing the given host string and then resolving it against this URI.
*
* @param host the host string
* @param uri the uri to resolve against
* @return the resulting URI
*/
public abstract URI resolveHost(String host, URI uri);
/**
* Create the system libraries reader.
*
* @return a reader for parsing system libraries
*/
protected abstract SystemLibrariesReader createReader() throws IOException;
private SystemLibrariesReader getReader() {
if (reader == null) {
try {
reader = createReader();
} catch (IOException e) {
throw new InternalCompilerException("Unable to create system library reader", e);
}
}
return reader;
}
}