Switch to AutoCloseable
Tweak javadoc. Don't throw on failure to close.
Bug: 269325540
Test: atest MicrodroidTests
Change-Id: I49f67dc5d7ab7fef84cc2ae0faa72014c4b3d76d
diff --git a/javalib/api/system-current.txt b/javalib/api/system-current.txt
index 3170d43..d9bafa1 100644
--- a/javalib/api/system-current.txt
+++ b/javalib/api/system-current.txt
@@ -85,8 +85,8 @@
method @NonNull public android.system.virtualmachine.VirtualMachineConfig.Builder setVmOutputCaptured(boolean);
}
- public final class VirtualMachineDescriptor implements java.io.Closeable android.os.Parcelable {
- method public void close() throws java.io.IOException;
+ public final class VirtualMachineDescriptor implements java.lang.AutoCloseable android.os.Parcelable {
+ method public void close();
method public int describeContents();
method public void writeToParcel(@NonNull android.os.Parcel, int);
field @NonNull public static final android.os.Parcelable.Creator<android.system.virtualmachine.VirtualMachineDescriptor> CREATOR;
diff --git a/javalib/src/android/system/virtualmachine/VirtualMachine.java b/javalib/src/android/system/virtualmachine/VirtualMachine.java
index 9902cb5..a6b3ed6 100644
--- a/javalib/src/android/system/virtualmachine/VirtualMachine.java
+++ b/javalib/src/android/system/virtualmachine/VirtualMachine.java
@@ -377,7 +377,7 @@
}
/**
- * Builds a virtual machine from an {@link VirtualMachineDescriptor} object and associates it
+ * Creates a virtual machine from an {@link VirtualMachineDescriptor} object and associates it
* with the given name.
*
* <p>The new virtual machine will be in the same state as the descriptor indicates.
@@ -416,8 +416,6 @@
}
vm.importEncryptedStoreFrom(vmDescriptor.getEncryptedStoreFd());
}
- } catch (IOException e) {
- throw new VirtualMachineException(e);
}
return vm;
} catch (VirtualMachineException | RuntimeException e) {
diff --git a/javalib/src/android/system/virtualmachine/VirtualMachineDescriptor.java b/javalib/src/android/system/virtualmachine/VirtualMachineDescriptor.java
index 1304af3..710925d 100644
--- a/javalib/src/android/system/virtualmachine/VirtualMachineDescriptor.java
+++ b/javalib/src/android/system/virtualmachine/VirtualMachineDescriptor.java
@@ -25,7 +25,6 @@
import android.os.ParcelFileDescriptor;
import android.os.Parcelable;
-import java.io.Closeable;
import java.io.IOException;
/**
@@ -37,9 +36,8 @@
*
* @hide
*/
-// TODO(b/268613460): should implement autocloseable.
@SystemApi
-public final class VirtualMachineDescriptor implements Parcelable, Closeable {
+public final class VirtualMachineDescriptor implements Parcelable, AutoCloseable {
private volatile boolean mClosed = false;
@NonNull private final ParcelFileDescriptor mConfigFd;
@NonNull private final ParcelFileDescriptor mInstanceImgFd;
@@ -120,13 +118,21 @@
ParcelFileDescriptor.class.getClassLoader(), ParcelFileDescriptor.class);
}
+ /**
+ * Release any resources held by this descriptor. Calling {@code close} on an already-closed
+ * descriptor has no effect.
+ */
@Override
- public void close() throws IOException {
+ public void close() {
mClosed = true;
// Let the compiler do the work: close everything, throw if any of them fail, skipping null.
try (mConfigFd;
mInstanceImgFd;
- mEncryptedStoreFd) {}
+ mEncryptedStoreFd) {
+ } catch (IOException ignored) {
+ // PFD already swallows exceptions from closing the fd. There's no reason to propagate
+ // this to the caller.
+ }
}
private void checkNotClosed() {
diff --git a/javalib/src/android/system/virtualmachine/VirtualMachineManager.java b/javalib/src/android/system/virtualmachine/VirtualMachineManager.java
index 7c9af63..b7ea22c 100644
--- a/javalib/src/android/system/virtualmachine/VirtualMachineManager.java
+++ b/javalib/src/android/system/virtualmachine/VirtualMachineManager.java
@@ -196,7 +196,8 @@
*
* <p>NOTE: This method may block and should not be called on the main thread.
*
- * @throws VirtualMachineException if the VM cannot be imported.
+ * @throws VirtualMachineException if the VM cannot be imported or the {@code
+ * VirtualMachineDescriptor} has already been closed.
* @hide
*/
@NonNull