Implement AutoClosable interface on classes that used release()

Implement AutoClosable and deprecate the old release() method to give
JGit consumers some time to adapt.

Bug: 428039
Change-Id: Id664a91dc5a8cf2ac401e7d87ce2e3b89e221458
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
This commit is contained in:
Matthias Sohn 2015-01-27 16:06:38 +01:00 committed by Christian Halstrick
parent 27ae8bc655
commit 77030a5e94
8 changed files with 131 additions and 22 deletions

View File

@ -113,7 +113,7 @@
* the ancestor, until there are no more lines to acquire information on, or the * the ancestor, until there are no more lines to acquire information on, or the
* file's creation point is discovered in history. * file's creation point is discovered in history.
*/ */
public class BlameGenerator { public class BlameGenerator implements AutoCloseable {
private final Repository repository; private final Repository repository;
private final PathFilter resultPath; private final PathFilter resultPath;
@ -937,9 +937,22 @@ public RawText getResultContents() throws IOException {
return queue != null ? queue.sourceText : null; return queue != null ? queue.sourceText : null;
} }
/** Release the current blame session. */ /**
* Release the current blame session. Use {@link #close()} instead.
*/
@Deprecated
public void release() { public void release() {
revPool.release(); close();
}
/**
* Release the current blame session.
*
* @since 4.0
*/
@Override
public void close() {
revPool.close();
queue = null; queue = null;
outCandidate = null; outCandidate = null;
outRegion = null; outRegion = null;

View File

@ -104,7 +104,7 @@
/** /**
* Format a Git style patch script. * Format a Git style patch script.
*/ */
public class DiffFormatter { public class DiffFormatter implements AutoCloseable {
private static final int DEFAULT_BINARY_FILE_THRESHOLD = PackConfig.DEFAULT_BIG_FILE_THRESHOLD; private static final int DEFAULT_BINARY_FILE_THRESHOLD = PackConfig.DEFAULT_BIG_FILE_THRESHOLD;
private static final byte[] noNewLine = encodeASCII("\\ No newline at end of file\n"); //$NON-NLS-1$ private static final byte[] noNewLine = encodeASCII("\\ No newline at end of file\n"); //$NON-NLS-1$
@ -380,10 +380,23 @@ public void flush() throws IOException {
out.flush(); out.flush();
} }
/** Release the internal ObjectReader state. */ /**
* Release the internal ObjectReader state. Use {@link #close()} instead.
*/
@Deprecated
public void release() { public void release() {
close();
}
/**
* Release the internal ObjectReader state.
*
* @since 4.0
*/
@Override
public void close() {
if (reader != null) if (reader != null)
reader.release(); reader.close();
} }
/** /**

View File

@ -152,7 +152,7 @@
* undefined behavior. * undefined behavior.
* </p> * </p>
*/ */
public class PackWriter { public class PackWriter implements AutoCloseable {
private static final int PACK_VERSION_GENERATED = 2; private static final int PACK_VERSION_GENERATED = 2;
/** A collection of object ids. */ /** A collection of object ids. */
@ -1085,9 +1085,22 @@ public State getState() {
return state.snapshot(); return state.snapshot();
} }
/** Release all resources used by this writer. */ /**
* Release all resources used by this writer. Use {@link #close()} instead.
*/
@Deprecated
public void release() { public void release() {
reader.release(); close();
}
/**
* Release all resources used by this writer.
*
* @since 4.0
*/
@Override
public void close() {
reader.close();
if (myDeflater != null) { if (myDeflater != null) {
myDeflater.end(); myDeflater.end();
myDeflater = null; myDeflater = null;

View File

@ -66,7 +66,7 @@
* {@link #release()} or {@link #flush()} prior to updating references or * {@link #release()} or {@link #flush()} prior to updating references or
* otherwise making the returned ObjectIds visible to other code. * otherwise making the returned ObjectIds visible to other code.
*/ */
public abstract class ObjectInserter { public abstract class ObjectInserter implements AutoCloseable {
/** An inserter that can be used for formatting and id generation only. */ /** An inserter that can be used for formatting and id generation only. */
public static class Formatter extends ObjectInserter { public static class Formatter extends ObjectInserter {
@Override @Override
@ -420,7 +420,21 @@ public abstract ObjectId insert(int objectType, long length, InputStream in)
* Release any resources used by this inserter. * Release any resources used by this inserter.
* <p> * <p>
* An inserter that has been released can be used again, but may need to be * An inserter that has been released can be used again, but may need to be
* released after the subsequent usage. * released after the subsequent usage. Use {@link #close()} instead
*/ */
@Deprecated
public abstract void release(); public abstract void release();
/**
* Release any resources used by this inserter.
* <p>
* An inserter that has been released can be used again, but may need to be
* released after the subsequent usage.
*
* @since 4.0
*/
@Override
public void close() {
release();
}
} }

View File

@ -63,7 +63,7 @@
* Readers that can support efficient reuse of pack encoded objects should also * Readers that can support efficient reuse of pack encoded objects should also
* implement the companion interface {@link ObjectReuseAsIs}. * implement the companion interface {@link ObjectReuseAsIs}.
*/ */
public abstract class ObjectReader { public abstract class ObjectReader implements AutoCloseable {
/** Type hint indicating the caller doesn't know the type. */ /** Type hint indicating the caller doesn't know the type. */
public static final int OBJ_ANY = -1; public static final int OBJ_ANY = -1;
@ -466,9 +466,23 @@ public BitmapIndex getBitmapIndex() throws IOException {
* Release any resources used by this reader. * Release any resources used by this reader.
* <p> * <p>
* A reader that has been released can be used again, but may need to be * A reader that has been released can be used again, but may need to be
* released after the subsequent usage. * released after the subsequent usage. Use {@link #close()} instead.
*/ */
@Deprecated
public void release() { public void release() {
close();
}
/**
* Release any resources used by this reader.
* <p>
* A reader that has been released can be used again, but may need to be
* released after the subsequent usage.
*
* @since 4.0
*/
@Override
public void close() {
// Do nothing. // Do nothing.
} }
} }

View File

@ -95,7 +95,7 @@
* the same RevWalk at the same time. The Iterator may buffer RevCommits, while * the same RevWalk at the same time. The Iterator may buffer RevCommits, while
* {@link #next()} does not. * {@link #next()} does not.
*/ */
public class RevWalk implements Iterable<RevCommit> { public class RevWalk implements Iterable<RevCommit>, AutoCloseable {
private static final int MB = 1 << 20; private static final int MB = 1 << 20;
/** /**
@ -237,10 +237,24 @@ public ObjectReader getObjectReader() {
* Release any resources used by this walker's reader. * Release any resources used by this walker's reader.
* <p> * <p>
* A walker that has been released can be used again, but may need to be * A walker that has been released can be used again, but may need to be
* released after the subsequent usage. * released after the subsequent usage. Use {@link #close()} instead.
*/ */
@Deprecated
public void release() { public void release() {
reader.release(); close();
}
/**
* Release any resources used by this walker's reader.
* <p>
* A walker that has been released can be used again, but may need to be
* released after the subsequent usage.
*
* @since 4.0
*/
@Override
public void close() {
reader.close();
} }
/** /**

View File

@ -76,7 +76,7 @@
/** /**
* Walker that visits all submodule entries found in a tree * Walker that visits all submodule entries found in a tree
*/ */
public class SubmoduleWalk { public class SubmoduleWalk implements AutoCloseable {
/** /**
* The values for the config param submodule.<name>.ignore * The values for the config param submodule.<name>.ignore
@ -729,8 +729,22 @@ public String getRemoteUrl() throws IOException, ConfigInvalidException {
return url != null ? getSubmoduleRemoteUrl(repository, url) : null; return url != null ? getSubmoduleRemoteUrl(repository, url) : null;
} }
/** Release any resources used by this walker's reader. */ /**
* Release any resources used by this walker's reader. Use {@link #close()}
* instead.
*/
@Deprecated
public void release() { public void release() {
walk.release(); close();
}
/**
* Release any resources used by this walker's reader.
*
* @since 4.0
*/
@Override
public void close() {
walk.close();
} }
} }

View File

@ -82,7 +82,7 @@
* Multiple simultaneous TreeWalk instances per {@link Repository} are * Multiple simultaneous TreeWalk instances per {@link Repository} are
* permitted, even from concurrent threads. * permitted, even from concurrent threads.
*/ */
public class TreeWalk { public class TreeWalk implements AutoCloseable {
private static final AbstractTreeIterator[] NO_TREES = {}; private static final AbstractTreeIterator[] NO_TREES = {};
/** /**
@ -247,10 +247,24 @@ public ObjectReader getObjectReader() {
* Release any resources used by this walker's reader. * Release any resources used by this walker's reader.
* <p> * <p>
* A walker that has been released can be used again, but may need to be * A walker that has been released can be used again, but may need to be
* released after the subsequent usage. * released after the subsequent usage. Use {@link #close()} instead.
*/ */
@Deprecated
public void release() { public void release() {
reader.release(); close();
}
/**
* Release any resources used by this walker's reader.
* <p>
* A walker that has been released can be used again, but may need to be
* released after the subsequent usage.
*
* @since 4.0
*/
@Override
public void close() {
reader.close();
} }
/** /**