This is an automated email from the ASF dual-hosted git repository.
remm pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/tomcat-jakartaee-migration.git
The following commit(s) were added to refs/heads/master by this push:
new 1a7ff40 Refactor for duplication
1a7ff40 is described below
commit 1a7ff406b3e47f18fc3f2bc99d05b17bda9f25f0
Author: remm <[email protected]>
AuthorDate: Mon Mar 29 16:45:45 2021 +0200
Refactor for duplication
---
.../apache/tomcat/jakartaee/ClassConverter.java | 94 ++++++++--------------
1 file changed, 34 insertions(+), 60 deletions(-)
diff --git a/src/main/java/org/apache/tomcat/jakartaee/ClassConverter.java
b/src/main/java/org/apache/tomcat/jakartaee/ClassConverter.java
index 9b3cbd9..81deddf 100644
--- a/src/main/java/org/apache/tomcat/jakartaee/ClassConverter.java
+++ b/src/main/java/org/apache/tomcat/jakartaee/ClassConverter.java
@@ -59,7 +59,27 @@ public class ClassConverter implements Converter,
ClassFileTransformer {
@Override
public void convert(String path, InputStream src, OutputStream dest,
EESpecProfile profile) throws IOException {
+ convertInternal(path, src, dest, profile, null);
+ }
+
+
+ @Override
+ public byte[] transform(ClassLoader loader, String className,
+ Class<?> classBeingRedefined, ProtectionDomain protectionDomain,
+ byte[] classfileBuffer) throws IllegalClassFormatException {
+ ByteArrayInputStream inputStream = new
ByteArrayInputStream(classfileBuffer);
+ ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
+ try {
+ convertInternal(className, inputStream, outputStream, profile,
loader);
+ } catch (IOException e) {
+ throw new IllegalClassFormatException(e.getLocalizedMessage());
+ }
+ return outputStream.toByteArray();
+ }
+
+ protected void convertInternal(String path, InputStream src, OutputStream
dest, EESpecProfile profile, ClassLoader loader)
+ throws IOException {
ClassParser parser = new ClassParser(src, "unknown");
JavaClass javaClass = parser.parse();
@@ -75,49 +95,9 @@ public class ClassConverter implements Converter,
ClassFileTransformer {
String newString = profile.convert(str);
// Object comparison is deliberate
if (newString != str) {
- c = new ConstantUtf8(newString);
- constantPool[i] = c;
- converted = true;
- }
- }
- }
-
- if (logger.isLoggable(Level.FINE)) {
- if (converted) {
- logger.log(Level.FINE,
sm.getString("classConverter.converted", path));
- } else if (logger.isLoggable(Level.FINEST)) {
- logger.log(Level.FINEST,
sm.getString("classConverter.noConversion", path));
- }
- }
-
- javaClass.dump(dest);
- }
-
-
- @Override
- public byte[] transform(ClassLoader loader, String className,
- Class<?> classBeingRedefined, ProtectionDomain protectionDomain,
- byte[] classfileBuffer) throws IllegalClassFormatException {
- ByteArrayInputStream inputStream = new
ByteArrayInputStream(classfileBuffer);
- ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
- try {
- ClassParser parser = new ClassParser(inputStream, "unknown");
- JavaClass javaClass = parser.parse();
-
- boolean converted = false;
-
- // Loop through constant pool
- Constant[] constantPool =
javaClass.getConstantPool().getConstantPool();
- // Need an int as the maximum pool size is 2^16
- for (int i = 0; i < constantPool.length; i++) {
- if (constantPool[i] instanceof ConstantUtf8) {
- ConstantUtf8 c = (ConstantUtf8) constantPool[i];
- String str = c.getBytes();
- String newString = profile.convert(str);
- // Object comparison is deliberate
- if (newString != str) {
- // Since this is runtime conversion, the idea is to
only convert to
- // Jakarta EE specification classes that exist in the
container
+ if (loader != null) {
+ // Since this is a runtime conversion, the idea is to
only convert to
+ // Jakarta EE specification classes that exist in the
container
String[] split = newString.split(";|<");
for (String current : split) {
int pos = current.indexOf("jakarta/");
@@ -132,28 +112,22 @@ public class ClassConverter implements Converter,
ClassFileTransformer {
}
}
}
- if (newString != str) {
- c = new ConstantUtf8(newString);
- constantPool[i] = c;
- converted = true;
- }
}
+ c = new ConstantUtf8(newString);
+ constantPool[i] = c;
+ converted = true;
}
}
+ }
- if (logger.isLoggable(Level.FINE)) {
- if (converted) {
- logger.log(Level.FINE,
sm.getString("classConverter.converted", className));
- } else if (logger.isLoggable(Level.FINEST)) {
- logger.log(Level.FINEST,
sm.getString("classConverter.noConversion", className));
- }
+ if (logger.isLoggable(Level.FINE)) {
+ if (converted) {
+ logger.log(Level.FINE,
sm.getString("classConverter.converted", path));
+ } else if (logger.isLoggable(Level.FINEST)) {
+ logger.log(Level.FINEST,
sm.getString("classConverter.noConversion", path));
}
-
- javaClass.dump(outputStream);
- } catch (IOException e) {
- throw new IllegalClassFormatException(e.getLocalizedMessage());
}
- return outputStream.toByteArray();
- }
+ javaClass.dump(dest);
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]