blob: d659f767ee16afd85afa4110528cb2dc5cd7a87f [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 java.io.File;
import java.io.IOException;
import java.net.URI;
/**
* A file-based {@link SystemLibraryProvider} that reads dart-sdk/lib/_internal/libraries.dart for
* system library information.
*/
public class FileBasedSystemLibraryProvider extends SystemLibraryProvider {
private File sdkLibPath;
/**
* Create a {@link FileBasedSystemLibraryProvider} with the given path to the dart SDK.
*/
public FileBasedSystemLibraryProvider(File sdkPath) {
super(new File(sdkPath, "lib").getAbsoluteFile().toURI());
//TODO(pquitslund): remove this duplicated file creation
sdkLibPath = new File(sdkPath, "lib").getAbsoluteFile();
}
@Override
protected SystemLibrariesReader createReader() throws IOException {
return new SystemLibrariesReader(sdkLibPath);
}
@Override
public SystemLibrary createSystemLibrary(String name, String host, String pathToLib,
String category, boolean documented, boolean implementation) {
File dir = new File(sdkLibPath, host);
File libFile = new File(dir, pathToLib);
if (!libFile.isFile()) {
throw new InternalCompilerException("Error mapping dart:" + host + ", path "
+ libFile.getAbsolutePath() + " is not a file.");
}
return new SystemLibrary(
name, host, pathToLib, dir, category, documented, implementation);
}
@Override
public boolean exists(URI uri) {
return new File(uri).exists();
}
@Override
public URI resolveHost(String host, URI uri) {
return new File(sdkLibPath, host).toURI().resolve("." + uri.getPath());
}
}