@Test public void testCloseTwice() throws Exception { MSIFile file = new MSIFile(new File("target/test-classes/minimal.msi")); file.close(); file.close(); }
public void close() throws IOException { fs.close(); if (channel != null) { channel.close(); } }
MSIFile implements Signable, Closeable { public void close() throws IOException { fs.close(); if (channel != null) { channel.close(); } } }
MSIFile implements Signable, Closeable { public void close() throws IOException { fs.close(); if (channel != null) { channel.close(); } } MSIFile(File file);  MSIFile(final SeekableByteChannel channel); }
MSIFile implements Signable, Closeable { public void close() throws IOException { fs.close(); if (channel != null) { channel.close(); } } MSIFile(File file);  MSIFile(final SeekableByteChannel channel); static boolean isMSIFile(File file); void close(); boolean hasExtendedSignature(); @Override byte[] computeDigest(MessageDigest digest); @Override ASN1Object createIndirectData(DigestAlgorithm digestAlgorithm); @Override List<CMSSignedData> getSignatures(); @Override void setSignature(CMSSignedData signature); @Override void save(); }
MSIFile implements Signable, Closeable { public void close() throws IOException { fs.close(); if (channel != null) { channel.close(); } } MSIFile(File file);  MSIFile(final SeekableByteChannel channel); static boolean isMSIFile(File file); void close(); boolean hasExtendedSignature(); @Override byte[] computeDigest(MessageDigest digest); @Override ASN1Object createIndirectData(DigestAlgorithm digestAlgorithm); @Override List<CMSSignedData> getSignatures(); @Override void setSignature(CMSSignedData signature); @Override void save();  }