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]

Reply via email to