diff --git a/README.md b/README.md
index 66d1d5e..96a2869 100644
--- a/README.md
+++ b/README.md
@@ -9,11 +9,10 @@ Several [bundle applications](#bundle-apps) using this framework are also availa
## Requirements
-- **Running**: Java 11 or later
+- **Running**: Java 17 or later
- **Building**: Java 17 or later (required by Gradle 9)
-> **Note**: This is the last release supporting Java 11 as a runtime target.
-> Future versions will require Java 17 or later.
+> To run on Java 11, use the pre-built JAR from [v0.7.0](https://github.com/sh5i/git-stein/releases/tag/v0.7.0).
## Build and Run
diff --git a/build.gradle b/build.gradle
index 09e8d75..49be582 100644
--- a/build.gradle
+++ b/build.gradle
@@ -17,29 +17,14 @@ java {
// v61 (Java 17, LTS)
// v65 (Java 21, LTS)
// v69 (Java 25, LTS)
- languageVersion = JavaLanguageVersion.of(11)
+ languageVersion = JavaLanguageVersion.of(17)
}
}
dependencies {
- // jgit 7.x requires Java 17; staying on 6.x for Java 11 compatibility
- api 'org.eclipse.jgit:org.eclipse.jgit:6.10.1.202505221210-r'
-
- // JDT 3.29+ and eclipse platform require Java 17; staying on 3.28.x for Java 11 compatibility
- implementation 'org.eclipse.jdt:org.eclipse.jdt.core:3.28.0'
- implementation 'org.eclipse.platform:org.eclipse.core.commands:3.8.0'
- implementation 'org.eclipse.platform:org.eclipse.core.contenttype:3.5.100'
- implementation 'org.eclipse.platform:org.eclipse.core.expressions:3.5.100'
- implementation 'org.eclipse.platform:org.eclipse.core.filesystem:1.7.0'
- implementation 'org.eclipse.platform:org.eclipse.core.jobs:3.8.0'
- implementation 'org.eclipse.platform:org.eclipse.core.resources:3.14.0'
- implementation 'org.eclipse.platform:org.eclipse.core.runtime:3.13.0'
- implementation 'org.eclipse.platform:org.eclipse.equinox.app:1.3.400'
- implementation 'org.eclipse.platform:org.eclipse.equinox.common:3.8.0'
- implementation 'org.eclipse.platform:org.eclipse.equinox.preferences:3.6.1'
- implementation 'org.eclipse.platform:org.eclipse.equinox.registry:3.6.100'
- implementation 'org.eclipse.platform:org.eclipse.osgi:3.11.2'
- implementation 'org.eclipse.platform:org.eclipse.text:3.6.0'
+ api 'org.eclipse.jgit:org.eclipse.jgit:7.6.0.202603022253-r'
+
+ implementation 'org.eclipse.jdt:org.eclipse.jdt.core:3.45.0'
implementation 'org.slf4j:slf4j-api:2.0.17'
implementation 'ch.qos.logback:logback-classic:1.5.32'
diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar
index 1b33c55..61285a6 100644
Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index 37f78a6..c61a118 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-9.3.1-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-9.4.1-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
diff --git a/gradlew b/gradlew
index 23d15a9..adff685 100755
--- a/gradlew
+++ b/gradlew
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# Copyright © 2015-2021 the original authors.
+# Copyright © 2015 the original authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -114,7 +114,6 @@ case "$( uname )" in #(
NONSTOP* ) nonstop=true ;;
esac
-CLASSPATH="\\\"\\\""
# Determine the Java command to use to start the JVM.
@@ -172,7 +171,6 @@ fi
# For Cygwin or MSYS, switch paths to Windows format before running java
if "$cygwin" || "$msys" ; then
APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
- CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )
JAVACMD=$( cygpath --unix "$JAVACMD" )
@@ -212,7 +210,6 @@ DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
set -- \
"-Dorg.gradle.appname=$APP_BASE_NAME" \
- -classpath "$CLASSPATH" \
-jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \
"$@"
diff --git a/gradlew.bat b/gradlew.bat
index 5eed7ee..e509b2d 100644
--- a/gradlew.bat
+++ b/gradlew.bat
@@ -70,11 +70,10 @@ goto fail
:execute
@rem Setup the command line
-set CLASSPATH=
@rem Execute Gradle
-"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %*
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %*
:end
@rem End local scope for the variables with windows NT shell
diff --git a/src/main/java/jp/ac/titech/c/se/stein/Application.java b/src/main/java/jp/ac/titech/c/se/stein/Application.java
index 15eb759..bf956b2 100644
--- a/src/main/java/jp/ac/titech/c/se/stein/Application.java
+++ b/src/main/java/jp/ac/titech/c/se/stein/Application.java
@@ -274,8 +274,8 @@ public int execute(final ParseResult parseResult) throws ExecutionException, Par
// help
if (parseResult.subcommands().size() >= 2) {
final Object cmd = parseResult.subcommands().get(0).commandSpec().userObject();
- if (cmd instanceof SettableHelpCommand) {
- ((SettableHelpCommand) cmd).setCommand(parseResult.subcommands().get(1).commandSpec().name());
+ if (cmd instanceof SettableHelpCommand shc) {
+ shc.setCommand(parseResult.subcommands().get(1).commandSpec().name());
}
}
if (CommandLine.printHelpIfRequested(parseResult)) {
@@ -310,8 +310,8 @@ public List optimizeRewriters(final List comma
final List pending = new ArrayList<>();
for (final RewriterCommand cmd : commands) {
- if (cmd instanceof BlobTranslator) {
- pending.add((BlobTranslator) cmd);
+ if (cmd instanceof BlobTranslator t) {
+ pending.add(t);
} else {
flushPendingTranslators(pending, result);
result.add(cmd);
diff --git a/src/main/java/jp/ac/titech/c/se/stein/app/Anonymize.java b/src/main/java/jp/ac/titech/c/se/stein/app/Anonymize.java
index ad906ae..a113e01 100644
--- a/src/main/java/jp/ac/titech/c/se/stein/app/Anonymize.java
+++ b/src/main/java/jp/ac/titech/c/se/stein/app/Anonymize.java
@@ -126,8 +126,7 @@ public AnyHotEntry rewriteBlobEntry(BlobEntry entry, final Context c) {
@Override
protected AnyColdEntry rewriteTreeEntry(TreeEntry entry, Context c) {
final AnyColdEntry result = super.rewriteTreeEntry(entry, c);
- if (isTreeNameEnabled && result instanceof Entry) {
- final Entry e = (Entry) result;
+ if (isTreeNameEnabled && result instanceof Entry e) {
return Entry.of(e.mode, treeNameMap.convert(e.name), e.id, e.directory);
}
return result;
diff --git a/src/main/java/jp/ac/titech/c/se/stein/app/blob/Cregit.java b/src/main/java/jp/ac/titech/c/se/stein/app/blob/Cregit.java
index 5decb18..250a9b4 100644
--- a/src/main/java/jp/ac/titech/c/se/stein/app/blob/Cregit.java
+++ b/src/main/java/jp/ac/titech/c/se/stein/app/blob/Cregit.java
@@ -62,20 +62,11 @@ protected void setLanguage(final String language) {
this.language = language;
if (filter.isDefault()) {
switch (language) {
- case "C":
- filter.setPatterns(C_EXT);
- break;
- case "C++":
- filter.setPatterns(CXX_EXT);
- break;
- case "C#":
- filter.setPatterns(CSHARP_EXT);
- break;
- case "Java":
- filter.setPatterns(JAVA_EXT);
- break;
- default:
- log.error("Unknown language: {}", language);
+ case "C" -> filter.setPatterns(C_EXT);
+ case "C++" -> filter.setPatterns(CXX_EXT);
+ case "C#" -> filter.setPatterns(CSHARP_EXT);
+ case "Java" -> filter.setPatterns(JAVA_EXT);
+ default -> log.error("Unknown language: {}", language);
}
}
}
diff --git a/src/main/java/jp/ac/titech/c/se/stein/app/blob/FilterBlob.java b/src/main/java/jp/ac/titech/c/se/stein/app/blob/FilterBlob.java
index 4da0153..17cad4b 100644
--- a/src/main/java/jp/ac/titech/c/se/stein/app/blob/FilterBlob.java
+++ b/src/main/java/jp/ac/titech/c/se/stein/app/blob/FilterBlob.java
@@ -61,18 +61,13 @@ public Long convert(final String value) {
final int len = value.length();
final char unit = Character.toUpperCase(value.charAt(len - 1));
final String num = value.substring(0, len - 1);
- switch (unit) {
- case 'B':
- return convert(num);
- case 'K':
- return displaySizeToByteCount(num, 1024);
- case 'M':
- return displaySizeToByteCount(num, 1024 * 1024);
- case 'G':
- return displaySizeToByteCount(num, 1024 * 1024 * 1024);
- default:
- return displaySizeToByteCount(value, 1);
- }
+ return switch (unit) {
+ case 'B' -> convert(num);
+ case 'K' -> displaySizeToByteCount(num, 1024);
+ case 'M' -> displaySizeToByteCount(num, 1024 * 1024);
+ case 'G' -> displaySizeToByteCount(num, 1024 * 1024 * 1024);
+ default -> displaySizeToByteCount(value, 1);
+ };
}
protected long displaySizeToByteCount(final String value, final long base) {
diff --git a/src/main/java/jp/ac/titech/c/se/stein/app/blob/HistorageViaJDT.java b/src/main/java/jp/ac/titech/c/se/stein/app/blob/HistorageViaJDT.java
index 1f862b1..889a622 100644
--- a/src/main/java/jp/ac/titech/c/se/stein/app/blob/HistorageViaJDT.java
+++ b/src/main/java/jp/ac/titech/c/se/stein/app/blob/HistorageViaJDT.java
@@ -159,8 +159,8 @@ public ClassModule(final String name, final Module parent, final String content,
@Override
public String getBasename() {
- if (parent instanceof ClassModule) {
- return parent.getBasename() + "." + name;
+ if (parent instanceof ClassModule cm) {
+ return cm.getBasename() + "." + name;
} else {
return parent.getBasename().equals(name) ? name : name + "[" + parent.getBasename() + "]";
}
@@ -300,8 +300,7 @@ protected CompilationUnit parse() {
* Creates a JDT ASTParser.
*/
protected ASTParser createParser() {
- final ASTParser parser = ASTParser.newParser(AST.JLS17);
- @SuppressWarnings("unchecked")
+ final ASTParser parser = ASTParser.newParser(AST.JLS25);
final Map options = DefaultCodeFormatterConstants.getEclipseDefaultSettings();
options.put(JavaCore.COMPILER_COMPLIANCE, JavaCore.VERSION_17);
options.put(JavaCore.COMPILER_CODEGEN_TARGET_PLATFORM, JavaCore.VERSION_17);
diff --git a/src/main/java/jp/ac/titech/c/se/stein/app/blob/TokenizeViaJDT.java b/src/main/java/jp/ac/titech/c/se/stein/app/blob/TokenizeViaJDT.java
index 34c52ba..7672b36 100644
--- a/src/main/java/jp/ac/titech/c/se/stein/app/blob/TokenizeViaJDT.java
+++ b/src/main/java/jp/ac/titech/c/se/stein/app/blob/TokenizeViaJDT.java
@@ -39,7 +39,7 @@ public AnyHotEntry rewriteBlobEntry(final BlobEntry entry, final Context c) {
* Encodes the given source to linetoken format.
*/
public static String encode(final String source) {
- final IScanner scanner = ToolFactory.createScanner(true, true, false, JavaCore.VERSION_17);
+ final IScanner scanner = ToolFactory.createScanner(true, true, false, JavaCore.VERSION_25);
scanner.setSource(source.toCharArray());
final StringBuilder buffer = new StringBuilder();
try {
diff --git a/src/main/java/jp/ac/titech/c/se/stein/core/Context.java b/src/main/java/jp/ac/titech/c/se/stein/core/Context.java
index 2af2465..86388b9 100644
--- a/src/main/java/jp/ac/titech/c/se/stein/core/Context.java
+++ b/src/main/java/jp/ac/titech/c/se/stein/core/Context.java
@@ -101,20 +101,14 @@ protected String entryToString(final Map.Entry e) {
}
protected static String getStringValue(final Key key, final Object value) {
- switch (key) {
- case commit:
- return ((RevCommit) value).name();
- case path:
- return '"' + (String) value + '"';
- case entry:
- return value.toString();
- case tag:
- return ((RevTag) value).name();
- case ref:
- return ((Ref) value).getName();
- default:
- return null;
- }
+ return switch (key) {
+ case commit -> ((RevCommit) value).name();
+ case path -> '"' + (String) value + '"';
+ case entry -> value.toString();
+ case tag -> ((RevTag) value).name();
+ case ref -> ((Ref) value).getName();
+ default -> null;
+ };
}
@Override
diff --git a/src/main/java/jp/ac/titech/c/se/stein/core/RepositoryAccess.java b/src/main/java/jp/ac/titech/c/se/stein/core/RepositoryAccess.java
index 7be85c7..a568cd1 100644
--- a/src/main/java/jp/ac/titech/c/se/stein/core/RepositoryAccess.java
+++ b/src/main/java/jp/ac/titech/c/se/stein/core/RepositoryAccess.java
@@ -1,6 +1,5 @@
package jp.ac.titech.c.se.stein.core;
-import java.io.File;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Path;
@@ -298,17 +297,11 @@ public ObjectId writeBlob(final byte[] data, final Context writingContext) {
public ObjectId copyTree(final ObjectId treeId, final RepositoryAccess target, final Context c) {
final List entries = new ArrayList<>();
for (final Entry e : readTree(treeId, null)) {
- switch (e.getType()) {
- case TREE:
- entries.add(Entry.of(e.getMode(), e.getName(), copyTree(e.getId(), target, c)));
- break;
- case BLOB:
- entries.add(Entry.of(e.getMode(), e.getName(), copyBlob(e.getId(), target, c)));
- break;
- default:
- entries.add(e);
- break;
- }
+ entries.add(switch (e.getType()) {
+ case tree -> Entry.of(e.getMode(), e.getName(), copyTree(e.getId(), target, c));
+ case blob -> Entry.of(e.getMode(), e.getName(), copyBlob(e.getId(), target, c));
+ default -> e;
+ });
}
return target.writeTree(entries, c);
}
diff --git a/src/main/java/jp/ac/titech/c/se/stein/entry/AnyColdEntry.java b/src/main/java/jp/ac/titech/c/se/stein/entry/AnyColdEntry.java
index 4bde10a..5254ddb 100644
--- a/src/main/java/jp/ac/titech/c/se/stein/entry/AnyColdEntry.java
+++ b/src/main/java/jp/ac/titech/c/se/stein/entry/AnyColdEntry.java
@@ -102,14 +102,11 @@ public String toString() {
@Override
public AnyColdEntry normalize() {
- switch (size()) {
- case 0:
- return empty();
- case 1:
- return entries.get(0);
- default:
- return this;
- }
+ return switch (size()) {
+ case 0 -> empty();
+ case 1 -> entries.get(0);
+ default -> this;
+ };
}
}
diff --git a/src/main/java/jp/ac/titech/c/se/stein/entry/BlobEntry.java b/src/main/java/jp/ac/titech/c/se/stein/entry/BlobEntry.java
index cbc00ca..965ced6 100644
--- a/src/main/java/jp/ac/titech/c/se/stein/entry/BlobEntry.java
+++ b/src/main/java/jp/ac/titech/c/se/stein/entry/BlobEntry.java
@@ -18,7 +18,7 @@
* @see SourceBlob
* @see NewBlob
*/
-public abstract class BlobEntry extends HotEntry {
+public abstract sealed class BlobEntry extends HotEntry permits BlobEntry.SourceBlob, BlobEntry.NewBlob {
public abstract byte[] getBlob();
/**
@@ -61,7 +61,7 @@ public NewBlob update(final String newContent) {
* The blob content is lazily loaded on the first call to {@link #getBlob()}.
*/
@RequiredArgsConstructor(access = AccessLevel.PACKAGE)
- public static class SourceBlob extends BlobEntry {
+ public static final class SourceBlob extends BlobEntry {
@Delegate(types = SingleEntry.class)
private final Entry entry;
@@ -93,7 +93,7 @@ public String toString() {
*/
@Slf4j
@RequiredArgsConstructor(access = AccessLevel.PACKAGE)
- public static class NewBlob extends BlobEntry {
+ public static final class NewBlob extends BlobEntry {
@Getter
private final int mode;
diff --git a/src/main/java/jp/ac/titech/c/se/stein/entry/HotEntry.java b/src/main/java/jp/ac/titech/c/se/stein/entry/HotEntry.java
index 21689c7..d35b1f0 100644
--- a/src/main/java/jp/ac/titech/c/se/stein/entry/HotEntry.java
+++ b/src/main/java/jp/ac/titech/c/se/stein/entry/HotEntry.java
@@ -18,7 +18,7 @@
* @see TreeEntry
* @see Entry
*/
-public abstract class HotEntry implements AnyHotEntry, SingleEntry {
+public abstract sealed class HotEntry implements AnyHotEntry, SingleEntry permits BlobEntry, TreeEntry {
/**
* Creates a {@link BlobEntry} that lazily reads blob content from the given source.
*/
diff --git a/src/main/java/jp/ac/titech/c/se/stein/entry/SingleEntry.java b/src/main/java/jp/ac/titech/c/se/stein/entry/SingleEntry.java
index 1b63591..9c5f377 100644
--- a/src/main/java/jp/ac/titech/c/se/stein/entry/SingleEntry.java
+++ b/src/main/java/jp/ac/titech/c/se/stein/entry/SingleEntry.java
@@ -14,7 +14,7 @@ public interface SingleEntry extends Comparable {
* The kind of object an entry refers to.
*/
enum Type {
- BLOB, TREE, LINK
+ blob, tree, link
}
/**
@@ -70,11 +70,11 @@ default boolean isBlob() {
*/
default Type getType() {
if (isTree()) {
- return Type.TREE;
+ return Type.tree;
} else if (isLink()) {
- return Type.LINK;
+ return Type.link;
} else {
- return Type.BLOB;
+ return Type.blob;
}
}
diff --git a/src/main/java/jp/ac/titech/c/se/stein/entry/TreeEntry.java b/src/main/java/jp/ac/titech/c/se/stein/entry/TreeEntry.java
index fb267fd..7a74cfe 100644
--- a/src/main/java/jp/ac/titech/c/se/stein/entry/TreeEntry.java
+++ b/src/main/java/jp/ac/titech/c/se/stein/entry/TreeEntry.java
@@ -19,7 +19,7 @@
* @see SourceTree
* @see NewTree
*/
-public abstract class TreeEntry extends HotEntry {
+public abstract sealed class TreeEntry extends HotEntry permits TreeEntry.SourceTree, TreeEntry.NewTree {
@Override
public int getMode() {
return FileMode.TREE.getBits();
@@ -53,7 +53,7 @@ public NewTree update(List newChildren) {
* A Hot tree entry backed by an existing tree in a repository.
* The tree contents are lazily loaded on the first call to {@link #getEntries()}.
*/
- public static class SourceTree extends TreeEntry {
+ public static final class SourceTree extends TreeEntry {
@Delegate(types = SingleEntry.class)
private final Entry entry;
@@ -106,7 +106,7 @@ public String toString() {
* On {@link #fold}, children are recursively folded and an empty tree
* (all children produce zero IDs) collapses to a zero-ID entry.
*/
- public static class NewTree extends TreeEntry {
+ public static final class NewTree extends TreeEntry {
@Getter
private final String name;
@Getter
diff --git a/src/main/java/jp/ac/titech/c/se/stein/rewriter/BlobTranslator.java b/src/main/java/jp/ac/titech/c/se/stein/rewriter/BlobTranslator.java
index ed995f6..9eceeef 100644
--- a/src/main/java/jp/ac/titech/c/se/stein/rewriter/BlobTranslator.java
+++ b/src/main/java/jp/ac/titech/c/se/stein/rewriter/BlobTranslator.java
@@ -69,14 +69,13 @@ public AnyHotEntry rewriteBlobEntry(final BlobEntry entry, final Context c) {
}
private AnyHotEntry apply(AnyHotEntry input, List rest, Context c) {
- if (input instanceof BlobEntry) {
+ if (input instanceof BlobEntry blob) {
final BlobTranslator head = rest.get(0);
final List tail = rest.subList(1, rest.size());
- final AnyHotEntry result = head.rewriteBlobEntry((BlobEntry) input, c);
+ final AnyHotEntry result = head.rewriteBlobEntry(blob, c);
return tail.isEmpty() ? result : apply(result, tail, c);
}
- if (input instanceof TreeEntry) {
- final TreeEntry tree = (TreeEntry) input;
+ if (input instanceof TreeEntry tree) {
final List newChildren = tree.getHotEntries().stream()
.flatMap(e -> apply(e, rest, c).stream())
.collect(Collectors.toList());
diff --git a/src/main/java/jp/ac/titech/c/se/stein/rewriter/RepositoryRewriter.java b/src/main/java/jp/ac/titech/c/se/stein/rewriter/RepositoryRewriter.java
index a681b3e..02c5b5c 100644
--- a/src/main/java/jp/ac/titech/c/se/stein/rewriter/RepositoryRewriter.java
+++ b/src/main/java/jp/ac/titech/c/se/stein/rewriter/RepositoryRewriter.java
@@ -346,25 +346,17 @@ protected AnyColdEntry getEntry(final Entry entry, final Context c) {
*/
protected AnyColdEntry rewriteEntry(final Entry entry, final Context c) {
final Context uc = c.with(Key.entry, entry);
- switch (entry.getType()) {
- case BLOB:
- final AnyColdEntry newBlob = rewriteBlobEntry(HotEntry.of(entry, source), uc).fold(target, uc);
- log.debug("Rewrite blob: {} -> {} {}", entry, newBlob, c);
- return newBlob;
- case TREE:
+ final AnyColdEntry result = switch (entry.getType()) {
+ case blob -> rewriteBlobEntry(HotEntry.of(entry, source), uc).fold(target, uc);
+ case tree -> {
final String path = entry.isRoot() ? "" : c.getPath() + "/" + entry.name;
final String dir = isPathSensitive ? path : null;
- final AnyColdEntry newTree = rewriteTreeEntry(HotEntry.ofTree(entry, source, dir), uc.with(Key.path, path));
- log.debug("Rewrite tree: {} -> {} {}", entry, newTree, c);
- return newTree;
- case LINK:
- final AnyColdEntry newLink = rewriteLinkEntry(entry, uc);
- log.debug("Rewrite link: {} -> {} {}", entry, newLink, c);
- return newLink;
- default:
- assert false;
- return null;
- }
+ yield rewriteTreeEntry(HotEntry.ofTree(entry, source, dir), uc.with(Key.path, path));
+ }
+ case link -> rewriteLinkEntry(entry, uc);
+ };
+ log.debug("Rewrite {}: {} -> {} {}", entry.getType(), entry, result, c);
+ return result;
}
protected AnyHotEntry rewriteBlobEntry(BlobEntry entry, Context c) {
@@ -529,36 +521,36 @@ protected RefEntry rewriteRefEntry(final RefEntry entry, final Context c) {
* Rewrites the referred object by a ref or a tag.
*/
protected ObjectId rewriteRefObject(final ObjectId id, final int type, final Context c) {
- switch (type) {
- case Constants.OBJ_COMMIT: // 1: commit
+ return switch (type) {
+ case Constants.OBJ_COMMIT -> {
final ObjectId newCommitId = commitMapping.get(id);
if (newCommitId == null) {
log.warn("Rewritten commit not found: {} {}", id.name(), c);
- return id;
+ yield id;
}
- return newCommitId;
-
- case Constants.OBJ_TREE: // 2: tree
+ yield newCommitId;
+ }
+ case Constants.OBJ_TREE -> {
// TODO rewriting opportunity for this tree
final ObjectId newTreeId = source.copyTree(id, target, c);
log.warn("A ref object tree {} found, just copied {}", id.name(), c);
- return newTreeId;
-
- case Constants.OBJ_BLOB: // 3: blob
+ yield newTreeId;
+ }
+ case Constants.OBJ_BLOB -> {
// TODO rewriting opportunity for this blob
final ObjectId newBlobId = source.copyBlob(id, target, c);
log.warn("A ref object blob {} found, just copied {}", id.name(), c);
- return newBlobId;
-
- case Constants.OBJ_TAG: // 4: tag
+ yield newBlobId;
+ }
+ case Constants.OBJ_TAG -> {
final ObjectId newTagId = tagMapping.get(id);
- return newTagId != null ? newTagId : rewriteTag(source.parseTag(id), c);
-
- default:
- // referring non-commit and non-tag; ignore it
+ yield newTagId != null ? newTagId : rewriteTag(source.parseTag(id), c);
+ }
+ default -> {
log.warn("Ignore unknown type ({}): {} {}", type, id.name(), c);
- return id;
- }
+ yield id;
+ }
+ };
}
/**
diff --git a/src/test/java/jp/ac/titech/c/se/stein/entry/EntryTest.java b/src/test/java/jp/ac/titech/c/se/stein/entry/EntryTest.java
index 1999e22..22c68cc 100644
--- a/src/test/java/jp/ac/titech/c/se/stein/entry/EntryTest.java
+++ b/src/test/java/jp/ac/titech/c/se/stein/entry/EntryTest.java
@@ -36,17 +36,17 @@ public void testType() {
assertTrue(blob.isBlob());
assertFalse(blob.isTree());
assertFalse(blob.isLink());
- assertEquals(SingleEntry.Type.BLOB, blob.getType());
+ assertEquals(SingleEntry.Type.blob, blob.getType());
assertTrue(tree.isTree());
assertFalse(tree.isBlob());
assertFalse(tree.isLink());
- assertEquals(SingleEntry.Type.TREE, tree.getType());
+ assertEquals(SingleEntry.Type.tree, tree.getType());
assertTrue(link.isLink());
assertFalse(link.isBlob());
assertFalse(link.isTree());
- assertEquals(SingleEntry.Type.LINK, link.getType());
+ assertEquals(SingleEntry.Type.link, link.getType());
}
@Test
diff --git a/src/test/java/jp/ac/titech/c/se/stein/entry/HotEntryTest.java b/src/test/java/jp/ac/titech/c/se/stein/entry/HotEntryTest.java
index 4714651..3f52f45 100644
--- a/src/test/java/jp/ac/titech/c/se/stein/entry/HotEntryTest.java
+++ b/src/test/java/jp/ac/titech/c/se/stein/entry/HotEntryTest.java
@@ -41,7 +41,7 @@ public void testSingleEntryMethods() {
final BlobEntry withDir = HotEntry.of(BLOB_MODE, "hello", HELLO, "src");
assertEquals("src/hello", withDir.getPath());
assertTrue(withDir.isBlob());
- assertEquals(SingleEntry.Type.BLOB, withDir.getType());
+ assertEquals(SingleEntry.Type.blob, withDir.getType());
}
@Test