This is an automated email from the ASF dual-hosted git repository. ggregory pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/commons-compress.git
The following commit(s) were added to refs/heads/master by this push: new d2221e6bc Javadoc d2221e6bc is described below commit d2221e6bc9364432077f5818a17a8af28958cc72 Author: Gary D. Gregory <garydgreg...@gmail.com> AuthorDate: Sat Jan 25 09:26:21 2025 -0500 Javadoc - Reuse StringUtils.isEmpty() - Local variable name are lower case --- .../harmony/unpack200/AttributeLayout.java | 126 ++++++++++++++++----- .../harmony/unpack200/SegmentConstantPool.java | 67 ++++++++++- 2 files changed, 160 insertions(+), 33 deletions(-) diff --git a/src/main/java/org/apache/commons/compress/harmony/unpack200/AttributeLayout.java b/src/main/java/org/apache/commons/compress/harmony/unpack200/AttributeLayout.java index afa0c763f..eeac65470 100644 --- a/src/main/java/org/apache/commons/compress/harmony/unpack200/AttributeLayout.java +++ b/src/main/java/org/apache/commons/compress/harmony/unpack200/AttributeLayout.java @@ -21,9 +21,10 @@ import org.apache.commons.compress.harmony.pack200.Codec; import org.apache.commons.compress.harmony.pack200.Pack200Exception; import org.apache.commons.compress.harmony.unpack200.bytecode.ClassFileEntry; +import org.apache.commons.lang3.StringUtils; /** - * AttributeLayout defines a layout that describes how an attribute will be transmitted. + * Defines a layout that describes how an attribute will be transmitted. */ public class AttributeLayout implements IMatcher { @@ -127,10 +128,6 @@ public class AttributeLayout implements IMatcher { */ public static final String ATTRIBUTE_DEPRECATED = "Deprecated"; //$NON-NLS-1$ - /** - * {@value} - */ - /** * {@value} */ @@ -217,32 +214,32 @@ public class AttributeLayout implements IMatcher { public static final String[] contextNames = { "Class", "Field", "Method", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ "Code", }; //$NON-NLS-1$ - private static ClassFileEntry getValue(final String layout, long value, final SegmentConstantPool pool) throws Pack200Exception { + private static ClassFileEntry getValue(final String layout, long longIndex, final SegmentConstantPool pool) throws Pack200Exception { if (layout.startsWith("R")) { //$NON-NLS-1$ // references if (layout.indexOf('N') != -1) { - value--; + longIndex--; } if (layout.startsWith("RU")) { //$NON-NLS-1$ - return pool.getValue(SegmentConstantPool.UTF_8, value); + return pool.getValue(SegmentConstantPool.UTF_8, longIndex); } if (layout.startsWith("RS")) { //$NON-NLS-1$ - return pool.getValue(SegmentConstantPool.SIGNATURE, value); + return pool.getValue(SegmentConstantPool.SIGNATURE, longIndex); } } else if (layout.startsWith("K")) { //$NON-NLS-1$ final char type = layout.charAt(1); switch (type) { case 'S': // String - return pool.getValue(SegmentConstantPool.CP_STRING, value); + return pool.getValue(SegmentConstantPool.CP_STRING, longIndex); case 'I': // Int (or byte or short) case 'C': // Char - return pool.getValue(SegmentConstantPool.CP_INT, value); + return pool.getValue(SegmentConstantPool.CP_INT, longIndex); case 'F': // Float - return pool.getValue(SegmentConstantPool.CP_FLOAT, value); + return pool.getValue(SegmentConstantPool.CP_FLOAT, longIndex); case 'J': // Long - return pool.getValue(SegmentConstantPool.CP_LONG, value); + return pool.getValue(SegmentConstantPool.CP_LONG, longIndex); case 'D': // Double - return pool.getValue(SegmentConstantPool.CP_DOUBLE, value); + return pool.getValue(SegmentConstantPool.CP_DOUBLE, longIndex); } } throw new Pack200Exception("Unknown layout encoding: " + layout); @@ -263,10 +260,10 @@ private static ClassFileEntry getValue(final String layout, long value, final Se /** * Constructs a default AttributeLayout (equivalent to {@code new AttributeLayout(name, context, layout, index, true);}) * - * @param name TODO - * @param context TODO - * @param layout TODO - * @param index TODO + * @param name The layout name. + * @param context One of {@link #CONTEXT_CLASS}, {@link #CONTEXT_CODE}, {@link #CONTEXT_FIELD}, {@link #CONTEXT_METHOD}. + * @param layout The layout. + * @param index The index, currently used as part of computing the hash code. * @throws Pack200Exception Attribute context out of range. * @throws Pack200Exception Cannot have a null layout. * @throws Pack200Exception Cannot have an unnamed layout. @@ -275,6 +272,18 @@ public AttributeLayout(final String name, final int context, final String layout this(name, context, layout, index, true); } + /** + * Constructs a default AttributeLayout (equivalent to {@code new AttributeLayout(name, context, layout, index, true);}) + * + * @param name The layout name. + * @param context One of {@link #CONTEXT_CLASS}, {@link #CONTEXT_CODE}, {@link #CONTEXT_FIELD}, {@link #CONTEXT_METHOD}. + * @param layout The layout. + * @param index The index, currently used as part of computing the hash code. + * @param isDefault Whether this is the default layout. + * @throws Pack200Exception Attribute context out of range. + * @throws Pack200Exception Cannot have a null layout. + * @throws Pack200Exception Cannot have an unnamed layout. + */ public AttributeLayout(final String name, final int context, final String layout, final int index, final boolean isDefault) throws Pack200Exception { this.index = index; this.context = context; @@ -289,7 +298,7 @@ public AttributeLayout(final String name, final int context, final String layout if (layout == null) { throw new Pack200Exception("Cannot have a null layout"); } - if (name == null || name.length() == 0) { + if (StringUtils.isEmpty(name)) { throw new Pack200Exception("Cannot have an unnamed layout"); } this.name = name; @@ -297,6 +306,11 @@ public AttributeLayout(final String name, final int context, final String layout this.isDefault = isDefault; } + /** + * Gets the Codec based on the layout. + * + * @return the Codec. + */ public Codec getCodec() { if (layout.indexOf('O') >= 0) { return Codec.BRANCH5; @@ -314,55 +328,97 @@ public Codec getCodec() { return Codec.UNSIGNED5; } + /** + * Gets the context. + * + * @return the context. + */ public int getContext() { return context; } + /** + * Gets the index. + * + * @return the index. + */ public int getIndex() { return index; } + /** + * Gets the layout. + * + * @return the layout. + */ public String getLayout() { return layout; } + /** + * Gets the name. + * + * @return the name. + */ public String getName() { return name; } - public ClassFileEntry getValue(final long value, final SegmentConstantPool pool) throws Pack200Exception { - return getValue(layout, value, pool); + /** + * Gets the ClassFileEntry for the given input. + * + * @param longIndex An index into the segment constant pool. + * @param pool the segment constant pool. + * @return the matching ClassFileEntry. + * @throws Pack200Exception if the input is invalid. + */ + public ClassFileEntry getValue(final long longIndex, final SegmentConstantPool pool) throws Pack200Exception { + return getValue(layout, longIndex, pool); } - public ClassFileEntry getValue(final long value, final String type, final SegmentConstantPool pool) throws Pack200Exception { + /** + * Gets the ClassFileEntry for the given input. + * + * @param longIndex An index into the segment constant pool. + * @param type the Java type signature. + * @param pool the segment constant pool. + * @return the matching ClassFileEntry. + * @throws Pack200Exception if the input is invalid. + */ + public ClassFileEntry getValue(final long longIndex, final String type, final SegmentConstantPool pool) throws Pack200Exception { // TODO This really needs to be better tested, esp. the different types // TODO This should have the ability to deal with RUN stuff too, and // unions if (!layout.startsWith("KQ")) { - return getValue(layout, value, pool); + return getValue(layout, longIndex, pool); } if (type.equals("Ljava/lang/String;")) { //$NON-NLS-1$ - return getValue("KS", value, pool); + return getValue("KS", longIndex, pool); } - return getValue("K" + type + layout.substring(2), value, //$NON-NLS-1$ + return getValue("K" + type + layout.substring(2), longIndex, //$NON-NLS-1$ pool); } @Override public int hashCode() { - final int PRIME = 31; + final int prime = 31; int r = 1; if (name != null) { - r = r * PRIME + name.hashCode(); + r = r * prime + name.hashCode(); } if (layout != null) { - r = r * PRIME + layout.hashCode(); + r = r * prime + layout.hashCode(); } - r = r * PRIME + index; - r = r * PRIME + context; + r = r * prime + index; + r = r * prime + context; return r; } + /** + * Tests whether this is the default layout. + * + * @return whether this is the default layout. + */ public boolean isDefaultLayout() { return isDefault; } @@ -377,6 +433,11 @@ public boolean matches(final long value) { return (value & mask) != 0; } + /** + * Gets the backward call count. + * + * @return the backward call count. + */ public int numBackwardsCallables() { if ("*".equals(layout)) { return 1; @@ -384,6 +445,11 @@ public int numBackwardsCallables() { return backwardsCallCount; } + /** + * Sets the backward call count. + * + * @param backwardsCallCount the backward call count. + */ public void setBackwardsCallCount(final int backwardsCallCount) { this.backwardsCallCount = backwardsCallCount; } diff --git a/src/main/java/org/apache/commons/compress/harmony/unpack200/SegmentConstantPool.java b/src/main/java/org/apache/commons/compress/harmony/unpack200/SegmentConstantPool.java index eb71f350a..17fa7268b 100644 --- a/src/main/java/org/apache/commons/compress/harmony/unpack200/SegmentConstantPool.java +++ b/src/main/java/org/apache/commons/compress/harmony/unpack200/SegmentConstantPool.java @@ -25,29 +25,90 @@ import org.apache.commons.compress.harmony.unpack200.bytecode.ConstantPoolEntry; /** - * SegmentConstantPool manages the constant pool used for re-creating class files. + * Manages the constant pool used for re-creating class files. */ public class SegmentConstantPool { + /** + * Value {@value}. + */ public static final int ALL = 0; + + /** + * Value {@value}. + */ public static final int UTF_8 = 1; + /** + * Value {@value}. + */ public static final int CP_INT = 2; // define in archive order + /** + * Value {@value}. + */ public static final int CP_FLOAT = 3; + + /** + * Value {@value}. + */ public static final int CP_LONG = 4; + + /** + * Value {@value}. + */ public static final int CP_DOUBLE = 5; + + /** + * Value {@value}. + */ public static final int CP_STRING = 6; + + /** + * Value {@value}. + */ public static final int CP_CLASS = 7; + + /** + * Value {@value}. + */ public static final int SIGNATURE = 8; // TODO and more to come -- + + /** + * Value {@value}. + */ public static final int CP_DESCR = 9; + + /** + * Value {@value}. + */ public static final int CP_FIELD = 10; + + /** + * Value {@value}. + */ public static final int CP_METHOD = 11; + + /** + * Value {@value}. + */ public static final int CP_IMETHOD = 12; + + /** + * Value {@value}. + */ protected static final String REGEX_MATCH_ALL = ".*"; + + /** + * Value {@value}. + */ protected static final String INITSTRING = "<init>"; + + /** + * Value {@value}. + */ protected static final String REGEX_MATCH_INIT = "^" + INITSTRING + ".*"; /** @@ -194,8 +255,8 @@ public ConstantPoolEntry getInitMethodPoolEntry(final int cp, final long value, return getConstantPoolEntry(cp, realIndex); } - public ClassFileEntry getValue(final int cp, final long value) throws Pack200Exception { - final int index = (int) value; + public ClassFileEntry getValue(final int cp, final long longIndex) throws Pack200Exception { + final int index = (int) longIndex; if (index == -1) { return null; }