You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by mb...@apache.org on 2018/04/29 19:41:02 UTC
[commons-weaver] 11/13: clone from ClassWriter#getCommonSuperClass
This is an automated email from the ASF dual-hosted git repository.
mbenson pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-weaver.git
commit 232f479747b016d307e214ad5906f82db0c5a58b
Author: Matt Benson <mb...@apache.org>
AuthorDate: Mon Apr 23 14:30:33 2018 -0500
clone from ClassWriter#getCommonSuperClass
---
.../commons/weaver/privilizer/Privilizer.java | 31 ++++++++++++++++++++--
1 file changed, 29 insertions(+), 2 deletions(-)
diff --git a/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/Privilizer.java b/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/Privilizer.java
index ae8036b..5da66bd 100644
--- a/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/Privilizer.java
+++ b/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/Privilizer.java
@@ -73,7 +73,7 @@ public class Privilizer {
}
}
- private static final class CustomClassWriter extends ClassWriter {
+ private final class CustomClassWriter extends ClassWriter {
CustomClassWriter(final int flags) {
super(flags);
}
@@ -84,7 +84,34 @@ public class Privilizer {
@Override
protected String getCommonSuperClass(final String type1, final String type2) {
- return "java/lang/Object";
+// https://gitlab.ow2.org/asm/asm/merge_requests/166
+ ClassLoader classLoader = env.classLoader;
+ Class<?> class1;
+ try {
+ class1 = Class.forName(type1.replace('/', '.'), false, classLoader);
+ } catch (Exception e) {
+ throw new TypeNotPresentException(type1, e);
+ }
+ Class<?> class2;
+ try {
+ class2 = Class.forName(type2.replace('/', '.'), false, classLoader);
+ } catch (Exception e) {
+ throw new TypeNotPresentException(type2, e);
+ }
+ if (class1.isAssignableFrom(class2)) {
+ return type1;
+ }
+ if (class2.isAssignableFrom(class1)) {
+ return type2;
+ }
+ if (class1.isInterface() || class2.isInterface()) {
+ return "java/lang/Object";
+ } else {
+ do {
+ class1 = class1.getSuperclass();
+ } while (!class1.isAssignableFrom(class2));
+ return class1.getName().replace('.', '/');
+ }
}
}
--
To stop receiving notification emails like this one, please contact
mbenson@apache.org.