From 94ed86db28ce99bd32a0e6eb3ea54d4579d3e59e Mon Sep 17 00:00:00 2001 From: Goooler Date: Fri, 27 Aug 2021 01:00:37 +0800 Subject: [PATCH] Code cleanups --- .../src/main/java/brut/apktool/Main.java | 24 +++-- .../content/res/XmlResourceParser.java | 2 +- .../main/java/android/util/AttributeSet.java | 4 +- .../main/java/android/util/TypedValue.java | 25 +++-- .../src/main/java/brut/androlib/Androlib.java | 7 +- .../main/java/brut/androlib/ApkDecoder.java | 4 +- .../main/java/brut/androlib/ApkOptions.java | 2 +- .../androlib/meta/StringExConstructor.java | 2 +- .../brut/androlib/res/AndrolibResources.java | 32 +++---- .../java/brut/androlib/res/data/ResID.java | 5 +- .../brut/androlib/res/data/ResPackage.java | 23 ++--- .../brut/androlib/res/data/ResResSpec.java | 6 +- .../java/brut/androlib/res/data/ResTable.java | 14 +-- .../java/brut/androlib/res/data/ResType.java | 2 +- .../brut/androlib/res/data/ResTypeSpec.java | 2 +- .../brut/androlib/res/data/ResValuesFile.java | 10 +- .../res/data/value/ResArrayValue.java | 18 ++-- .../brut/androlib/res/data/value/ResAttr.java | 6 +- .../androlib/res/data/value/ResEnumAttr.java | 2 +- .../androlib/res/data/value/ResFlagsAttr.java | 35 +++---- .../res/data/value/ResPluralsValue.java | 4 +- .../res/data/value/ResStyleValue.java | 16 ++-- .../androlib/res/decoder/ARSCDecoder.java | 14 ++- .../res/decoder/AXmlResourceParser.java | 38 ++++---- .../res/decoder/Res9patchStreamDecoder.java | 12 +-- .../res/decoder/ResStreamDecoder.java | 2 +- .../decoder/ResStreamDecoderContainer.java | 2 +- .../androlib/res/decoder/StringBlock.java | 14 +-- .../androlib/res/util/ExtXmlSerializer.java | 10 +- .../res/xml/ResValuesXmlSerializable.java | 4 +- .../androlib/res/xml/ResXmlEncodable.java | 4 +- .../brut/androlib/res/xml/ResXmlEncoders.java | 6 +- .../brut/androlib/res/xml/ResXmlPatcher.java | 7 +- .../org/xmlpull/renamed/MXSerializer.java | 94 ++++++++++--------- .../test/java/brut/androlib/TestUtils.java | 6 +- .../androlib/aapt1/BuildAndDecodeTest.java | 2 +- .../aapt1/UnknownCompressionTest.java | 6 +- .../decode/DecodeKotlinCoroutinesTest.java | 2 +- .../brut/directory/AbstractDirectory.java | 8 +- .../src/main/java/brut/directory/DirUtil.java | 8 +- .../main/java/brut/directory/Directory.java | 44 ++++----- .../java/brut/directory/FileDirectory.java | 11 +-- .../java/brut/directory/ZipRODirectory.java | 8 +- .../src/main/java/brut/util/BrutIO.java | 8 +- brut.j.util/src/main/java/brut/util/Duo.java | 9 +- .../src/main/java/brut/util/ExtDataInput.java | 4 +- brut.j.util/src/main/java/brut/util/Jar.java | 6 +- 47 files changed, 266 insertions(+), 308 deletions(-) diff --git a/brut.apktool/apktool-cli/src/main/java/brut/apktool/Main.java b/brut.apktool/apktool-cli/src/main/java/brut/apktool/Main.java index 660ee2b6..abb742bd 100644 --- a/brut.apktool/apktool-cli/src/main/java/brut/apktool/Main.java +++ b/brut.apktool/apktool-cli/src/main/java/brut/apktool/Main.java @@ -186,7 +186,7 @@ public class Main { } catch (CantFindFrameworkResException ex) { System.err .println("Can't find framework resources for package of id: " - + String.valueOf(ex.getPkgId()) + + ex.getPkgId() + ". You must install proper " + "framework files, see project website for more info."); System.exit(1); @@ -509,17 +509,17 @@ public class Main { listFrameworkOptions.addOption(frameIfDirOption); // add all, loop existing cats then manually add advance - for (Object op : normalOptions.getOptions()) { - allOptions.addOption((Option)op); + for (Option op : normalOptions.getOptions()) { + allOptions.addOption(op); } - for (Object op : DecodeOptions.getOptions()) { - allOptions.addOption((Option)op); + for (Option op : DecodeOptions.getOptions()) { + allOptions.addOption(op); } - for (Object op : BuildOptions.getOptions()) { - allOptions.addOption((Option)op); + for (Option op : BuildOptions.getOptions()) { + allOptions.addOption(op); } - for (Object op : frameOptions.getOptions()) { - allOptions.addOption((Option)op); + for (Option op : frameOptions.getOptions()) { + allOptions.addOption(op); } allOptions.addOption(apiLevelOption); allOptions.addOption(analysisOption); @@ -561,7 +561,7 @@ public class Main { if (isAdvanceMode()) { System.out.println("Apache License 2.0 (https://www.apache.org/licenses/LICENSE-2.0)\n"); }else { - System.out.println(""); + System.out.println(); } // 4 usage outputs (general, frameworks, decode, build) @@ -573,10 +573,8 @@ public class Main { formatter.printHelp("apktool " + verbosityHelp() + "publicize-resources ", emptyOptions); formatter.printHelp("apktool " + verbosityHelp() + "empty-framework-dir [options]", emptyFrameworkOptions); formatter.printHelp("apktool " + verbosityHelp() + "list-frameworks [options]", listFrameworkOptions); - System.out.println(""); - } else { - System.out.println(""); } + System.out.println(); // print out more information System.out.println( diff --git a/brut.apktool/apktool-lib/src/main/java/android/content/res/XmlResourceParser.java b/brut.apktool/apktool-lib/src/main/java/android/content/res/XmlResourceParser.java index a1067853..37b31dc7 100644 --- a/brut.apktool/apktool-lib/src/main/java/android/content/res/XmlResourceParser.java +++ b/brut.apktool/apktool-lib/src/main/java/android/content/res/XmlResourceParser.java @@ -30,5 +30,5 @@ public interface XmlResourceParser extends XmlPullParser, AttributeSet { * Close this interface to the resource. Calls on the interface are no * longer value after this call. */ - public void close(); + void close(); } diff --git a/brut.apktool/apktool-lib/src/main/java/android/util/AttributeSet.java b/brut.apktool/apktool-lib/src/main/java/android/util/AttributeSet.java index db5e3d66..f4ddd678 100644 --- a/brut.apktool/apktool-lib/src/main/java/android/util/AttributeSet.java +++ b/brut.apktool/apktool-lib/src/main/java/android/util/AttributeSet.java @@ -26,7 +26,7 @@ public interface AttributeSet { int getAttributeNameResource(int index); - int getAttributeListValue(int index, String options[], int defaultValue); + int getAttributeListValue(int index, String[] options, int defaultValue); boolean getAttributeBooleanValue(int index, boolean defaultValue); @@ -49,7 +49,7 @@ public interface AttributeSet { String getAttributeValue(String namespace, String attribute); int getAttributeListValue(String namespace, String attribute, - String options[], int defaultValue); + String[] options, int defaultValue); boolean getAttributeBooleanValue(String namespace, String attribute, boolean defaultValue); diff --git a/brut.apktool/apktool-lib/src/main/java/android/util/TypedValue.java b/brut.apktool/apktool-lib/src/main/java/android/util/TypedValue.java index fc0078b8..77d75bf6 100644 --- a/brut.apktool/apktool-lib/src/main/java/android/util/TypedValue.java +++ b/brut.apktool/apktool-lib/src/main/java/android/util/TypedValue.java @@ -217,7 +217,7 @@ public class TypedValue { private static final float MANTISSA_MULT = 1.0f / (1 << TypedValue.COMPLEX_MANTISSA_SHIFT); private static final float[] RADIX_MULTS = new float[] { - 1.0f * MANTISSA_MULT, 1.0f / (1 << 7) * MANTISSA_MULT, + MANTISSA_MULT, 1.0f / (1 << 7) * MANTISSA_MULT, 1.0f / (1 << 15) * MANTISSA_MULT, 1.0f / (1 << 23) * MANTISSA_MULT }; /** @@ -251,7 +251,7 @@ public class TypedValue { * @return String The coerced string value. If the value is null or the type * is not known, null is returned. */ - public static final String coerceToString(int type, int data) { + public static String coerceToString(int type, int data) { switch (type) { case TYPE_NULL: return null; @@ -262,11 +262,11 @@ public class TypedValue { case TYPE_FLOAT: return Float.toString(Float.intBitsToFloat(data)); case TYPE_DIMENSION: - return Float.toString(complexToFloat(data)) + return complexToFloat(data) + DIMENSION_UNIT_STRS[(data >> COMPLEX_UNIT_SHIFT) & COMPLEX_UNIT_MASK]; case TYPE_FRACTION: - return Float.toString(complexToFloat(data) * 100) + return complexToFloat(data) * 100 + FRACTION_UNIT_STRS[(data >> COMPLEX_UNIT_SHIFT) & COMPLEX_UNIT_MASK]; case TYPE_INT_HEX: @@ -286,22 +286,19 @@ public class TypedValue { res = res.substring(2); break; case TYPE_INT_COLOR_ARGB4:// #AARRGGBB->#ARGB - res = new StringBuffer().append(vals[0]).append(vals[2]) - .append(vals[4]).append(vals[6]).toString(); + res = String.valueOf(vals[0]) + vals[2] + + vals[4] + vals[6]; break; case TYPE_INT_COLOR_RGB4:// #FFRRGGBB->#RGB - res = new StringBuffer().append(vals[2]).append(vals[4]) - .append(vals[6]).toString(); + res = String.valueOf(vals[2]) + vals[4] + + vals[6]; break; } return "#" + res; } else if (type >= TYPE_FIRST_INT && type <= TYPE_LAST_INT) { - String res; - switch (type) { - default: - case TYPE_INT_DEC: - res = Integer.toString(data); - break; + String res = null; + if (type == TYPE_INT_DEC) { + res = Integer.toString(data); } return res; } diff --git a/brut.apktool/apktool-lib/src/main/java/brut/androlib/Androlib.java b/brut.apktool/apktool-lib/src/main/java/brut/androlib/Androlib.java index 9b2dd064..63a97d52 100644 --- a/brut.apktool/apktool-lib/src/main/java/brut/androlib/Androlib.java +++ b/brut.apktool/apktool-lib/src/main/java/brut/androlib/Androlib.java @@ -25,7 +25,6 @@ import brut.androlib.res.data.ResUnknownFiles; import brut.common.InvalidUnknownFileException; import brut.common.RootUnknownFileException; import brut.common.TraversalUnknownFileException; -import brut.directory.ExtFile; import brut.androlib.res.xml.ResXmlPatcher; import brut.androlib.src.SmaliBuilder; import brut.androlib.src.SmaliDecoder; @@ -48,7 +47,7 @@ import java.util.zip.ZipOutputStream; public class Androlib { private final AndrolibResources mAndRes = new AndrolibResources(); protected final ResUnknownFiles mResUnknownFiles = new ResUnknownFiles(); - public ApkOptions apkOptions; + public final ApkOptions apkOptions; private int mMinSdkVersion = 0; public Androlib() { @@ -779,8 +778,8 @@ public class Androlib { } private boolean isModified(File[] working, File[] stored) { - for (int i = 0; i < stored.length; i++) { - if (!stored[i].exists()) { + for (File file : stored) { + if (!file.exists()) { return true; } } diff --git a/brut.apktool/apktool-lib/src/main/java/brut/androlib/ApkDecoder.java b/brut.apktool/apktool-lib/src/main/java/brut/androlib/ApkDecoder.java index 5bb8d969..b9e881e1 100644 --- a/brut.apktool/apktool-lib/src/main/java/brut/androlib/ApkDecoder.java +++ b/brut.apktool/apktool-lib/src/main/java/brut/androlib/ApkDecoder.java @@ -165,12 +165,10 @@ public class ApkDecoder { mAndrolib.decodeRawFiles(mApkFile, outDir, mDecodeAssets); mAndrolib.decodeUnknownFiles(mApkFile, outDir); - mUncompressedFiles = new ArrayList(); + mUncompressedFiles = new ArrayList<>(); mAndrolib.recordUncompressedFiles(mApkFile, mUncompressedFiles); mAndrolib.writeOriginalFiles(mApkFile, outDir); writeMetaFile(); - } catch (Exception ex) { - throw ex; } finally { try { mApkFile.close(); diff --git a/brut.apktool/apktool-lib/src/main/java/brut/androlib/ApkOptions.java b/brut.apktool/apktool-lib/src/main/java/brut/androlib/ApkOptions.java index da661d97..e6674ab6 100644 --- a/brut.apktool/apktool-lib/src/main/java/brut/androlib/ApkOptions.java +++ b/brut.apktool/apktool-lib/src/main/java/brut/androlib/ApkOptions.java @@ -24,7 +24,7 @@ public class ApkOptions { public boolean debugMode = false; public boolean verbose = false; public boolean copyOriginalFiles = false; - public boolean updateFiles = false; + public final boolean updateFiles = false; public boolean isFramework = false; public boolean resourcesAreCompressed = false; public boolean useAapt2 = false; diff --git a/brut.apktool/apktool-lib/src/main/java/brut/androlib/meta/StringExConstructor.java b/brut.apktool/apktool-lib/src/main/java/brut/androlib/meta/StringExConstructor.java index a3858311..bad8a227 100644 --- a/brut.apktool/apktool-lib/src/main/java/brut/androlib/meta/StringExConstructor.java +++ b/brut.apktool/apktool-lib/src/main/java/brut/androlib/meta/StringExConstructor.java @@ -29,7 +29,7 @@ public class StringExConstructor extends Constructor { private class ConstructStringEx extends AbstractConstruct { public Object construct(Node node) { - String val = (String) constructScalar((ScalarNode) node); + String val = constructScalar((ScalarNode) node); return YamlStringEscapeUtils.unescapeString(val); } } diff --git a/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/AndrolibResources.java b/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/AndrolibResources.java index 4afdc2cc..813084f7 100644 --- a/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/AndrolibResources.java +++ b/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/AndrolibResources.java @@ -62,7 +62,7 @@ final public class AndrolibResources { throws AndrolibException { LOGGER.info("Loading resource table..."); ResPackage[] pkgs = getResPackagesFromApk(apkFile, resTable, sKeepBroken); - ResPackage pkg = null; + ResPackage pkg; switch (pkgs.length) { case 1: @@ -71,14 +71,11 @@ final public class AndrolibResources { case 2: if (pkgs[0].getName().equals("android")) { LOGGER.warning("Skipping \"android\" package group"); - pkg = pkgs[1]; - break; } else if (pkgs[0].getName().equals("com.htc")) { LOGGER.warning("Skipping \"htc\" package group"); - pkg = pkgs[1]; - break; } - + pkg = pkgs[1]; + break; default: pkg = selectPkgWithMostResSpecs(pkgs); break; @@ -128,7 +125,7 @@ final public class AndrolibResources { } if (pkg.getId() != id) { - throw new AndrolibException("Expected pkg of id: " + String.valueOf(id) + ", got: " + pkg.getId()); + throw new AndrolibException("Expected pkg of id: " + id + ", got: " + pkg.getId()); } resTable.addPackage(pkg, false); @@ -619,7 +616,7 @@ final public class AndrolibResources { String aaptPath = apkOptions.aaptPath; boolean customAapt = !aaptPath.isEmpty(); - List cmd = new ArrayList(); + List cmd = new ArrayList<>(); try { String aaptCommand = AaptManager.getAaptExecutionCommand(aaptPath, getAaptBinaryFile()); @@ -705,7 +702,7 @@ final public class AndrolibResources { axmlParser.setAttrDecoder(new ResAttrDecoder()); decoders.setDecoder("xml", new XmlPullStreamDecoder(axmlParser, getResXmlSerializer())); - return new Duo(new ResFileDecoder(decoders), axmlParser); + return new Duo<>(new ResFileDecoder(decoders), axmlParser); } public Duo getManifestFileDecoder(boolean withResources) { @@ -717,7 +714,7 @@ final public class AndrolibResources { } decoders.setDecoder("xml", new XmlPullStreamDecoder(axmlParser,getResXmlSerializer())); - return new Duo(new ResFileDecoder(decoders), axmlParser); + return new Duo<>(new ResFileDecoder(decoders), axmlParser); } public ExtMXSerializer getResXmlSerializer() { @@ -783,15 +780,10 @@ final public class AndrolibResources { throws AndrolibException { try { Directory dir = apkFile.getDirectory(); - BufferedInputStream bfi = new BufferedInputStream(dir.getFileInput("resources.arsc")); - try { + try (BufferedInputStream bfi = new BufferedInputStream(dir.getFileInput("resources.arsc"))) { return ARSCDecoder.decode(bfi, false, keepBroken, resTable).getPackages(); - } finally { - try { - bfi.close(); - } catch (IOException ignored) {} } - } catch (DirectoryException ex) { + } catch (DirectoryException | IOException ex) { throw new AndrolibException("Could not load resources.arsc from file: " + apkFile, ex); } } @@ -808,7 +800,7 @@ final public class AndrolibResources { } } - apk = new File(dir, String.valueOf(id) + ".apk"); + apk = new File(dir, id + ".apk"); if (apk.exists()) { return apk; } @@ -888,8 +880,8 @@ final public class AndrolibResources { ARSCData arsc = ARSCDecoder.decode(new ByteArrayInputStream(data), true, true); publicizeResources(data, arsc.getFlagsOffsets()); - File outFile = new File(getFrameworkDir(), String.valueOf(arsc - .getOnePackage().getId()) + File outFile = new File(getFrameworkDir(), arsc + .getOnePackage().getId() + (tag == null ? "" : '-' + tag) + ".apk"); diff --git a/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/data/ResID.java b/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/data/ResID.java index 0aae813b..abc32039 100644 --- a/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/data/ResID.java +++ b/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/data/ResID.java @@ -59,9 +59,6 @@ public class ResID { return false; } final ResID other = (ResID) obj; - if (this.id != other.id) { - return false; - } - return true; + return this.id == other.id; } } diff --git a/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/data/ResPackage.java b/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/data/ResPackage.java index 71925f93..19028a43 100644 --- a/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/data/ResPackage.java +++ b/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/data/ResPackage.java @@ -29,10 +29,10 @@ public class ResPackage { private final ResTable mResTable; private final int mId; private final String mName; - private final Map mResSpecs = new LinkedHashMap(); - private final Map mConfigs = new LinkedHashMap(); - private final Map mTypes = new LinkedHashMap(); - private final Set mSynthesizedRes = new HashSet(); + private final Map mResSpecs = new LinkedHashMap<>(); + private final Map mConfigs = new LinkedHashMap<>(); + private final Map mTypes = new LinkedHashMap<>(); + private final Set mSynthesizedRes = new HashSet<>(); private ResValueFactory mValueFactory; @@ -43,7 +43,7 @@ public class ResPackage { } public List listResSpecs() { - return new ArrayList(mResSpecs.values()); + return new ArrayList<>(mResSpecs.values()); } public boolean hasResSpec(ResID resID) { @@ -80,7 +80,7 @@ public class ResPackage { } public Set listFiles() { - Set ret = new HashSet(); + Set ret = new HashSet<>(); for (ResResSpec spec : mResSpecs.values()) { for (ResResource res : spec.listResources()) { if (res.getValue() instanceof ResFileValue) { @@ -92,13 +92,13 @@ public class ResPackage { } public Collection listValuesFiles() { - Map, ResValuesFile> ret = new HashMap, ResValuesFile>(); + Map, ResValuesFile> ret = new HashMap<>(); for (ResResSpec spec : mResSpecs.values()) { for (ResResource res : spec.listResources()) { if (res.getValue() instanceof ResValuesXmlSerializable) { ResTypeSpec type = res.getResSpec().getType(); ResType config = res.getConfig(); - Duo key = new Duo(type, config); + Duo key = new Duo<>(type, config); ResValuesFile values = ret.get(key); if (values == null) { values = new ResValuesFile(this, type, config); @@ -163,13 +163,10 @@ public class ResPackage { return false; } final ResPackage other = (ResPackage) obj; - if (this.mResTable != other.mResTable && (this.mResTable == null || !this.mResTable.equals(other.mResTable))) { + if (!Objects.equals(this.mResTable, other.mResTable)) { return false; } - if (this.mId != other.mId) { - return false; - } - return true; + return this.mId == other.mId; } @Override diff --git a/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/data/ResResSpec.java b/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/data/ResResSpec.java index 5cb7dd69..88cded09 100644 --- a/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/data/ResResSpec.java +++ b/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/data/ResResSpec.java @@ -30,7 +30,7 @@ public class ResResSpec { private final String mName; private final ResPackage mPackage; private final ResTypeSpec mType; - private final Map mResources = new LinkedHashMap(); + private final Map mResources = new LinkedHashMap<>(); public ResResSpec(ResID id, String name, ResPackage pkg, ResTypeSpec type) { this.mId = id; @@ -38,7 +38,7 @@ public class ResResSpec { ResResSpec resResSpec = type.getResSpecUnsafe(name); if (resResSpec != null) { - cleanName = String.format("APKTOOL_DUPLICATE_%s_%s", type.toString(), id.toString()); + cleanName = String.format("APKTOOL_DUPLICATE_%s_%s", type, id.toString()); } else { cleanName = ((name == null || name.isEmpty()) ? ("APKTOOL_DUMMYVAL_" + id.toString()) : name); } @@ -49,7 +49,7 @@ public class ResResSpec { } public Set listResources() { - return new LinkedHashSet(mResources.values()); + return new LinkedHashSet<>(mResources.values()); } public ResResource getResource(ResType config) throws AndrolibException { diff --git a/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/data/ResTable.java b/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/data/ResTable.java index 7933370d..c726dc63 100644 --- a/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/data/ResTable.java +++ b/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/data/ResTable.java @@ -26,10 +26,10 @@ import java.util.*; public class ResTable { private final AndrolibResources mAndRes; - private final Map mPackagesById = new HashMap(); - private final Map mPackagesByName = new HashMap(); - private final Set mMainPackages = new LinkedHashSet(); - private final Set mFramePackages = new LinkedHashSet(); + private final Map mPackagesById = new HashMap<>(); + private final Map mPackagesByName = new HashMap<>(); + private final Set mMainPackages = new LinkedHashSet<>(); + private final Set mFramePackages = new LinkedHashSet<>(); private String mPackageRenamed; private String mPackageOriginal; @@ -38,8 +38,8 @@ public class ResTable { private boolean mSharedLibrary = false; private boolean mSparseResources = false; - private Map mSdkInfo = new LinkedHashMap<>(); - private VersionInfo mVersionInfo = new VersionInfo(); + private final Map mSdkInfo = new LinkedHashMap<>(); + private final VersionInfo mVersionInfo = new VersionInfo(); public ResTable() { mAndRes = null; @@ -124,7 +124,7 @@ public class ResTable { public void addPackage(ResPackage pkg, boolean main) throws AndrolibException { Integer id = pkg.getId(); if (mPackagesById.containsKey(id)) { - throw new AndrolibException("Multiple packages: id=" + id.toString()); + throw new AndrolibException("Multiple packages: id=" + id); } String name = pkg.getName(); if (mPackagesByName.containsKey(name)) { diff --git a/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/data/ResType.java b/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/data/ResType.java index 70f50060..87d4c9c2 100644 --- a/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/data/ResType.java +++ b/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/data/ResType.java @@ -22,7 +22,7 @@ import java.util.*; public class ResType { private final ResConfigFlags mFlags; - private final Map mResources = new LinkedHashMap(); + private final Map mResources = new LinkedHashMap<>(); public ResType(ResConfigFlags flags) { this.mFlags = flags; diff --git a/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/data/ResTypeSpec.java b/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/data/ResTypeSpec.java index e7f0dc7a..fb62751d 100644 --- a/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/data/ResTypeSpec.java +++ b/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/data/ResTypeSpec.java @@ -28,7 +28,7 @@ public final class ResTypeSpec { public static final String RES_TYPE_NAME_ATTR = "attr"; private final String mName; - private final Map mResSpecs = new LinkedHashMap(); + private final Map mResSpecs = new LinkedHashMap<>(); private final ResTable mResTable; private final ResPackage mPackage; diff --git a/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/data/ResValuesFile.java b/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/data/ResValuesFile.java index 1ecc0ad8..dc860fb1 100644 --- a/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/data/ResValuesFile.java +++ b/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/data/ResValuesFile.java @@ -17,13 +17,14 @@ package brut.androlib.res.data; import java.util.LinkedHashSet; +import java.util.Objects; import java.util.Set; public class ResValuesFile { private final ResPackage mPackage; private final ResTypeSpec mType; private final ResType mConfig; - private final Set mResources = new LinkedHashSet(); + private final Set mResources = new LinkedHashSet<>(); public ResValuesFile(ResPackage pkg, ResTypeSpec type, ResType config) { this.mPackage = pkg; @@ -62,13 +63,10 @@ public class ResValuesFile { return false; } final ResValuesFile other = (ResValuesFile) obj; - if (this.mType != other.mType && (this.mType == null || !this.mType.equals(other.mType))) { + if (!Objects.equals(this.mType, other.mType)) { return false; } - if (this.mConfig != other.mConfig && (this.mConfig == null || !this.mConfig.equals(other.mConfig))) { - return false; - } - return true; + return Objects.equals(this.mConfig, other.mConfig); } @Override diff --git a/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/data/value/ResArrayValue.java b/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/data/value/ResArrayValue.java index 47d7d080..bb789cba 100644 --- a/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/data/value/ResArrayValue.java +++ b/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/data/value/ResArrayValue.java @@ -51,17 +51,17 @@ public class ResArrayValue extends ResBagValue implements serializer.attribute(null, "name", res.getResSpec().getName()); // lets check if we need to add formatted="false" to this array - for (int i = 0; i < mItems.length; i++) { - if (mItems[i].hasMultipleNonPositionalSubstitutions()) { + for (ResScalarValue item : mItems) { + if (item.hasMultipleNonPositionalSubstitutions()) { serializer.attribute(null, "formatted", "false"); break; } } // add 's - for (int i = 0; i < mItems.length; i++) { + for (ResScalarValue mItem : mItems) { serializer.startTag(null, "item"); - serializer.text(mItems[i].encodeAsResXmlNonEscapedItemValue()); + serializer.text(mItem.encodeAsResXmlNonEscapedItemValue()); serializer.endTag(null, "item"); } serializer.endTag(null, type); @@ -72,16 +72,16 @@ public class ResArrayValue extends ResBagValue implements return null; } String type = mItems[0].getType(); - for (int i = 0; i < mItems.length; i++) { - if (mItems[i].encodeAsResXmlItemValue().startsWith("@string")) { + for (ResScalarValue mItem : mItems) { + if (mItem.encodeAsResXmlItemValue().startsWith("@string")) { return "string"; - } else if (mItems[i].encodeAsResXmlItemValue().startsWith("@drawable")) { + } else if (mItem.encodeAsResXmlItemValue().startsWith("@drawable")) { return null; - } else if (mItems[i].encodeAsResXmlItemValue().startsWith("@integer")) { + } else if (mItem.encodeAsResXmlItemValue().startsWith("@integer")) { return "integer"; } else if (!"string".equals(type) && !"integer".equals(type)) { return null; - } else if (!type.equals(mItems[i].getType())) { + } else if (!type.equals(mItem.getType())) { return null; } } diff --git a/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/data/value/ResAttr.java b/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/data/value/ResAttr.java index 762ad4d3..0b0925dc 100644 --- a/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/data/value/ResAttr.java +++ b/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/data/value/ResAttr.java @@ -96,9 +96,9 @@ public class ResAttr extends ResBagValue implements ResValuesXmlSerializable { for (; i < items.length; i++) { int resId = items[i].m1; pkg.addSynthesizedRes(resId); - attrItems[j++] = new Duo( - factory.newReference(resId, null), - (ResIntValue) items[i].m2); + attrItems[j++] = new Duo<>( + factory.newReference(resId, null), + (ResIntValue) items[i].m2); } switch (type & 0xff0000) { case TYPE_ENUM: diff --git a/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/data/value/ResEnumAttr.java b/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/data/value/ResEnumAttr.java index 0818023a..50e7f615 100644 --- a/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/data/value/ResEnumAttr.java +++ b/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/data/value/ResEnumAttr.java @@ -80,5 +80,5 @@ public class ResEnumAttr extends ResAttr { } private final Duo[] mItems; - private final Map mItemsCache = new HashMap(); + private final Map mItemsCache = new HashMap<>(); } diff --git a/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/data/value/ResFlagsAttr.java b/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/data/value/ResFlagsAttr.java index f2168169..ec3d7b4d 100644 --- a/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/data/value/ResFlagsAttr.java +++ b/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/data/value/ResFlagsAttr.java @@ -23,7 +23,6 @@ import org.xmlpull.v1.XmlSerializer; import java.io.IOException; import java.util.Arrays; -import java.util.Comparator; public class ResFlagsAttr extends ResAttr { ResFlagsAttr(ResReferenceValue parent, int type, Integer min, Integer max, @@ -55,8 +54,7 @@ public class ResFlagsAttr extends ResAttr { FlagItem[] flagItems = new FlagItem[mFlags.length]; int[] flags = new int[mFlags.length]; int flagsCount = 0; - for (int i = 0; i < mFlags.length; i++) { - FlagItem flagItem = mFlags[i]; + for (FlagItem flagItem : mFlags) { int flag = flagItem.flag; if ((intVal & flag) != flag) { @@ -74,20 +72,18 @@ public class ResFlagsAttr extends ResAttr { @Override protected void serializeBody(XmlSerializer serializer, ResResource res) throws AndrolibException, IOException { - for (int i = 0; i < mItems.length; i++) { - FlagItem item = mItems[i]; - + for (FlagItem item : mItems) { serializer.startTag(null, "flag"); serializer.attribute(null, "name", item.getValue()); serializer.attribute(null, "value", - String.format("0x%08x", item.flag)); + String.format("0x%08x", item.flag)); serializer.endTag(null, "flag"); } } private boolean isSubpartOf(int flag, int[] flags) { - for (int i = 0; i < flags.length; i++) { - if ((flags[i] & flag) == flag) { + for (int j : flags) { + if ((j & flag) == flag) { return true; } } @@ -95,12 +91,12 @@ public class ResFlagsAttr extends ResAttr { } private String renderFlags(FlagItem[] flags) throws AndrolibException { - String ret = ""; - for (int i = 0; i < flags.length; i++) { - ret += "|" + flags[i].getValue(); + StringBuilder ret = new StringBuilder(); + for (FlagItem flag : flags) { + ret.append("|").append(flag.getValue()); } - if (ret.isEmpty()) { - return ret; + if (ret.length() == 0) { + return ret.toString(); } return ret.substring(1); } @@ -115,8 +111,7 @@ public class ResFlagsAttr extends ResAttr { FlagItem[] flags = new FlagItem[mItems.length]; int flagsCount = 0; - for (int i = 0; i < mItems.length; i++) { - FlagItem item = mItems[i]; + for (FlagItem item : mItems) { if (item.flag == 0) { zeroFlags[zeroFlagsCount++] = item; } else { @@ -127,13 +122,7 @@ public class ResFlagsAttr extends ResAttr { mZeroFlags = Arrays.copyOf(zeroFlags, zeroFlagsCount); mFlags = Arrays.copyOf(flags, flagsCount); - Arrays.sort(mFlags, new Comparator() { - @Override - public int compare(FlagItem o1, FlagItem o2) { - return Integer.valueOf(Integer.bitCount(o2.flag)).compareTo( - Integer.bitCount(o1.flag)); - } - }); + Arrays.sort(mFlags, (o1, o2) -> Integer.compare(Integer.bitCount(o2.flag), Integer.bitCount(o1.flag))); } private final FlagItem[] mItems; diff --git a/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/data/value/ResPluralsValue.java b/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/data/value/ResPluralsValue.java index 7a547a0a..e4fd647a 100644 --- a/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/data/value/ResPluralsValue.java +++ b/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/data/value/ResPluralsValue.java @@ -32,8 +32,8 @@ public class ResPluralsValue extends ResBagValue implements super(parent); mItems = new ResScalarValue[6]; - for (int i = 0; i < items.length; i++) { - mItems[items[i].m1 - BAG_KEY_PLURALS_START] = items[i].m2; + for (Duo item : items) { + mItems[item.m1 - BAG_KEY_PLURALS_START] = item.m2; } } diff --git a/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/data/value/ResStyleValue.java b/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/data/value/ResStyleValue.java index 22bb01b2..f8777da2 100644 --- a/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/data/value/ResStyleValue.java +++ b/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/data/value/ResStyleValue.java @@ -34,8 +34,8 @@ public class ResStyleValue extends ResBagValue implements mItems = new Duo[items.length]; for (int i = 0; i < items.length; i++) { - mItems[i] = new Duo( - factory.newReference(items[i].m1, null), items[i].m2); + mItems[i] = new Duo<>( + factory.newReference(items[i].m1, null), items[i].m2); } } @@ -49,16 +49,16 @@ public class ResStyleValue extends ResBagValue implements } else if (res.getResSpec().getName().indexOf('.') != -1) { serializer.attribute(null, "parent", ""); } - for (int i = 0; i < mItems.length; i++) { - ResResSpec spec = mItems[i].m1.getReferent(); + for (Duo mItem : mItems) { + ResResSpec spec = mItem.m1.getReferent(); if (spec == null) { LOGGER.fine(String.format("null reference: m1=0x%08x(%s), m2=0x%08x(%s)", - mItems[i].m1.getRawIntValue(), mItems[i].m1.getType(), mItems[i].m2.getRawIntValue(), mItems[i].m2.getType())); + mItem.m1.getRawIntValue(), mItem.m1.getType(), mItem.m2.getRawIntValue(), mItem.m2.getType())); continue; } - String name = null; + String name; String value = null; ResValue resource = spec.getDefaultResource().getValue(); @@ -66,14 +66,14 @@ public class ResStyleValue extends ResBagValue implements continue; } else if (resource instanceof ResAttr) { ResAttr attr = (ResAttr) resource; - value = attr.convertToResXmlFormat(mItems[i].m2); + value = attr.convertToResXmlFormat(mItem.m2); name = spec.getFullName(res.getResSpec().getPackage(), true); } else { name = "@" + spec.getFullName(res.getResSpec().getPackage(), false); } if (value == null) { - value = mItems[i].m2.encodeAsResXmlValue(); + value = mItem.m2.encodeAsResXmlValue(); } if (value == null) { diff --git a/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/decoder/ARSCDecoder.java b/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/decoder/ARSCDecoder.java index 21e81aa8..e865a0b2 100644 --- a/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/decoder/ARSCDecoder.java +++ b/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/decoder/ARSCDecoder.java @@ -59,7 +59,7 @@ public class ARSCDecoder { private ARSCDecoder(InputStream arscStream, ResTable resTable, boolean storeFlagsOffsets, boolean keepBroken) { arscStream = mCountIn = new CountingInputStream(arscStream); if (storeFlagsOffsets) { - mFlagsOffsets = new ArrayList(); + mFlagsOffsets = new ArrayList<>(); } else { mFlagsOffsets = null; } @@ -251,7 +251,7 @@ public class ARSCDecoder { } mType = flags.isInvalid && !mKeepBroken ? null : mPkg.getOrCreateConfig(flags); - HashMap offsetsToEntryData = new HashMap(); + HashMap offsetsToEntryData = new HashMap<>(); for (int offset : entryOffsets) { if (offset == -1 || offsetsToEntryData.containsKey(offset)) { @@ -327,7 +327,7 @@ public class ARSCDecoder { if (mKeepBroken) { mType.addResource(res, true); spec.addResource(res, true); - LOGGER.warning(String.format("Duplicate Resource Detected. Ignoring duplicate: %s", res.toString())); + LOGGER.warning(String.format("Duplicate Resource Detected. Ignoring duplicate: %s", res)); } else { throw ex; } @@ -347,12 +347,10 @@ public class ARSCDecoder { resId = mIn.readInt(); resValue = readValue(); - if (resValue instanceof ResScalarValue) { - items[i] = new Duo(resId, (ResScalarValue) resValue); - } else { + if (!(resValue instanceof ResScalarValue)) { resValue = new ResStringValue(resValue.toString(), resValue.getRawIntValue()); - items[i] = new Duo(resId, (ResScalarValue) resValue); } + items[i] = new Duo<>(resId, (ResScalarValue) resValue); } return factory.bagFactory(parent, items, mTypeSpec); @@ -574,7 +572,7 @@ public class ARSCDecoder { private int mResId; private int mTypeIdOffset = 0; private boolean[] mMissingResSpecs; - private HashMap mResTypeSpecs = new HashMap<>(); + private final HashMap mResTypeSpecs = new HashMap<>(); private final static short ENTRY_FLAG_COMPLEX = 0x0001; private final static short ENTRY_FLAG_PUBLIC = 0x0002; diff --git a/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/decoder/AXmlResourceParser.java b/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/decoder/AXmlResourceParser.java index d928d143..0dca2a84 100644 --- a/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/decoder/AXmlResourceParser.java +++ b/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/decoder/AXmlResourceParser.java @@ -345,7 +345,7 @@ public class AXmlResourceParser implements XmlResourceParser { if (resourceId != 0) { value = mAttrDecoder.decodeManifestAttr(getAttributeNameResource(index)); } - } catch (AndrolibException | NullPointerException e) { } + } catch (AndrolibException | NullPointerException ignored) {} } return value; } @@ -601,12 +601,12 @@ public class AXmlResourceParser implements XmlResourceParser { m_data = new int[32]; } - public final void reset() { + public void reset() { m_dataLength = 0; m_depth = 0; } - public final int getCurrentCount() { + public int getCurrentCount() { if (m_dataLength == 0) { return 0; } @@ -614,7 +614,7 @@ public class AXmlResourceParser implements XmlResourceParser { return m_data[offset]; } - public final int getAccumulatedCount(int depth) { + public int getAccumulatedCount(int depth) { if (m_dataLength == 0 || depth < 0) { return 0; } @@ -631,7 +631,7 @@ public class AXmlResourceParser implements XmlResourceParser { return accumulatedCount; } - public final void push(int prefix, int uri) { + public void push(int prefix, int uri) { if (m_depth == 0) { increaseDepth(); } @@ -645,7 +645,7 @@ public class AXmlResourceParser implements XmlResourceParser { m_dataLength += 2; } - public final boolean pop() { + public boolean pop() { if (m_dataLength == 0) { return false; } @@ -663,23 +663,23 @@ public class AXmlResourceParser implements XmlResourceParser { return true; } - public final int getPrefix(int index) { + public int getPrefix(int index) { return get(index, true); } - public final int getUri(int index) { + public int getUri(int index) { return get(index, false); } - public final int findPrefix(int uri) { + public int findPrefix(int uri) { return find(uri, false); } - public final int getDepth() { + public int getDepth() { return m_depth; } - public final void increaseDepth() { + public void increaseDepth() { ensureDataCapacity(2); int offset = m_dataLength; m_data[offset] = 0; @@ -688,7 +688,7 @@ public class AXmlResourceParser implements XmlResourceParser { m_depth += 1; } - public final void decreaseDepth() { + public void decreaseDepth() { if (m_dataLength == 0) { return; } @@ -712,7 +712,7 @@ public class AXmlResourceParser implements XmlResourceParser { m_data = newData; } - private final int find(int prefixOrUri, boolean prefix) { + private int find(int prefixOrUri, boolean prefix) { if (m_dataLength == 0) { return -1; } @@ -736,7 +736,7 @@ public class AXmlResourceParser implements XmlResourceParser { return -1; } - private final int get(int index, boolean prefix) { + private int get(int index, boolean prefix) { if (m_dataLength == 0 || index < 0) { return -1; } @@ -762,7 +762,7 @@ public class AXmlResourceParser implements XmlResourceParser { private int m_depth; } - private final int getAttributeOffset(int index) { + private int getAttributeOffset(int index) { if (m_event != START_TAG) { throw new IndexOutOfBoundsException("Current event is not START_TAG."); } @@ -773,7 +773,7 @@ public class AXmlResourceParser implements XmlResourceParser { return offset; } - private final int findAttribute(String namespace, String attribute) { + private int findAttribute(String namespace, String attribute) { if (m_strings == null || attribute == null) { return -1; } @@ -791,7 +791,7 @@ public class AXmlResourceParser implements XmlResourceParser { return -1; } - private final void resetEventInfo() { + private void resetEventInfo() { m_event = -1; m_lineNumber = -1; m_name = -1; @@ -802,7 +802,7 @@ public class AXmlResourceParser implements XmlResourceParser { m_styleAttribute = -1; } - private final void doNext() throws IOException { + private void doNext() throws IOException { // Delayed initialization. if (m_strings == null) { m_reader.skipCheckInt(CHUNK_AXML_FILE, CHUNK_AXML_FILE_BROKEN); @@ -938,7 +938,7 @@ public class AXmlResourceParser implements XmlResourceParser { private boolean m_operational = false; private StringBlock m_strings; private int[] m_resourceIDs; - private NamespaceStack m_namespaces = new NamespaceStack(); + private final NamespaceStack m_namespaces = new NamespaceStack(); private final String android_ns = "http://schemas.android.com/apk/res/android"; private boolean m_decreaseDepth; private int m_event; diff --git a/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/decoder/Res9patchStreamDecoder.java b/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/decoder/Res9patchStreamDecoder.java index 9bf32b05..3950ec1b 100644 --- a/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/decoder/Res9patchStreamDecoder.java +++ b/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/decoder/Res9patchStreamDecoder.java @@ -111,14 +111,12 @@ public class Res9patchStreamDecoder implements ResStreamDecoder { } ImageIO.write(im2, "png", out); - } catch (IOException ex) { + } catch (IOException | NullPointerException ex) { throw new AndrolibException(ex); - } catch (NullPointerException ex) { - // In my case this was triggered because a .png file was - // containing a html document instead of an image. - // This could be more verbose and try to MIME ? - throw new AndrolibException(ex); - } + } // In my case this was triggered because a .png file was + // containing a html document instead of an image. + // This could be more verbose and try to MIME ? + } private NinePatch getNinePatch(byte[] data) throws AndrolibException, diff --git a/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/decoder/ResStreamDecoder.java b/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/decoder/ResStreamDecoder.java index 6c5025f8..3154c341 100644 --- a/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/decoder/ResStreamDecoder.java +++ b/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/decoder/ResStreamDecoder.java @@ -21,6 +21,6 @@ import java.io.InputStream; import java.io.OutputStream; public interface ResStreamDecoder { - public void decode(InputStream in, OutputStream out) + void decode(InputStream in, OutputStream out) throws AndrolibException; } diff --git a/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/decoder/ResStreamDecoderContainer.java b/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/decoder/ResStreamDecoderContainer.java index a5f251d1..12ff097a 100644 --- a/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/decoder/ResStreamDecoderContainer.java +++ b/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/decoder/ResStreamDecoderContainer.java @@ -23,7 +23,7 @@ import java.util.HashMap; import java.util.Map; public class ResStreamDecoderContainer { - private final Map mDecoders = new HashMap(); + private final Map mDecoders = new HashMap<>(); public void decode(InputStream in, OutputStream out, String decoderName) throws AndrolibException { diff --git a/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/decoder/StringBlock.java b/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/decoder/StringBlock.java index e91fed1b..39e0f5a9 100644 --- a/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/decoder/StringBlock.java +++ b/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/decoder/StringBlock.java @@ -177,7 +177,7 @@ public class StringBlock { if (pos == -1) { builder.append(tag); } else { - builder.append(tag.substring(0, pos)); + builder.append(tag, 0, pos); if (!close) { boolean loop = true; while (loop) { @@ -187,7 +187,7 @@ public class StringBlock { // prematurely end style tags, if recreation // cannot be created. if (pos2 != -1) { - builder.append(' ').append(tag.substring(pos + 1, pos2)).append("=\""); + builder.append(' ').append(tag, pos + 1, pos2).append("=\""); pos = tag.indexOf(';', pos2 + 1); String val; @@ -305,11 +305,11 @@ public class StringBlock { } } - private static final int getShort(byte[] array, int offset) { + private static int getShort(byte[] array, int offset) { return (array[offset + 1] & 0xff) << 8 | array[offset] & 0xff; } - private static final int[] getUtf8(byte[] array, int offset) { + private static int[] getUtf8(byte[] array, int offset) { int val = array[offset]; int length; // We skip the utf16 length of the string @@ -331,7 +331,7 @@ public class StringBlock { return new int[] { offset, length}; } - private static final int[] getUtf16(byte[] array, int offset) { + private static int[] getUtf16(byte[] array, int offset) { int val = ((array[offset + 1] & 0xFF) << 8 | array[offset] & 0xFF); if ((val & 0x8000) != 0) { @@ -350,8 +350,8 @@ public class StringBlock { private int[] m_styles; private boolean m_isUTF8; - private final CharsetDecoder UTF16LE_DECODER = Charset.forName("UTF-16LE").newDecoder(); - private final CharsetDecoder UTF8_DECODER = Charset.forName("UTF-8").newDecoder(); + private final CharsetDecoder UTF16LE_DECODER = StandardCharsets.UTF_16LE.newDecoder(); + private final CharsetDecoder UTF8_DECODER = StandardCharsets.UTF_8.newDecoder(); private final CharsetDecoder CESU8_DECODER = Charset.forName("CESU8").newDecoder(); private static final Logger LOGGER = Logger.getLogger(StringBlock.class.getName()); diff --git a/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/util/ExtXmlSerializer.java b/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/util/ExtXmlSerializer.java index 2cbe4853..3e4592ef 100644 --- a/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/util/ExtXmlSerializer.java +++ b/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/util/ExtXmlSerializer.java @@ -22,11 +22,11 @@ import java.io.IOException; public interface ExtXmlSerializer extends XmlSerializer { - public ExtXmlSerializer newLine() throws IOException; + ExtXmlSerializer newLine() throws IOException; - public void setDisabledAttrEscape(boolean disabled); + void setDisabledAttrEscape(boolean disabled); - public static final String PROPERTY_SERIALIZER_INDENTATION = "http://xmlpull.org/v1/doc/properties.html#serializer-indentation"; - public static final String PROPERTY_SERIALIZER_LINE_SEPARATOR = "http://xmlpull.org/v1/doc/properties.html#serializer-line-separator"; - public static final String PROPERTY_DEFAULT_ENCODING = "DEFAULT_ENCODING"; + String PROPERTY_SERIALIZER_INDENTATION = "http://xmlpull.org/v1/doc/properties.html#serializer-indentation"; + String PROPERTY_SERIALIZER_LINE_SEPARATOR = "http://xmlpull.org/v1/doc/properties.html#serializer-line-separator"; + String PROPERTY_DEFAULT_ENCODING = "DEFAULT_ENCODING"; } diff --git a/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/xml/ResValuesXmlSerializable.java b/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/xml/ResValuesXmlSerializable.java index c21748a6..4dbe0f64 100644 --- a/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/xml/ResValuesXmlSerializable.java +++ b/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/xml/ResValuesXmlSerializable.java @@ -23,6 +23,6 @@ import org.xmlpull.v1.XmlSerializer; import java.io.IOException; public interface ResValuesXmlSerializable { - public void serializeToResValuesXml(XmlSerializer serializer, - ResResource res) throws IOException, AndrolibException; + void serializeToResValuesXml(XmlSerializer serializer, + ResResource res) throws IOException, AndrolibException; } diff --git a/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/xml/ResXmlEncodable.java b/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/xml/ResXmlEncodable.java index f9230714..a2991bf9 100644 --- a/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/xml/ResXmlEncodable.java +++ b/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/xml/ResXmlEncodable.java @@ -19,7 +19,7 @@ package brut.androlib.res.xml; import brut.androlib.AndrolibException; public interface ResXmlEncodable { - public String encodeAsResXmlAttr() throws AndrolibException; + String encodeAsResXmlAttr() throws AndrolibException; - public String encodeAsResXmlValue() throws AndrolibException; + String encodeAsResXmlValue() throws AndrolibException; } diff --git a/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/xml/ResXmlEncoders.java b/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/xml/ResXmlEncoders.java index 8abe5166..6669677f 100644 --- a/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/xml/ResXmlEncoders.java +++ b/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/xml/ResXmlEncoders.java @@ -102,15 +102,13 @@ public final class ResXmlEncoders { wasSpace = false; switch (c) { case '\\': + case '"': out.append('\\'); break; case '\'': case '\n': enclose = true; break; - case '"': - out.append('\\'); - break; case '<': isInStyleTag = true; if (enclose) { @@ -154,7 +152,7 @@ public final class ResXmlEncoders { int pos = 0; int count = 0; for (Integer sub : subs) { - out.append(str.substring(pos, ++sub)).append(++count).append('$'); + out.append(str, pos, ++sub).append(++count).append('$'); pos = sub; } out.append(str.substring(pos)); diff --git a/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/xml/ResXmlPatcher.java b/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/xml/ResXmlPatcher.java index 22cbf7f2..142b896c 100644 --- a/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/xml/ResXmlPatcher.java +++ b/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/xml/ResXmlPatcher.java @@ -324,11 +324,8 @@ public final class ResXmlPatcher { DocumentBuilder docBuilder = docFactory.newDocumentBuilder(); // Not using the parse(File) method on purpose, so that we can control when // to close it. Somehow parse(File) does not seem to close the file in all cases. - FileInputStream inputStream = new FileInputStream(file); - try { - return docBuilder.parse(inputStream); - } finally { - inputStream.close(); + try (FileInputStream inputStream = new FileInputStream(file)) { + return docBuilder.parse(inputStream); } } diff --git a/brut.apktool/apktool-lib/src/main/java/org/xmlpull/renamed/MXSerializer.java b/brut.apktool/apktool-lib/src/main/java/org/xmlpull/renamed/MXSerializer.java index 5bfabcda..2d54eda1 100644 --- a/brut.apktool/apktool-lib/src/main/java/org/xmlpull/renamed/MXSerializer.java +++ b/brut.apktool/apktool-lib/src/main/java/org/xmlpull/renamed/MXSerializer.java @@ -69,15 +69,15 @@ public class MXSerializer implements XmlSerializer { protected int depth = 0; // element stack - protected String elNamespace[] = new String[2]; - protected String elName[] = new String[elNamespace.length]; - protected String elPrefix[] = new String[elNamespace.length]; - protected int elNamespaceCount[] = new int[elNamespace.length]; + protected String[] elNamespace = new String[2]; + protected String[] elName = new String[elNamespace.length]; + protected String[] elPrefix = new String[elNamespace.length]; + protected int[] elNamespaceCount = new int[elNamespace.length]; // namespace stack protected int namespaceEnd = 0; - protected String namespacePrefix[] = new String[8]; - protected String namespaceUri[] = new String[namespacePrefix.length]; + protected String[] namespacePrefix = new String[8]; + protected String[] namespaceUri = new String[namespacePrefix.length]; protected boolean finished; protected boolean pastRoot; @@ -92,9 +92,9 @@ public class MXSerializer implements XmlSerializer { // buffer output if needed to write escaped String see text(String) private static final int BUF_LEN = Runtime.getRuntime().freeMemory() > 1000000L ? 8 * 1024 : 256; - protected char buf[] = new char[BUF_LEN]; + protected char[] buf = new char[BUF_LEN]; - protected static final String precomputedPrefixes[]; + protected static final String[] precomputedPrefixes; static { precomputedPrefixes = new String[32]; // arbitrary number ... @@ -103,7 +103,7 @@ public class MXSerializer implements XmlSerializer { } } - private boolean checkNamesInterned = false; + private final boolean checkNamesInterned = false; private void checkInterning(String name) { if (namesInterned && name != name.intern()) { @@ -157,7 +157,7 @@ public class MXSerializer implements XmlSerializer { + elStackSize + " ==> " + newSize); } final boolean needsCopying = elStackSize > 0; - String[] arr = null; + String[] arr; // reuse arr local variable slot arr = new String[newSize]; if (needsCopying) @@ -242,7 +242,7 @@ public class MXSerializer implements XmlSerializer { * requested chnages. */ protected void rebuildIndentationBuf() { - if (doIndent == false) + if (!doIndent) return; final int maxIndent = 65; // hardcoded maximum indentation size in characters int bufSize = 0; @@ -277,7 +277,7 @@ public class MXSerializer implements XmlSerializer { protected void writeIndent() throws IOException { final int start = writeLineSepartor ? 0 : offsetNewLine; - final int level = (depth > maxIndentLevel) ? maxIndentLevel : depth; + final int level = Math.min(depth, maxIndentLevel); out.write(indentationBuf, start, ((level - 1) * indentationJump) + offsetNewLine); } @@ -288,15 +288,19 @@ public class MXSerializer implements XmlSerializer { if (name == null) { throw new IllegalArgumentException("property name can not be null"); } - if (PROPERTY_SERIALIZER_INDENTATION.equals(name)) { - indentationString = (String) value; - } else if (PROPERTY_SERIALIZER_LINE_SEPARATOR.equals(name)) { - lineSeparator = (String) value; - } else if (PROPERTY_LOCATION.equals(name)) { - location = (String) value; - } else { - throw new IllegalStateException("unsupported property " + name); - } + switch (name) { + case PROPERTY_SERIALIZER_INDENTATION: + indentationString = (String) value; + break; + case PROPERTY_SERIALIZER_LINE_SEPARATOR: + lineSeparator = (String) value; + break; + case PROPERTY_LOCATION: + location = (String) value; + break; + default: + throw new IllegalStateException("unsupported property " + name); + } writeLineSepartor = lineSeparator != null && lineSeparator.length() > 0; writeIndentation = indentationString != null && indentationString.length() > 0; @@ -314,15 +318,16 @@ public class MXSerializer implements XmlSerializer { if (name == null) { throw new IllegalArgumentException("property name can not be null"); } - if (PROPERTY_SERIALIZER_INDENTATION.equals(name)) { - return indentationString; - } else if (PROPERTY_SERIALIZER_LINE_SEPARATOR.equals(name)) { - return lineSeparator; - } else if (PROPERTY_LOCATION.equals(name)) { - return location; - } else { - return null; - } + switch (name) { + case PROPERTY_SERIALIZER_INDENTATION: + return indentationString; + case PROPERTY_SERIALIZER_LINE_SEPARATOR: + return lineSeparator; + case PROPERTY_LOCATION: + return location; + default: + return null; + } } private String getLocation() { @@ -370,7 +375,7 @@ public class MXSerializer implements XmlSerializer { if (standalone != null) { out.write(" standalone="); out.write(attributeUseApostrophe ? '\'' : '"'); - if (standalone.booleanValue()) { + if (standalone) { out.write("yes"); } else { out.write("no"); @@ -462,9 +467,9 @@ public class MXSerializer implements XmlSerializer { continue; // now check that prefix is still in scope for (int p = namespaceEnd - 1; p > i; --p) { - if (prefix == namespacePrefix[p]) - continue; // too bad - prefix is redeclared with different namespace - } + if (prefix == namespacePrefix[p]) { + } // too bad - prefix is redeclared with different namespace + } return prefix; } } @@ -487,8 +492,8 @@ public class MXSerializer implements XmlSerializer { // make sure this prefix is not declared in any scope (avoid hiding in-scope prefixes)! for (int i = namespaceEnd - 1; i >= 0; --i) { if (prefix == namespacePrefix[i]) { - continue; // prefix is already declared - generate new and try again - } + // prefix is already declared - generate new and try again + } } // declare prefix @@ -713,8 +718,7 @@ public class MXSerializer implements XmlSerializer { if (startTagIncomplete) { writeNamespaceDeclarations(); out.write(" />"); // space is added to make it easier to work in XHTML!!! - --depth; - } else { + } else { if (doIndent && seenTag) { writeIndent(); } @@ -726,9 +730,9 @@ public class MXSerializer implements XmlSerializer { } out.write(name); out.write('>'); - --depth; - } - namespaceEnd = elNamespaceCount[depth]; + } + --depth; + namespaceEnd = elNamespaceCount[depth]; startTagIncomplete = false; seenTag = true; return this; @@ -1009,7 +1013,7 @@ public class MXSerializer implements XmlSerializer { } } - protected static final String printable(String s) { + protected static String printable(String s) { if (s == null) { return "null"; } @@ -1022,7 +1026,7 @@ public class MXSerializer implements XmlSerializer { return retval.toString(); } - protected static final String printable(char ch) { + protected static String printable(char ch) { StringBuffer retval = new StringBuffer(); addPrintable(retval, ch); return retval.toString(); @@ -1049,7 +1053,7 @@ public class MXSerializer implements XmlSerializer { retval.append("\\\""); break; case '\'': - retval.append("\\\'"); + retval.append("\\'"); break; case '\\': retval.append("\\\\"); @@ -1057,7 +1061,7 @@ public class MXSerializer implements XmlSerializer { default: if (ch < 0x20 || ch > 0x7e) { final String ss = "0000" + Integer.toString(ch, 16); - retval.append("\\u" + ss.substring(ss.length() - 4)); + retval.append("\\u").append(ss.substring(ss.length() - 4)); } else { retval.append(ch); } diff --git a/brut.apktool/apktool-lib/src/test/java/brut/androlib/TestUtils.java b/brut.apktool/apktool-lib/src/test/java/brut/androlib/TestUtils.java index 5a6af68d..3fcdf2f5 100644 --- a/brut.apktool/apktool-lib/src/test/java/brut/androlib/TestUtils.java +++ b/brut.apktool/apktool-lib/src/test/java/brut/androlib/TestUtils.java @@ -45,7 +45,7 @@ public abstract class TestUtils { int eventType; String key = null; - Map map = new HashMap(); + Map map = new HashMap<>(); while ((eventType = xpp.next()) != XmlPullParser.END_DOCUMENT) { switch (eventType) { case XmlPullParser.START_TAG: @@ -78,14 +78,14 @@ public abstract class TestUtils { } } - public static void copyResourceDir(Class class_, String dirPath, File out) throws BrutException { + public static void copyResourceDir(Class class_, String dirPath, File out) throws BrutException { if (!out.exists()) { out.mkdirs(); } copyResourceDir(class_, dirPath, new FileDirectory(out)); } - public static void copyResourceDir(Class class_, String dirPath, Directory out) throws BrutException { + public static void copyResourceDir(Class class_, String dirPath, Directory out) throws BrutException { if (class_ == null) { class_ = Class.class; } diff --git a/brut.apktool/apktool-lib/src/test/java/brut/androlib/aapt1/BuildAndDecodeTest.java b/brut.apktool/apktool-lib/src/test/java/brut/androlib/aapt1/BuildAndDecodeTest.java index 414cda2f..4cddd7b5 100644 --- a/brut.apktool/apktool-lib/src/test/java/brut/androlib/aapt1/BuildAndDecodeTest.java +++ b/brut.apktool/apktool-lib/src/test/java/brut/androlib/aapt1/BuildAndDecodeTest.java @@ -176,7 +176,7 @@ public class BuildAndDecodeTest extends BaseTest { public void storedMp3FilesAreNotCompressedTest() throws BrutException { ExtFile extFile = new ExtFile(sTmpDir, "testapp.apk"); Integer built = extFile.getDirectory().getCompressionLevel("res/raw/rain.mp3"); - assertEquals(new Integer(0), built); + assertEquals(Integer.valueOf(0), built); } @Test diff --git a/brut.apktool/apktool-lib/src/test/java/brut/androlib/aapt1/UnknownCompressionTest.java b/brut.apktool/apktool-lib/src/test/java/brut/androlib/aapt1/UnknownCompressionTest.java index d0d96bbe..c92f093a 100644 --- a/brut.apktool/apktool-lib/src/test/java/brut/androlib/aapt1/UnknownCompressionTest.java +++ b/brut.apktool/apktool-lib/src/test/java/brut/androlib/aapt1/UnknownCompressionTest.java @@ -79,7 +79,7 @@ public class UnknownCompressionTest extends BaseTest { // Check that control = rebuilt (both stored) // Add extra check for checking = 0 to enforce check for stored just in case control breaks assertEquals(control, rebuilt); - assertEquals(new Integer(0), rebuilt); + assertEquals(Integer.valueOf(0), rebuilt); } @Test @@ -88,7 +88,7 @@ public class UnknownCompressionTest extends BaseTest { Integer rebuilt = sTestNewDir.getDirectory().getCompressionLevel("test.json"); assertEquals(control, rebuilt); - assertEquals(new Integer(8), rebuilt); + assertEquals(Integer.valueOf(8), rebuilt); } @Test @@ -97,6 +97,6 @@ public class UnknownCompressionTest extends BaseTest { Integer rebuilt = sTestNewDir.getDirectory().getCompressionLevel("950x150.png"); assertEquals(control, rebuilt); - assertEquals(new Integer(8), rebuilt); + assertEquals(Integer.valueOf(8), rebuilt); } } diff --git a/brut.apktool/apktool-lib/src/test/java/brut/androlib/decode/DecodeKotlinCoroutinesTest.java b/brut.apktool/apktool-lib/src/test/java/brut/androlib/decode/DecodeKotlinCoroutinesTest.java index 5a4cc7cf..1ec3631e 100644 --- a/brut.apktool/apktool-lib/src/test/java/brut/androlib/decode/DecodeKotlinCoroutinesTest.java +++ b/brut.apktool/apktool-lib/src/test/java/brut/androlib/decode/DecodeKotlinCoroutinesTest.java @@ -33,7 +33,7 @@ import java.nio.file.Paths; import static org.junit.Assert.assertTrue; public class DecodeKotlinCoroutinesTest extends BaseTest { - private static String apk = "test-kotlin-coroutines.apk"; + private static final String apk = "test-kotlin-coroutines.apk"; @BeforeClass public static void beforeClass() throws Exception { diff --git a/brut.j.dir/src/main/java/brut/directory/AbstractDirectory.java b/brut.j.dir/src/main/java/brut/directory/AbstractDirectory.java index c42b27ff..a242b6f4 100644 --- a/brut.j.dir/src/main/java/brut/directory/AbstractDirectory.java +++ b/brut.j.dir/src/main/java/brut/directory/AbstractDirectory.java @@ -272,8 +272,8 @@ public abstract class AbstractDirectory implements Directory { private class ParsedPath { - public String dir; - public String subpath; + public final String dir; + public final String subpath; public ParsedPath(String dir, String subpath) { this.dir = dir; this.subpath = subpath; @@ -281,8 +281,8 @@ public abstract class AbstractDirectory implements Directory { } private class SubPath { - public AbstractDirectory dir; - public String path; + public final AbstractDirectory dir; + public final String path; public SubPath(AbstractDirectory dir, String path) { this.dir = dir; diff --git a/brut.j.dir/src/main/java/brut/directory/DirUtil.java b/brut.j.dir/src/main/java/brut/directory/DirUtil.java index 076d8cc8..b22735a9 100644 --- a/brut.j.dir/src/main/java/brut/directory/DirUtil.java +++ b/brut.j.dir/src/main/java/brut/directory/DirUtil.java @@ -41,8 +41,8 @@ public class DirUtil { public static void copyToDir(Directory in, Directory out, String[] fileNames) throws DirectoryException { - for (int i = 0; i < fileNames.length; i++) { - copyToDir(in, out, fileNames[i]); + for (String fileName : fileNames) { + copyToDir(in, out, fileName); } } @@ -73,8 +73,8 @@ public class DirUtil { public static void copyToDir(Directory in, File out, String[] fileNames) throws DirectoryException { - for (int i = 0; i < fileNames.length; i++) { - copyToDir(in, out, fileNames[i]); + for (String fileName : fileNames) { + copyToDir(in, out, fileName); } } diff --git a/brut.j.dir/src/main/java/brut/directory/Directory.java b/brut.j.dir/src/main/java/brut/directory/Directory.java index e29e0742..c0828b37 100644 --- a/brut.j.dir/src/main/java/brut/directory/Directory.java +++ b/brut.j.dir/src/main/java/brut/directory/Directory.java @@ -21,41 +21,41 @@ import java.util.Map; import java.util.Set; public interface Directory { - public Set getFiles(); - public Set getFiles(boolean recursive); - public Map getDirs(); - public Map getDirs(boolean recursive); + Set getFiles(); + Set getFiles(boolean recursive); + Map getDirs(); + Map getDirs(boolean recursive); - public boolean containsFile(String path); - public boolean containsDir(String path); + boolean containsFile(String path); + boolean containsDir(String path); - public InputStream getFileInput(String path) throws DirectoryException; - public OutputStream getFileOutput(String path) throws DirectoryException; - public Directory getDir(String path) throws PathNotExist; - public Directory createDir(String path) throws DirectoryException; + InputStream getFileInput(String path) throws DirectoryException; + OutputStream getFileOutput(String path) throws DirectoryException; + Directory getDir(String path) throws PathNotExist; + Directory createDir(String path) throws DirectoryException; - public boolean removeFile(String path); + boolean removeFile(String path); - public void copyToDir(Directory out) throws DirectoryException; - public void copyToDir(Directory out, String[] fileNames) + void copyToDir(Directory out) throws DirectoryException; + void copyToDir(Directory out, String[] fileNames) throws DirectoryException; - public void copyToDir(Directory out, String fileName) + void copyToDir(Directory out, String fileName) throws DirectoryException; - public void copyToDir(File out) throws DirectoryException; - public void copyToDir(File out, String[] fileNames) + void copyToDir(File out) throws DirectoryException; + void copyToDir(File out, String[] fileNames) throws DirectoryException; - public void copyToDir(File out, String fileName) + void copyToDir(File out, String fileName) throws DirectoryException; - public long getSize(String fileName) + long getSize(String fileName) throws DirectoryException; - public long getCompressedSize(String fileName) + long getCompressedSize(String fileName) throws DirectoryException; - public int getCompressionLevel(String fileName) + int getCompressionLevel(String fileName) throws DirectoryException; - public void close() throws IOException; + void close() throws IOException; - public final char separator = '/'; + char separator = '/'; } diff --git a/brut.j.dir/src/main/java/brut/directory/FileDirectory.java b/brut.j.dir/src/main/java/brut/directory/FileDirectory.java index 4982e07e..497c5e25 100644 --- a/brut.j.dir/src/main/java/brut/directory/FileDirectory.java +++ b/brut.j.dir/src/main/java/brut/directory/FileDirectory.java @@ -22,7 +22,7 @@ import java.util.LinkedHashMap; import java.util.LinkedHashSet; public class FileDirectory extends AbstractDirectory { - private File mDir; + private final File mDir; public FileDirectory(ExtFile dir, String folder) throws DirectoryException { this(new File(dir.toString().replaceAll("%20", " "), folder)); @@ -101,19 +101,18 @@ public class FileDirectory extends AbstractDirectory { } private void loadAll() { - mFiles = new LinkedHashSet(); - mDirs = new LinkedHashMap(); + mFiles = new LinkedHashSet<>(); + mDirs = new LinkedHashMap<>(); File[] files = getDir().listFiles(); - for (int i = 0; i < files.length; i++) { - File file = files[i]; + for (File file : files) { if (file.isFile()) { mFiles.add(file.getName()); } else { // IMPOSSIBLE_EXCEPTION try { mDirs.put(file.getName(), new FileDirectory(file)); - } catch (DirectoryException e) {} + } catch (DirectoryException ignored) {} } } } diff --git a/brut.j.dir/src/main/java/brut/directory/ZipRODirectory.java b/brut.j.dir/src/main/java/brut/directory/ZipRODirectory.java index fe497f32..b6072abe 100644 --- a/brut.j.dir/src/main/java/brut/directory/ZipRODirectory.java +++ b/brut.j.dir/src/main/java/brut/directory/ZipRODirectory.java @@ -27,8 +27,8 @@ import java.util.zip.ZipEntry; import java.util.zip.ZipFile; public class ZipRODirectory extends AbstractDirectory { - private ZipFile mZipFile; - private String mPath; + private final ZipFile mZipFile; + private final String mPath; public ZipRODirectory(String zipFileName) throws DirectoryException { this(zipFileName, ""); @@ -129,8 +129,8 @@ public class ZipRODirectory extends AbstractDirectory { } private void loadAll() { - mFiles = new LinkedHashSet(); - mDirs = new LinkedHashMap(); + mFiles = new LinkedHashSet<>(); + mDirs = new LinkedHashMap<>(); int prefixLen = getPath().length(); Enumeration entries = getZipFile().entries(); diff --git a/brut.j.util/src/main/java/brut/util/BrutIO.java b/brut.j.util/src/main/java/brut/util/BrutIO.java index 1d9fb116..76432638 100644 --- a/brut.j.util/src/main/java/brut/util/BrutIO.java +++ b/brut.j.util/src/main/java/brut/util/BrutIO.java @@ -41,8 +41,8 @@ public class BrutIO { public static long recursiveModifiedTime(File[] files) { long modified = 0; - for (int i = 0; i < files.length; i++) { - long submodified = recursiveModifiedTime(files[i]); + for (File file : files) { + long submodified = recursiveModifiedTime(file); if (submodified > modified) { modified = submodified; } @@ -54,8 +54,8 @@ public class BrutIO { long modified = file.lastModified(); if (file.isDirectory()) { File[] subfiles = file.listFiles(); - for (int i = 0; i < subfiles.length; i++) { - long submodified = recursiveModifiedTime(subfiles[i]); + for (File subfile : subfiles) { + long submodified = recursiveModifiedTime(subfile); if (submodified > modified) { modified = submodified; } diff --git a/brut.j.util/src/main/java/brut/util/Duo.java b/brut.j.util/src/main/java/brut/util/Duo.java index a6330d7e..f37854d9 100644 --- a/brut.j.util/src/main/java/brut/util/Duo.java +++ b/brut.j.util/src/main/java/brut/util/Duo.java @@ -16,6 +16,8 @@ */ package brut.util; +import java.util.Objects; + public class Duo { public final T1 m1; public final T2 m2; @@ -34,13 +36,10 @@ public class Duo { return false; } final Duo other = (Duo) obj; - if (this.m1 != other.m1 && (this.m1 == null || !this.m1.equals(other.m1))) { + if (!Objects.equals(this.m1, other.m1)) { return false; } - if (this.m2 != other.m2 && (this.m2 == null || !this.m2.equals(other.m2))) { - return false; - } - return true; + return Objects.equals(this.m2, other.m2); } @Override diff --git a/brut.j.util/src/main/java/brut/util/ExtDataInput.java b/brut.j.util/src/main/java/brut/util/ExtDataInput.java index fae10435..7d6a8468 100644 --- a/brut.j.util/src/main/java/brut/util/ExtDataInput.java +++ b/brut.j.util/src/main/java/brut/util/ExtDataInput.java @@ -80,9 +80,9 @@ public class ExtDataInput extends DataInputDelegate { */ public final int skipBytes(int n) throws IOException { int total = 0; - int cur = 0; + int cur; - while ((total < n) && ((cur = (int) super.skipBytes(n - total)) > 0)) { + while ((total < n) && ((cur = super.skipBytes(n - total)) > 0)) { total += cur; } diff --git a/brut.j.util/src/main/java/brut/util/Jar.java b/brut.j.util/src/main/java/brut/util/Jar.java index 54409dd9..16146093 100644 --- a/brut.j.util/src/main/java/brut/util/Jar.java +++ b/brut.j.util/src/main/java/brut/util/Jar.java @@ -27,7 +27,7 @@ import java.util.concurrent.ThreadLocalRandom; public abstract class Jar { private static final Map mExtracted = new HashMap<>(); - public static File getResourceAsFile(String name, Class clazz) throws BrutException { + public static File getResourceAsFile(String name, Class clazz) throws BrutException { File file = mExtracted.get(name); if (file == null) { file = extractToTmp(name, clazz); @@ -36,11 +36,11 @@ public abstract class Jar { return file; } - public static File extractToTmp(String resourcePath, Class clazz) throws BrutException { + public static File extractToTmp(String resourcePath, Class clazz) throws BrutException { return extractToTmp(resourcePath, "brut_util_Jar_", clazz); } - public static File extractToTmp(String resourcePath, String tmpPrefix, Class clazz) throws BrutException { + public static File extractToTmp(String resourcePath, String tmpPrefix, Class clazz) throws BrutException { try { InputStream in = clazz.getResourceAsStream(resourcePath); if (in == null) {