Bypass precompiled libs for up to date checks

Fixes to bundledArtifact handling

Review URL: https://chromereviews.googleplex.com/3562014

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@192 260f80e4-7a28-3924-810f-c04153c831b5
This commit is contained in:
jbrosenberg@google.com 2011-10-07 05:11:24 +00:00
parent 0369e68509
commit b66797f6e4
3 changed files with 25 additions and 18 deletions

View file

@ -188,9 +188,10 @@ public class DartCompiler {
try { try {
for (LibraryUnit lib : libraries.values()) { for (LibraryUnit lib : libraries.values()) {
LibrarySource libSrc = lib.getSource(); LibrarySource libSrc = lib.getSource();
boolean libIsDartUri = SystemLibraryManager.isDartUri(libSrc.getUri());
LibraryUnit apiLib = new LibraryUnit(libSrc); LibraryUnit apiLib = new LibraryUnit(libSrc);
LibraryNode selfSourcePath = lib.getSelfSourcePath(); LibraryNode selfSourcePath = lib.getSelfSourcePath();
boolean persist = !incremental || !apiLib.loadApi(context, context); boolean persist = (!incremental && !libIsDartUri) || !apiLib.loadApi(context, context);
// Parse each compilation unit and update the API to reflect its contents. // Parse each compilation unit and update the API to reflect its contents.
for (LibraryNode libNode : lib.getSourcePaths()) { for (LibraryNode libNode : lib.getSourcePaths()) {
@ -204,7 +205,7 @@ public class DartCompiler {
} }
DartUnit apiUnit = apiLib.getUnit(dartSrc.getName()); DartUnit apiUnit = apiLib.getUnit(dartSrc.getName());
if (apiUnit == null || isSourceOutOfDate(dartSrc, libSrc)) { if (apiUnit == null || (!libIsDartUri && isSourceOutOfDate(dartSrc, libSrc))) {
DartUnit unit = parse(dartSrc, lib.getPrefixes()); DartUnit unit = parse(dartSrc, lib.getPrefixes());
if (unit != null) { if (unit != null) {
// if we are visiting the tu // if we are visiting the tu
@ -381,6 +382,12 @@ public class DartCompiler {
TraceEvent logEvent = Tracer.canTrace() ? Tracer.start(DartEventType.ADD_OUTOFDATE) : null; TraceEvent logEvent = Tracer.canTrace() ? Tracer.start(DartEventType.ADD_OUTOFDATE) : null;
try { try {
for (LibraryUnit lib : libraries.values()) { for (LibraryUnit lib : libraries.values()) {
if (SystemLibraryManager.isDartUri(lib.getSource().getUri())) {
// embedded dart libs are always up to date
continue;
}
// Load the existing DEPS, or create an empty one. // Load the existing DEPS, or create an empty one.
LibraryDeps deps = lib.getDeps(context); LibraryDeps deps = lib.getDeps(context);

View file

@ -75,7 +75,7 @@ public class DefaultDartArtifactProvider extends DartArtifactProvider {
public boolean isOutOfDate(Source source, Source base, String extension) { public boolean isOutOfDate(Source source, Source base, String extension) {
if (SystemLibraryManager.isDartUri(base.getUri())) { if (SystemLibraryManager.isDartUri(base.getUri())) {
Source bundledSource = getBundledArtifact(source, base, "", extension); Source bundledSource = getBundledArtifact(source, base, "", extension);
if (bundledSource != null) { if (bundledSource != null && bundledSource.exists()) {
// Note: Artifacts bundled with sources are always up to date // Note: Artifacts bundled with sources are always up to date
return false; return false;
} }
@ -84,9 +84,22 @@ public class DefaultDartArtifactProvider extends DartArtifactProvider {
return artifactFile.lastModified() < source.getLastModified(); return artifactFile.lastModified() < source.getLastModified();
} }
// TODO(jbrosenberg): remove 'source' argument from this method, it's not used
protected DartSource getBundledArtifact(Source source, Source base, String part, String extension) { protected DartSource getBundledArtifact(Source source, Source base, String part, String extension) {
LibrarySource library = libraryOf(base); LibrarySource library;
URI relativeUri = library.getUri().resolve(".").normalize().relativize(base.getUri()); URI relativeUri;
if (base instanceof LibrarySource) {
library = (LibrarySource) base;
relativeUri = library.getUri().resolve(".").normalize().relativize(base.getUri());
} else if (base instanceof DartSource){
library = ((DartSource) base).getLibrary();
String name = base.getName();
URI nameUri = URI.create(name).normalize();
relativeUri = library.getUri().resolve(".").normalize().relativize(nameUri);
} else {
throw new AssertionError(base.getClass().getName());
}
DartSource bundledSource; DartSource bundledSource;
if (!relativeUri.isAbsolute()) { if (!relativeUri.isAbsolute()) {
bundledSource = library.getSourceFor(fullname(relativeUri.getPath(), part, extension)); bundledSource = library.getSourceFor(fullname(relativeUri.getPath(), part, extension));
@ -96,16 +109,6 @@ public class DefaultDartArtifactProvider extends DartArtifactProvider {
return bundledSource; return bundledSource;
} }
private LibrarySource libraryOf(Source base) throws AssertionError {
if (base instanceof DartSource) {
return ((DartSource) base).getLibrary();
} else if (base instanceof LibrarySource){
return (LibrarySource) base;
} else {
throw new AssertionError(base.getClass().getName());
}
}
/** /**
* Answer the artifact file associated with the specified source. Only one * Answer the artifact file associated with the specified source. Only one
* artifact may be associated with the given extension. * artifact may be associated with the given extension.

View file

@ -88,9 +88,6 @@ public abstract class UrlSource implements Source {
@Override @Override
public long getLastModified() { public long getLastModified() {
if (!shouldCareAboutLastModified) {
return 0;
}
initProperties(); initProperties();
return lastModified; return lastModified;
} }