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/05/18 17:00:45 UTC
[commons-weaver] 02/02: cleanup warnings; add utility method
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 bf128d3e93feb5765905ba2e69cd354721a9e7e3
Author: Matt Benson <mb...@apache.org>
AuthorDate: Fri May 18 12:00:38 2018 -0500
cleanup warnings; add utility method
---
.../commons/weaver/normalizer/Normalizer.java | 19 ++++-------
.../commons/weaver/privilizer/ActionGenerator.java | 4 +--
.../weaver/privilizer/BlueprintingVisitor.java | 2 +-
.../commons/weaver/privilizer/Privilizer.java | 35 +++-----------------
.../weaver/privilizer/PrivilizerCleaner.java | 2 +-
.../weaver/privilizer/PrivilizingVisitor.java | 2 +-
.../commons/weaver/model/WeaveEnvironment.java | 38 ++++++++++++++++++++++
7 files changed, 54 insertions(+), 48 deletions(-)
diff --git a/modules/normalizer/src/main/java/org/apache/commons/weaver/normalizer/Normalizer.java b/modules/normalizer/src/main/java/org/apache/commons/weaver/normalizer/Normalizer.java
index b40b225..1894dba 100644
--- a/modules/normalizer/src/main/java/org/apache/commons/weaver/normalizer/Normalizer.java
+++ b/modules/normalizer/src/main/java/org/apache/commons/weaver/normalizer/Normalizer.java
@@ -220,7 +220,7 @@ public class Normalizer {
}
}
- private static final class CustomClassWriter extends ClassWriter {
+ private final class CustomClassWriter extends ClassWriter {
CustomClassWriter(final int flags) {
super(flags);
}
@@ -231,7 +231,7 @@ public class Normalizer {
@Override
protected String getCommonSuperClass(final String type1, final String type2) {
- return "java/lang/Object";
+ return env.getCommonSuperClass(type1, type2);
}
}
@@ -264,7 +264,7 @@ public class Normalizer {
try (OutputStream outputStream = classfile.getOutputStream()) {
outputStream.write(bytecode);
} catch (final IOException e) {
- throw new RuntimeException(e);
+ throw new IllegalStateException(e);
}
}
}
@@ -333,7 +333,7 @@ public class Normalizer {
} catch (final RuntimeException e) {
throw e;
} catch (final Exception e) {
- throw new RuntimeException(e);
+ throw new IllegalStateException(e);
}
}
return result;
@@ -358,10 +358,8 @@ public class Normalizer {
* @param key {@link String} {@link Pair} indicating supertype and constructor signature
* @param toMerge matching classes
* @throws IOException on I/O error
- * @throws ClassNotFoundException if class not found
*/
- private void rewrite(final Pair<String, String> key, final Set<ClassWrapper> toMerge) throws IOException,
- ClassNotFoundException {
+ private void rewrite(final Pair<String, String> key, final Set<ClassWrapper> toMerge) throws IOException {
final String target = copy(key, toMerge.iterator().next());
env.info("Merging %s identical %s implementations with constructor %s to type %s", toMerge.size(),
key.getLeft(), key.getRight(), target);
@@ -478,16 +476,14 @@ public class Normalizer {
* @param classWrapper
* @return the generated classname.
* @throws IOException
- * @throws ClassNotFoundException
*/
- private String copy(final Pair<String, String> key, final ClassWrapper classWrapper) throws IOException,
- ClassNotFoundException {
+ private String copy(final Pair<String, String> key, final ClassWrapper classWrapper) throws IOException {
env.debug("Copying %s to %s", key, targetPackage);
final MessageDigest md5;
try {
md5 = MessageDigest.getInstance("MD5");
} catch (final NoSuchAlgorithmException e) {
- throw new RuntimeException(e);
+ throw new IllegalStateException(e);
}
md5.update(key.getLeft().getBytes(StandardCharsets.UTF_8));
md5.update(key.getRight().getBytes(StandardCharsets.UTF_8));
@@ -500,7 +496,6 @@ public class Normalizer {
try (InputStream bytecode = env.getClassfile(classWrapper.wrapped).getInputStream()) {
final ClassReader reader = new ClassReader(bytecode);
-
final ClassVisitor writeClass = new WriteClass();
// we're doing most of this by hand; we only read the original class to hijack signature, ctor exceptions,
diff --git a/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/ActionGenerator.java b/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/ActionGenerator.java
index 9f880a8..34eb130 100644
--- a/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/ActionGenerator.java
+++ b/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/ActionGenerator.java
@@ -88,7 +88,7 @@ class ActionGenerator extends Privilizer.WriteClass implements Builder<Type> {
final Type[] args =
implIsStatic ? methd.getArgumentTypes() : ArrayUtils.insert(0, methd.getArgumentTypes(), owner.target);
this.helper = new Method(privilizer().generateName("access$" + index), methd.getReturnType(), args);
- this.result = privilizer().wrap(methd.getReturnType());
+ this.result = Privilizer.wrap(methd.getReturnType());
this.fields = fields(args);
this.actionInterface = Type.getType(exc ? PrivilegedExceptionAction.class : PrivilegedAction.class);
}
@@ -157,7 +157,7 @@ class ActionGenerator extends Privilizer.WriteClass implements Builder<Type> {
final SignatureVisitor actionImplemented = type.visitInterface();
actionImplemented.visitClassType(actionInterface.getInternalName());
final SignatureVisitor visitTypeArgument = actionImplemented.visitTypeArgument('=');
- new SignatureReader(privilizer().wrap(methd.getReturnType()).getDescriptor()).accept(visitTypeArgument);
+ new SignatureReader(Privilizer.wrap(methd.getReturnType()).getDescriptor()).accept(visitTypeArgument);
actionImplemented.visitEnd();
final String signature = type.toString();
diff --git a/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/BlueprintingVisitor.java b/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/BlueprintingVisitor.java
index ac3b1ce..ef88a7f 100644
--- a/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/BlueprintingVisitor.java
+++ b/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/BlueprintingVisitor.java
@@ -128,7 +128,7 @@ class BlueprintingVisitor extends Privilizer.PrivilizerClassVisitor {
try (InputStream bytecode = privilizer().env.getClassfile(className).getInputStream()) {
new ClassReader(bytecode).accept(result, ClassReader.SKIP_DEBUG | ClassReader.EXPAND_FRAMES);
} catch (final Exception e) {
- throw new RuntimeException(e);
+ throw new IllegalStateException(e);
}
return result;
}
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 1fd50d8..25d54b0 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
@@ -84,34 +84,7 @@ public class Privilizer {
@Override
protected String getCommonSuperClass(final String type1, final String type2) {
-// 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('.', '/');
- }
+ return env.getCommonSuperClass(type1, type2);
}
}
@@ -141,7 +114,7 @@ public class Privilizer {
try (OutputStream outputStream = classfile.getOutputStream()) {
outputStream.write(bytecode);
} catch (final IOException e) {
- throw new RuntimeException(e);
+ throw new IllegalStateException(e);
}
}
}
@@ -233,7 +206,7 @@ public class Privilizer {
classReader.accept(cvr, ClassReader.EXPAND_FRAMES);
} catch (final Exception e) {
- throw new RuntimeException(e);
+ throw new IllegalStateException(e);
}
}
@@ -248,7 +221,7 @@ public class Privilizer {
classReader.accept(cv, ClassReader.EXPAND_FRAMES);
} catch (final Exception e) {
- throw new RuntimeException(e);
+ throw new IllegalStateException(e);
}
}
diff --git a/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/PrivilizerCleaner.java b/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/PrivilizerCleaner.java
index bb09954..27939ec 100644
--- a/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/PrivilizerCleaner.java
+++ b/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/PrivilizerCleaner.java
@@ -73,7 +73,7 @@ public class PrivilizerCleaner implements Cleaner {
}
}, ClassReader.SKIP_CODE + ClassReader.SKIP_DEBUG + ClassReader.SKIP_FRAMES);
} catch (final Exception e) {
- throw new RuntimeException(e);
+ throw new IllegalStateException(e);
}
}
boolean result = false;
diff --git a/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/PrivilizingVisitor.java b/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/PrivilizingVisitor.java
index 09c8cce..bda171e 100644
--- a/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/PrivilizingVisitor.java
+++ b/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/PrivilizingVisitor.java
@@ -99,7 +99,7 @@ class PrivilizingVisitor extends Privilizer.PrivilizerClassVisitor {
if (Type.getType(Privileged.class).getDescriptor().equals(desc)) {
final AccessLevel localAccessLevel = AccessLevel.of(access);
if (accessLevel.compareTo(localAccessLevel) > 0) {
- throw new RuntimeException(new IllegalAccessException("Method " + className + "#" + methd
+ throw new IllegalStateException(new IllegalAccessException("Method " + className + "#" + methd
+ " must have maximum access level '" + accessLevel + "' but is defined wider ('"
+ localAccessLevel + "')"));
}
diff --git a/processor/src/main/java/org/apache/commons/weaver/model/WeaveEnvironment.java b/processor/src/main/java/org/apache/commons/weaver/model/WeaveEnvironment.java
index 565eb4b..af7bd2b 100644
--- a/processor/src/main/java/org/apache/commons/weaver/model/WeaveEnvironment.java
+++ b/processor/src/main/java/org/apache/commons/weaver/model/WeaveEnvironment.java
@@ -215,6 +215,44 @@ public abstract class WeaveEnvironment {
}
/**
+ * Calculate a common superclass for the specified classnames, in terms of the {@link WeaveEnvironment}'s
+ * {@link #classLoader}. This method exists as a convenience feature for weaver modules that use ASM, and is
+ * implemented with the same logic as the method of the same name in that library's {@code ClassVisitor} class.
+ *
+ * @param type1
+ * @param type2
+ * @return {@link String} internal name of superclass common to {@code type1} and {@code type2}
+ */
+ public final String getCommonSuperClass(final String type1, final String type2) {
+ // https://gitlab.ow2.org/asm/asm/merge_requests/166
+ 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";
+ }
+ do {
+ class1 = class1.getSuperclass();
+ } while (!class1.isAssignableFrom(class2));
+ return class1.getName().replace('.', '/');
+ }
+
+ /**
* Delete the specified resource.
* @param name to delete
* @return whether successful
--
To stop receiving notification emails like this one, please contact
mbenson@apache.org.