You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by gg...@apache.org on 2022/11/20 19:55:06 UTC
[commons-bcel] 01/02: Add org.apache.bcel.classfile.Utility.packageToPath(String)
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-bcel.git
commit 2dff910b71f42b4a3e35acd5fdf42891c9f8af85
Author: Gary David Gregory (Code signing key) <gg...@apache.org>
AuthorDate: Sun Nov 20 14:51:25 2022 -0500
Add org.apache.bcel.classfile.Utility.packageToPath(String)
---
src/changes/changes.xml | 1 +
src/examples/Helloify.java | 2 +-
src/examples/JasminVisitor.java | 10 +++++-----
src/examples/Package.java | 5 +++--
src/main/java/org/apache/bcel/classfile/JavaClass.java | 2 +-
src/main/java/org/apache/bcel/classfile/Utility.java | 13 ++++++++++++-
src/main/java/org/apache/bcel/generic/CPInstruction.java | 3 ++-
src/main/java/org/apache/bcel/generic/ConstantPoolGen.java | 4 ++--
.../java/org/apache/bcel/generic/InvokeInstruction.java | 2 +-
src/main/java/org/apache/bcel/generic/ObjectType.java | 2 +-
src/main/java/org/apache/bcel/util/ClassLoader.java | 2 +-
.../java/org/apache/bcel/util/ClassLoaderRepository.java | 3 ++-
src/main/java/org/apache/bcel/util/ClassPath.java | 13 +++++--------
.../org/apache/bcel/verifier/statics/Pass2Verifier.java | 2 +-
src/test/java/org/apache/bcel/AbstractTestCase.java | 3 ++-
.../java/org/apache/bcel/verifier/tests/TestCreator.java | 3 ++-
16 files changed, 42 insertions(+), 28 deletions(-)
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index d1557b31..533b2946 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -70,6 +70,7 @@ The <action> type attribute can be add,update,fix,remove.
<action type="add" dev="ggregory" due-to="Gary Gregory">Add org.apache.bcel.util.Args.</action>
<action type="add" dev="ggregory" due-to="Gary Gregory">Add org.apache.bcel.generic.ArrayType.getClassName().</action>
<action type="add" dev="ggregory" due-to="Gary Gregory">Add org.apache.bcel.generic.Type.getClassName().</action>
+ <action type="add" dev="ggregory" due-to="Gary Gregory">Add org.apache.bcel.classfile.Utility.packageToPath(String).</action>
<action type="add" dev="ggregory" due-to="Gary Gregory, Mark Roberts">org.apache.bcel.classfile.MethodParameter now implements org.apache.bcel.classfile.Node.</action>
<!-- FIX -->
<action type="fix" dev="ggregory" due-to="nbauma109, Gary Gregory">Typo in SimpleElementValue error message #161.</action>
diff --git a/src/examples/Helloify.java b/src/examples/Helloify.java
index ffff812a..8ffe46bd 100644
--- a/src/examples/Helloify.java
+++ b/src/examples/Helloify.java
@@ -51,7 +51,7 @@ public final class Helloify {
int index = javaClass.getClassNameIndex();
index = ((ConstantClass) cp.getConstant(index)).getNameIndex();
- cp.setConstant(index, new ConstantUtf8(className.replace('.', '/')));
+ cp.setConstant(index, new ConstantUtf8(Utility.packageToPath(className)));
}
/**
diff --git a/src/examples/JasminVisitor.java b/src/examples/JasminVisitor.java
index 66925ab0..e58e45de 100644
--- a/src/examples/JasminVisitor.java
+++ b/src/examples/JasminVisitor.java
@@ -251,7 +251,7 @@ public class JasminVisitor extends org.apache.bcel.classfile.EmptyVisitor {
for (final CodeExceptionGen c : ehs) {
final ObjectType caught = c.getCatchType();
final String className = caught == null ? // catch any exception, used when compiling finally
- "all" : caught.getClassName().replace('.', '/');
+ "all" : Utility.packageToPath(caught.getClassName());
out.println(".catch " + className + " from " + get(c.getStartPC()) + " to " + get(c.getEndPC()) + " using " + get(c.getHandlerPC()));
}
@@ -272,7 +272,7 @@ public class JasminVisitor extends org.apache.bcel.classfile.EmptyVisitor {
@Override
public void visitExceptionTable(final ExceptionTable e) {
for (final String name : e.getExceptionNames()) {
- out.println(".throws " + name.replace('.', '/'));
+ out.println(".throws " + Utility.packageToPath(name));
}
printEndMethod(e);
@@ -294,11 +294,11 @@ public class JasminVisitor extends org.apache.bcel.classfile.EmptyVisitor {
out.println(".source " + clazz.getSourceFileName());
out.println("." + Utility.classOrInterface(clazz.getAccessFlags()) + " " + Utility.accessToString(clazz.getAccessFlags(), true) + " "
- + clazz.getClassName().replace('.', '/'));
- out.println(".super " + clazz.getSuperclassName().replace('.', '/'));
+ + Utility.packageToPath(clazz.getClassName()));
+ out.println(".super " + Utility.packageToPath(clazz.getSuperclassName()));
for (final String iface : clazz.getInterfaceNames()) {
- out.println(".implements " + iface.replace('.', '/'));
+ out.println(".implements " + Utility.packageToPath(iface));
}
out.print("\n");
diff --git a/src/examples/Package.java b/src/examples/Package.java
index 5c6bafab..484b0072 100644
--- a/src/examples/Package.java
+++ b/src/examples/Package.java
@@ -33,6 +33,7 @@ import org.apache.bcel.classfile.ConstantClass;
import org.apache.bcel.classfile.ConstantPool;
import org.apache.bcel.classfile.ConstantUtf8;
import org.apache.bcel.classfile.JavaClass;
+import org.apache.bcel.classfile.Utility;
import org.apache.bcel.util.ClassPath;
/**
@@ -139,7 +140,7 @@ public class Package {
* in allClasses
*/
void addDependents(final JavaClass clazz) throws IOException {
- final String name = clazz.getClassName().replace('.', '/');
+ final String name = Utility.packageToPath(clazz.getClassName());
allClasses.put(name, clazz);
final ConstantPool pool = clazz.getConstantPool();
for (int i = 1; i < pool.getLength(); i++) {
@@ -176,7 +177,7 @@ public class Package {
if (clName.endsWith(JavaClass.EXTENSION)) {
clName = clName.substring(0, clName.length() - JavaClass.EXTENSION.length());
}
- clName = clName.replace('.', '/');
+ clName = Utility.packageToPath(clName);
try (final InputStream inputStream = classPath.getInputStream(clName)) {
clazz = new ClassParser(inputStream, clName).parse();
}
diff --git a/src/main/java/org/apache/bcel/classfile/JavaClass.java b/src/main/java/org/apache/bcel/classfile/JavaClass.java
index 4094a60a..d55cc1ba 100644
--- a/src/main/java/org/apache/bcel/classfile/JavaClass.java
+++ b/src/main/java/org/apache/bcel/classfile/JavaClass.java
@@ -586,7 +586,7 @@ public class JavaClass extends AccessFlags implements Cloneable, Node, Comparabl
public String getSourceFilePath() {
final StringBuilder outFileName = new StringBuilder();
if (!packageName.isEmpty()) {
- outFileName.append(packageName.replace('.', '/'));
+ outFileName.append(Utility.packageToPath(packageName));
outFileName.append('/');
}
outFileName.append(sourceFileName);
diff --git a/src/main/java/org/apache/bcel/classfile/Utility.java b/src/main/java/org/apache/bcel/classfile/Utility.java
index 9953bba0..0bf064ae 100644
--- a/src/main/java/org/apache/bcel/classfile/Utility.java
+++ b/src/main/java/org/apache/bcel/classfile/Utility.java
@@ -825,7 +825,7 @@ public abstract class Utility {
}
}
if (!found) {
- buf.append('L').append(type.replace('.', '/')).append(';');
+ buf.append('L').append(packageToPath(type)).append(';');
}
return buf.toString();
}
@@ -1030,6 +1030,17 @@ public abstract class Utility {
return buf.toString();
}
+ /**
+ * Converts '.'s to '/'s.
+ *
+ * @param name Source
+ * @return converted value
+ * @since 6.7.0
+ */
+ public static String packageToPath(final String name) {
+ return name.replace('.', '/');
+ }
+
/**
* Converts a path to a package name.
*
diff --git a/src/main/java/org/apache/bcel/generic/CPInstruction.java b/src/main/java/org/apache/bcel/generic/CPInstruction.java
index e25c95a1..c7b0e3ff 100644
--- a/src/main/java/org/apache/bcel/generic/CPInstruction.java
+++ b/src/main/java/org/apache/bcel/generic/CPInstruction.java
@@ -22,6 +22,7 @@ import java.io.IOException;
import org.apache.bcel.classfile.Constant;
import org.apache.bcel.classfile.ConstantClass;
import org.apache.bcel.classfile.ConstantPool;
+import org.apache.bcel.classfile.Utility;
import org.apache.bcel.util.ByteSequence;
/**
@@ -132,7 +133,7 @@ public abstract class CPInstruction extends Instruction implements TypedInstruct
final Constant c = cp.getConstant(index);
String str = cp.constantToString(c);
if (c instanceof ConstantClass) {
- str = str.replace('.', '/');
+ str = Utility.packageToPath(str);
}
return org.apache.bcel.Const.getOpcodeName(super.getOpcode()) + " " + str;
}
diff --git a/src/main/java/org/apache/bcel/generic/ConstantPoolGen.java b/src/main/java/org/apache/bcel/generic/ConstantPoolGen.java
index cf7ff315..fb5ed9fd 100644
--- a/src/main/java/org/apache/bcel/generic/ConstantPoolGen.java
+++ b/src/main/java/org/apache/bcel/generic/ConstantPoolGen.java
@@ -251,7 +251,7 @@ public class ConstantPoolGen {
* @return index of entry
*/
public int addClass(final String str) {
- return addClass_(str.replace('.', '/'));
+ return addClass_(Utility.packageToPath(str));
}
private int addClass_(final String clazz) {
@@ -587,7 +587,7 @@ public class ConstantPoolGen {
* @return index on success, -1 otherwise
*/
public int lookupClass(final String str) {
- return getIndex(classTable, str.replace('.', '/'));
+ return getIndex(classTable, Utility.packageToPath(str));
}
/**
diff --git a/src/main/java/org/apache/bcel/generic/InvokeInstruction.java b/src/main/java/org/apache/bcel/generic/InvokeInstruction.java
index 2f781608..20405403 100644
--- a/src/main/java/org/apache/bcel/generic/InvokeInstruction.java
+++ b/src/main/java/org/apache/bcel/generic/InvokeInstruction.java
@@ -128,7 +128,7 @@ public abstract class InvokeInstruction extends FieldOrMethod implements Excepti
final StringBuilder sb = new StringBuilder(opcodeName);
if (tok.hasMoreTokens()) {
sb.append(" ");
- sb.append(tok.nextToken().replace('.', '/'));
+ sb.append(Utility.packageToPath(tok.nextToken()));
if (tok.hasMoreTokens()) {
sb.append(tok.nextToken());
}
diff --git a/src/main/java/org/apache/bcel/generic/ObjectType.java b/src/main/java/org/apache/bcel/generic/ObjectType.java
index 3959f7df..28e21254 100644
--- a/src/main/java/org/apache/bcel/generic/ObjectType.java
+++ b/src/main/java/org/apache/bcel/generic/ObjectType.java
@@ -45,7 +45,7 @@ public class ObjectType extends ReferenceType {
* @param className fully qualified class name, e.g. java.lang.String
*/
public ObjectType(final String className) {
- super(Const.T_REFERENCE, "L" + className.replace('.', '/') + ";");
+ super(Const.T_REFERENCE, "L" + Utility.packageToPath(className) + ";");
this.className = Utility.pathToPackage(className);
}
diff --git a/src/main/java/org/apache/bcel/util/ClassLoader.java b/src/main/java/org/apache/bcel/util/ClassLoader.java
index 680eca3e..ec31feda 100644
--- a/src/main/java/org/apache/bcel/util/ClassLoader.java
+++ b/src/main/java/org/apache/bcel/util/ClassLoader.java
@@ -123,7 +123,7 @@ public class ClassLoader extends java.lang.ClassLoader {
final ConstantPool cp = clazz.getConstantPool();
final ConstantClass cl = cp.getConstant(clazz.getClassNameIndex(), Const.CONSTANT_Class, ConstantClass.class);
final ConstantUtf8 name = cp.getConstantUtf8(cl.getNameIndex());
- name.setBytes(className.replace('.', '/'));
+ name.setBytes(Utility.packageToPath(className));
return clazz;
}
diff --git a/src/main/java/org/apache/bcel/util/ClassLoaderRepository.java b/src/main/java/org/apache/bcel/util/ClassLoaderRepository.java
index c1a06d83..5ffcabe3 100644
--- a/src/main/java/org/apache/bcel/util/ClassLoaderRepository.java
+++ b/src/main/java/org/apache/bcel/util/ClassLoaderRepository.java
@@ -23,6 +23,7 @@ import java.util.Map;
import org.apache.bcel.classfile.ClassParser;
import org.apache.bcel.classfile.JavaClass;
+import org.apache.bcel.classfile.Utility;
/**
* The repository maintains information about which classes have been loaded.
@@ -74,7 +75,7 @@ public class ClassLoaderRepository implements Repository {
*/
@Override
public JavaClass loadClass(final String className) throws ClassNotFoundException {
- final String classFile = className.replace('.', '/');
+ final String classFile = Utility.packageToPath(className);
JavaClass RC = findClass(className);
if (RC != null) {
return RC;
diff --git a/src/main/java/org/apache/bcel/util/ClassPath.java b/src/main/java/org/apache/bcel/util/ClassPath.java
index dd3ff90a..6fe0df83 100644
--- a/src/main/java/org/apache/bcel/util/ClassPath.java
+++ b/src/main/java/org/apache/bcel/util/ClassPath.java
@@ -41,6 +41,7 @@ import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import org.apache.bcel.classfile.JavaClass;
+import org.apache.bcel.classfile.Utility;
/**
* Loads class files from the CLASSPATH. Inspired by sun.tools.ClassPath.
@@ -261,7 +262,7 @@ public class ClassPath implements Closeable {
@Override
protected String toEntryName(final String name, final String suffix) {
- return packageToFolder(name) + suffix;
+ return Utility.packageToPath(name) + suffix;
}
}
@@ -282,7 +283,7 @@ public class ClassPath implements Closeable {
@Override
ClassFile getClassFile(final String name, final String suffix) {
- final Path resolved = modulePath.resolve(packageToFolder(name) + suffix);
+ final Path resolved = modulePath.resolve(Utility.packageToPath(name) + suffix);
if (Files.exists(resolved)) {
return new ClassFile() {
@@ -423,7 +424,7 @@ public class ClassPath implements Closeable {
@Override
protected String toEntryName(final String name, final String suffix) {
- return "classes/" + packageToFolder(name) + suffix;
+ return "classes/" + Utility.packageToPath(name) + suffix;
}
}
@@ -513,10 +514,6 @@ public class ClassPath implements Closeable {
}
}
- static String packageToFolder(final String name) {
- return name.replace('.', '/');
- }
-
private final String classPathString;
private final ClassPath parent;
@@ -679,7 +676,7 @@ public class ClassPath implements Closeable {
* @throws IOException if an I/O error occurs.
*/
public InputStream getInputStream(final String name) throws IOException {
- return getInputStream(packageToFolder(name), JavaClass.EXTENSION);
+ return getInputStream(Utility.packageToPath(name), JavaClass.EXTENSION);
}
/**
diff --git a/src/main/java/org/apache/bcel/verifier/statics/Pass2Verifier.java b/src/main/java/org/apache/bcel/verifier/statics/Pass2Verifier.java
index 17a964c8..f5b1cd20 100644
--- a/src/main/java/org/apache/bcel/verifier/statics/Pass2Verifier.java
+++ b/src/main/java/org/apache/bcel/verifier/statics/Pass2Verifier.java
@@ -1144,7 +1144,7 @@ public final class Pass2Verifier extends PassVerifier implements Constants {
final Constant c = cp.getConstant(obj.getNameIndex());
if (c instanceof ConstantUtf8) { // Ignore the case where it's not a ConstantUtf8 here, we'll find out later.
final String className = ((ConstantUtf8) c).getBytes();
- if (className.startsWith(jc.getClassName().replace('.', '/') + "$")) {
+ if (className.startsWith(Utility.packageToPath(jc.getClassName()) + "$")) {
hasInnerClass = true;
}
}
diff --git a/src/test/java/org/apache/bcel/AbstractTestCase.java b/src/test/java/org/apache/bcel/AbstractTestCase.java
index b8b150a6..af1d5059 100644
--- a/src/test/java/org/apache/bcel/AbstractTestCase.java
+++ b/src/test/java/org/apache/bcel/AbstractTestCase.java
@@ -31,6 +31,7 @@ import org.apache.bcel.classfile.Attribute;
import org.apache.bcel.classfile.ConstantUtf8;
import org.apache.bcel.classfile.JavaClass;
import org.apache.bcel.classfile.Method;
+import org.apache.bcel.classfile.Utility;
import org.apache.bcel.generic.AnnotationEntryGen;
import org.apache.bcel.generic.ConstantPoolGen;
import org.apache.bcel.generic.ElementValueGen;
@@ -51,7 +52,7 @@ public abstract class AbstractTestCase {
protected static final File TESTDATA = new File("target", "testdata");
// package base name in signature format, i.e. with '/' separators instead of '.'
- protected static final String PACKAGE_BASE_SIG = PACKAGE_BASE_NAME.replace('.', '/');
+ protected static final String PACKAGE_BASE_SIG = Utility.packageToPath(PACKAGE_BASE_NAME);
public static void clear() {
VerifierFactory.clear();
diff --git a/src/test/java/org/apache/bcel/verifier/tests/TestCreator.java b/src/test/java/org/apache/bcel/verifier/tests/TestCreator.java
index 3c49f4a3..ccb2b845 100644
--- a/src/test/java/org/apache/bcel/verifier/tests/TestCreator.java
+++ b/src/test/java/org/apache/bcel/verifier/tests/TestCreator.java
@@ -23,6 +23,7 @@ import java.io.OutputStream;
import java.net.URISyntaxException;
import org.apache.bcel.classfile.JavaClass;
+import org.apache.bcel.classfile.Utility;
public abstract class TestCreator {
@@ -56,6 +57,6 @@ public abstract class TestCreator {
}
protected String getPackageName() {
- return getClass().getPackage().getName().replace('.', '/');
+ return Utility.packageToPath(getClass().getPackage().getName());
}
}