diff options
author | Jean-Philippe Lesot <jplesot@google.com> | 2015-01-22 19:08:32 +0100 |
---|---|---|
committer | Jean-Philippe Lesot <jplesot@google.com> | 2015-01-22 19:08:32 +0100 |
commit | aa09abff92b437af1dab07a65ed9c2e5b101312c (patch) | |
tree | 8f416066eea6eb629e686b097e1277042bee491d /sched | |
parent | 75f5c833e30ca131eaaf4331e320b3affdbe1c03 (diff) | |
download | toolchain_jack-aa09abff92b437af1dab07a65ed9c2e5b101312c.tar.gz toolchain_jack-aa09abff92b437af1dab07a65ed9c2e5b101312c.tar.bz2 toolchain_jack-aa09abff92b437af1dab07a65ed9c2e5b101312c.zip |
Add VDir.isEmpty() method
- Add also in VFSBase
- Add implementations everywhere
- Use in CaseInsensitiveFS to differentiate between a clean new VFS
or a VFS without the index file
Change-Id: I699afbb6c0ca5985a2e6424ebcc0899033a6f6a7
Diffstat (limited to 'sched')
-rw-r--r-- | sched/src/com/android/sched/vfs/BaseVDir.java | 5 | ||||
-rw-r--r-- | sched/src/com/android/sched/vfs/BaseVFS.java | 4 | ||||
-rw-r--r-- | sched/src/com/android/sched/vfs/CaseInsensitiveFS.java | 15 | ||||
-rw-r--r-- | sched/src/com/android/sched/vfs/DeflateFS.java | 5 | ||||
-rw-r--r-- | sched/src/com/android/sched/vfs/DirectFS.java | 8 | ||||
-rw-r--r-- | sched/src/com/android/sched/vfs/InMemoryVDir.java | 9 | ||||
-rw-r--r-- | sched/src/com/android/sched/vfs/VDir.java | 2 |
7 files changed, 40 insertions, 8 deletions
diff --git a/sched/src/com/android/sched/vfs/BaseVDir.java b/sched/src/com/android/sched/vfs/BaseVDir.java index 73dd3796..8ee6a96f 100644 --- a/sched/src/com/android/sched/vfs/BaseVDir.java +++ b/sched/src/com/android/sched/vfs/BaseVDir.java @@ -129,6 +129,11 @@ abstract class BaseVDir extends BaseVElement implements VDir { } @Override + public boolean isEmpty() { + return vfs.isEmpty(this); + } + + @Override public boolean isVDir() { return true; } diff --git a/sched/src/com/android/sched/vfs/BaseVFS.java b/sched/src/com/android/sched/vfs/BaseVFS.java index a5c5ba9a..e5ba32bb 100644 --- a/sched/src/com/android/sched/vfs/BaseVFS.java +++ b/sched/src/com/android/sched/vfs/BaseVFS.java @@ -74,7 +74,9 @@ abstract class BaseVFS<DIR extends BaseVDir, FILE extends BaseVFile> implements abstract void delete(@Nonnull FILE file) throws CannotDeleteFileException; @Nonnull - abstract Collection<? extends BaseVElement> list(DIR dir); + abstract Collection<? extends BaseVElement> list(@Nonnull DIR dir); + + abstract boolean isEmpty(@Nonnull DIR dir); // // Location related diff --git a/sched/src/com/android/sched/vfs/CaseInsensitiveFS.java b/sched/src/com/android/sched/vfs/CaseInsensitiveFS.java index 4a021e75..acd3bf86 100644 --- a/sched/src/com/android/sched/vfs/CaseInsensitiveFS.java +++ b/sched/src/com/android/sched/vfs/CaseInsensitiveFS.java @@ -150,7 +150,11 @@ public class CaseInsensitiveFS extends BaseVFS<CaseInsensitiveVDir, CaseInsensit try { file = vfs.getRootDir().getVFile(INDEX_NAME); } catch (NoSuchFileException e) { - // No file index, consider FS empty + if (!vfs.getRootDir().isEmpty()) { + // If VFS is not empty, index file is missing + throw new WrongVFSFormatException(this, vfs.getLocation(), e); + } + return; } catch (NotFileException e) { throw new WrongVFSFormatException(this, vfs.getLocation(), e); @@ -366,6 +370,11 @@ public class CaseInsensitiveFS extends BaseVFS<CaseInsensitiveVDir, CaseInsensit throw new UnsupportedOperationException(); } + @Override + boolean isEmpty(@Nonnull CaseInsensitiveVDir dir) { + throw new UnsupportedOperationException(); + } + // // Location // @@ -417,10 +426,6 @@ public class CaseInsensitiveFS extends BaseVFS<CaseInsensitiveVDir, CaseInsensit return vfs.needsSequentialWriting(); } - synchronized boolean isClosed() { - return closed; - } - // // Encode / Decode // diff --git a/sched/src/com/android/sched/vfs/DeflateFS.java b/sched/src/com/android/sched/vfs/DeflateFS.java index 3a362d9c..84815813 100644 --- a/sched/src/com/android/sched/vfs/DeflateFS.java +++ b/sched/src/com/android/sched/vfs/DeflateFS.java @@ -106,6 +106,11 @@ public class DeflateFS extends BaseVFS<BaseVDir, BaseVFile> implements VFS{ } @Override + boolean isEmpty(@Nonnull BaseVDir dir) { + return vfs.isEmpty(dir); + } + + @Override @Nonnull BaseVFile createVFile(@Nonnull BaseVDir parent, @Nonnull String name) throws CannotCreateFileException { diff --git a/sched/src/com/android/sched/vfs/DirectFS.java b/sched/src/com/android/sched/vfs/DirectFS.java index 030c30e1..fbf1f9c9 100644 --- a/sched/src/com/android/sched/vfs/DirectFS.java +++ b/sched/src/com/android/sched/vfs/DirectFS.java @@ -147,6 +147,14 @@ public class DirectFS extends BaseVFS<ParentVDir, ParentVFile> implements VFS { } @Override + boolean isEmpty(@Nonnull ParentVDir dir) { + assert !isClosed(); + assert (permissions & Permission.READ) != 0; + + return getNativeFile(dir.getPath()).listFiles().length == 0; + } + + @Override @Nonnull ParentVFile createVFile(@Nonnull ParentVDir parent, @Nonnull String name) throws CannotCreateFileException { diff --git a/sched/src/com/android/sched/vfs/InMemoryVDir.java b/sched/src/com/android/sched/vfs/InMemoryVDir.java index 43809ad0..8d476b52 100644 --- a/sched/src/com/android/sched/vfs/InMemoryVDir.java +++ b/sched/src/com/android/sched/vfs/InMemoryVDir.java @@ -33,8 +33,8 @@ import javax.annotation.Nonnull; * A 'in-memory' implementation of a {@link VDir}. All sub-elements are cached in-memory for ever. * * When using this {@link VDir} implementation, a {@link BaseVFS} implementation has no need to - * implement {@link BaseVFS#getVFile(BaseVDir, String)}, {@link BaseVFS#getVDir(BaseVDir, String)} - * and {@link BaseVFS#list(BaseVDir)}. + * implement {@link BaseVFS#getVFile(BaseVDir, String)}, {@link BaseVFS#getVDir(BaseVDir, String)}, + * {@link BaseVFS#isEmpty(BaseVDir)} and {@link BaseVFS#list(BaseVDir)}. */ abstract class InMemoryVDir extends BaseVDir { @Nonnull @@ -132,5 +132,10 @@ abstract class InMemoryVDir extends BaseVDir { return Collections.unmodifiableCollection(map.values()); } + + @Override + public boolean isEmpty() { + return map.isEmpty(); + } } diff --git a/sched/src/com/android/sched/vfs/VDir.java b/sched/src/com/android/sched/vfs/VDir.java index 63792e75..2720ecdf 100644 --- a/sched/src/com/android/sched/vfs/VDir.java +++ b/sched/src/com/android/sched/vfs/VDir.java @@ -34,6 +34,8 @@ public interface VDir extends VElement, HasLocation { @Nonnull VPath getPath(); + boolean isEmpty(); + @Nonnull Collection<? extends VElement> list(); |