be83083ccd
More fixes in the service of supporting analysis of resources that are non-resident. Notably a pluggable UrlLibrarySource and a repurposable SystemLibrariesReader. NOTE (API Change): SystemLibraryProvider is now an abstract class, suitable for client customization. Review URL: https://codereview.chromium.org//11027006 git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@13084 260f80e4-7a28-3924-810f-c04153c831b5
69 lines
2.2 KiB
Java
69 lines
2.2 KiB
Java
/*
|
|
* 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());
|
|
}
|
|
|
|
} |