From a75b1dde68756258e996f06dca6247bc445a7a65 Mon Sep 17 00:00:00 2001 From: Ioannis Tsakpinis Date: Tue, 12 Jul 2011 19:29:15 +0000 Subject: [PATCH] Added friendly error message when a non-static inner class is registered with the transformer. --- src/java/org/lwjgl/util/mapped/MappedForeach.java | 4 ++-- .../lwjgl/util/mapped/MappedObjectTransformer.java | 13 ++++++++----- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/src/java/org/lwjgl/util/mapped/MappedForeach.java b/src/java/org/lwjgl/util/mapped/MappedForeach.java index f4e7260e..b61ed889 100644 --- a/src/java/org/lwjgl/util/mapped/MappedForeach.java +++ b/src/java/org/lwjgl/util/mapped/MappedForeach.java @@ -40,8 +40,8 @@ import java.util.Iterator; */ public class MappedForeach implements Iterable { - private final T mapped; - private final int elementCount; + final T mapped; + final int elementCount; MappedForeach(T mapped, int elementCount) { this.mapped = mapped; diff --git a/src/java/org/lwjgl/util/mapped/MappedObjectTransformer.java b/src/java/org/lwjgl/util/mapped/MappedObjectTransformer.java index 73f361c7..50bb1775 100644 --- a/src/java/org/lwjgl/util/mapped/MappedObjectTransformer.java +++ b/src/java/org/lwjgl/util/mapped/MappedObjectTransformer.java @@ -36,7 +36,7 @@ public class MappedObjectTransformer { static final boolean PRINT_ACTIVITY = false;//LWJGLUtil.DEBUG && LWJGLUtil.getPrivilegedBoolean("org.lwjgl.util.mapped.PrintActivity"); static final boolean PRINT_BYTECODE = false; //LWJGLUtil.DEBUG && LWJGLUtil.getPrivilegedBoolean("org.lwjgl.util.mapped.PrintBytecode"); - private static final Map className_to_subtype; + static final Map className_to_subtype; static { className_to_subtype = new HashMap(); @@ -80,6 +80,9 @@ public class MappedObjectTransformer { if ( mapped == null ) throw new InternalError("missing " + MappedType.class.getName() + " annotation"); + if ( type.getEnclosingClass() != null && !Modifier.isStatic(type.getModifiers()) ) + throw new InternalError("only top-level or static inner classes are allowed"); + String className = jvmClassName(type); MappedSubtypeInfo mappedType = new MappedSubtypeInfo(className, mapped.sizeof(), mapped.align()); @@ -88,7 +91,7 @@ public class MappedObjectTransformer { for ( Field field : type.getDeclaredFields() ) { // static fields are never mapped - if ( (field.getModifiers() & Modifier.STATIC) != 0 ) + if ( Modifier.isStatic(field.getModifiers()) ) continue; // we only support primitives and ByteBuffers @@ -135,7 +138,7 @@ public class MappedObjectTransformer { } } - private static final String view_constructor_method = "_construct_view_"; + static final String view_constructor_method = "_construct_view_"; static byte[] transformFieldAccess(final String className, byte[] bytecode) { int flags = 0;//ClassWriter.COMPUTE_FRAMES; @@ -525,7 +528,7 @@ public class MappedObjectTransformer { } } - private static void pushInt(MethodVisitor mv, int value) { + static void pushInt(MethodVisitor mv, int value) { if ( value == -1 ) mv.visitInsn(ICONST_M1); else if ( value == 0 ) @@ -548,7 +551,7 @@ public class MappedObjectTransformer { mv.visitLdcInsn(Integer.valueOf(value)); } - private static String jvmClassName(Class type) { + static String jvmClassName(Class type) { return type.getName().replace('.', '/'); }