emul/src/main/java/java/lang/reflect/Field.java
branchreflection
changeset 260 1d03cb35fbda
parent 258 21b390daf444
     1.1 --- a/emul/src/main/java/java/lang/reflect/Field.java	Tue Dec 04 13:29:17 2012 +0100
     1.2 +++ b/emul/src/main/java/java/lang/reflect/Field.java	Tue Dec 04 14:31:11 2012 +0100
     1.3 @@ -25,15 +25,7 @@
     1.4  
     1.5  package java.lang.reflect;
     1.6  
     1.7 -import sun.reflect.FieldAccessor;
     1.8 -import sun.reflect.Reflection;
     1.9 -import sun.reflect.generics.repository.FieldRepository;
    1.10 -import sun.reflect.generics.factory.CoreReflectionFactory;
    1.11 -import sun.reflect.generics.factory.GenericsFactory;
    1.12 -import sun.reflect.generics.scope.ClassScope;
    1.13  import java.lang.annotation.Annotation;
    1.14 -import java.util.Map;
    1.15 -import sun.reflect.annotation.AnnotationParser;
    1.16  
    1.17  
    1.18  /**
    1.19 @@ -67,13 +59,7 @@
    1.20      private int                 modifiers;
    1.21      // Generics and annotations support
    1.22      private transient String    signature;
    1.23 -    // generic info repository; lazily initialized
    1.24 -    private transient FieldRepository genericInfo;
    1.25      private byte[]              annotations;
    1.26 -    // Cached field accessor created without override
    1.27 -    private FieldAccessor fieldAccessor;
    1.28 -    // Cached field accessor created with override
    1.29 -    private FieldAccessor overrideFieldAccessor;
    1.30      // For sharing of FieldAccessors. This branching structure is
    1.31      // currently only two levels deep (i.e., one root Field and
    1.32      // potentially many Field objects pointing to it.)
    1.33 @@ -83,24 +69,6 @@
    1.34  
    1.35      private String getGenericSignature() {return signature;}
    1.36  
    1.37 -    // Accessor for factory
    1.38 -    private GenericsFactory getFactory() {
    1.39 -        Class<?> c = getDeclaringClass();
    1.40 -        // create scope and factory
    1.41 -        return CoreReflectionFactory.make(c, ClassScope.make(c));
    1.42 -    }
    1.43 -
    1.44 -    // Accessor for generic info repository
    1.45 -    private FieldRepository getGenericInfo() {
    1.46 -        // lazily initialize repository if necessary
    1.47 -        if (genericInfo == null) {
    1.48 -            // create and cache generic info repository
    1.49 -            genericInfo = FieldRepository.make(getGenericSignature(),
    1.50 -                                               getFactory());
    1.51 -        }
    1.52 -        return genericInfo; //return cached repository
    1.53 -    }
    1.54 -
    1.55  
    1.56      /**
    1.57       * Package-private constructor used by ReflectAccess to enable
    1.58 @@ -139,9 +107,6 @@
    1.59          // objects.)
    1.60          Field res = new Field(clazz, name, type, modifiers, slot, signature, annotations);
    1.61          res.root = this;
    1.62 -        // Might as well eagerly propagate this if already present
    1.63 -        res.fieldAccessor = fieldAccessor;
    1.64 -        res.overrideFieldAccessor = overrideFieldAccessor;
    1.65          return res;
    1.66      }
    1.67  
    1.68 @@ -232,10 +197,7 @@
    1.69       * @since 1.5
    1.70       */
    1.71      public Type getGenericType() {
    1.72 -        if (getGenericSignature() != null)
    1.73 -            return getGenericInfo().getGenericType();
    1.74 -        else
    1.75 -            return getType();
    1.76 +        throw new UnsupportedOperationException();
    1.77      }
    1.78  
    1.79  
    1.80 @@ -924,65 +886,28 @@
    1.81      private FieldAccessor getFieldAccessor(Object obj)
    1.82          throws IllegalAccessException
    1.83      {
    1.84 -        doSecurityCheck(obj);
    1.85 -        boolean ov = override;
    1.86 -        FieldAccessor a = (ov)? overrideFieldAccessor : fieldAccessor;
    1.87 -        return (a != null)? a : acquireFieldAccessor(ov);
    1.88 +        throw new SecurityException();
    1.89      }
    1.90 -
    1.91 -    // NOTE that there is no synchronization used here. It is correct
    1.92 -    // (though not efficient) to generate more than one FieldAccessor
    1.93 -    // for a given Field. However, avoiding synchronization will
    1.94 -    // probably make the implementation more scalable.
    1.95 -    private FieldAccessor acquireFieldAccessor(boolean overrideFinalCheck) {
    1.96 -        // First check to see if one has been created yet, and take it
    1.97 -        // if so
    1.98 -        FieldAccessor tmp = null;
    1.99 -        if (root != null) tmp = root.getFieldAccessor(overrideFinalCheck);
   1.100 -        if (tmp != null) {
   1.101 -            if (overrideFinalCheck)
   1.102 -                overrideFieldAccessor = tmp;
   1.103 -            else
   1.104 -                fieldAccessor = tmp;
   1.105 -        } else {
   1.106 -            // Otherwise fabricate one and propagate it up to the root
   1.107 -            tmp = reflectionFactory.newFieldAccessor(this, overrideFinalCheck);
   1.108 -            setFieldAccessor(tmp, overrideFinalCheck);
   1.109 -        }
   1.110 -
   1.111 -        return tmp;
   1.112 -    }
   1.113 -
   1.114 -    // Returns FieldAccessor for this Field object, not looking up
   1.115 -    // the chain to the root
   1.116 -    private FieldAccessor getFieldAccessor(boolean overrideFinalCheck) {
   1.117 -        return (overrideFinalCheck)? overrideFieldAccessor : fieldAccessor;
   1.118 -    }
   1.119 -
   1.120 -    // Sets the FieldAccessor for this Field object and
   1.121 -    // (recursively) its root
   1.122 -    private void setFieldAccessor(FieldAccessor accessor, boolean overrideFinalCheck) {
   1.123 -        if (overrideFinalCheck)
   1.124 -            overrideFieldAccessor = accessor;
   1.125 -        else
   1.126 -            fieldAccessor = accessor;
   1.127 -        // Propagate up
   1.128 -        if (root != null) {
   1.129 -            root.setFieldAccessor(accessor, overrideFinalCheck);
   1.130 -        }
   1.131 -    }
   1.132 -
   1.133 -    // NOTE: be very careful if you change the stack depth of this
   1.134 -    // routine. The depth of the "getCallerClass" call is hardwired so
   1.135 -    // that the compiler can have an easier time if this gets inlined.
   1.136 -    private void doSecurityCheck(Object obj) throws IllegalAccessException {
   1.137 -        if (!override) {
   1.138 -            if (!Reflection.quickCheckMemberAccess(clazz, modifiers)) {
   1.139 -                Class<?> caller = Reflection.getCallerClass(4);
   1.140 -
   1.141 -                checkAccess(caller, clazz, obj, modifiers);
   1.142 -            }
   1.143 -        }
   1.144 +    
   1.145 +    private static abstract class FieldAccessor {
   1.146 +        abstract void setShort(Object obj, short s);
   1.147 +        abstract void setInt(Object obj, int i);
   1.148 +        abstract void setChar(Object obj, char c);
   1.149 +        abstract void setByte(Object obj, byte b);
   1.150 +        abstract void setBoolean(Object obj, boolean z);
   1.151 +        abstract void set(Object obj, Object value);
   1.152 +        abstract double getDouble(Object obj);
   1.153 +        abstract void setLong(Object obj, long l);
   1.154 +        abstract void setFloat(Object obj, float f);
   1.155 +        abstract void setDouble(Object obj, double d);
   1.156 +        abstract long getLong(Object obj);
   1.157 +        abstract int getInt(Object obj);
   1.158 +        abstract short getShort(Object obj);
   1.159 +        abstract char getChar(Object obj);
   1.160 +        abstract byte getByte(Object obj);
   1.161 +        abstract boolean getBoolean(Object obj);
   1.162 +        abstract Object get(Object obj);
   1.163 +        abstract float getFloat(Object obj);
   1.164      }
   1.165  
   1.166      /*
   1.167 @@ -1016,25 +941,13 @@
   1.168          if (annotationClass == null)
   1.169              throw new NullPointerException();
   1.170  
   1.171 -        return (T) declaredAnnotations().get(annotationClass);
   1.172 +        throw new UnsupportedOperationException();
   1.173      }
   1.174  
   1.175      /**
   1.176       * @since 1.5
   1.177       */
   1.178      public Annotation[] getDeclaredAnnotations()  {
   1.179 -        return AnnotationParser.toArray(declaredAnnotations());
   1.180 -    }
   1.181 -
   1.182 -    private transient Map<Class<? extends Annotation>, Annotation> declaredAnnotations;
   1.183 -
   1.184 -    private synchronized  Map<Class<? extends Annotation>, Annotation> declaredAnnotations() {
   1.185 -        if (declaredAnnotations == null) {
   1.186 -            declaredAnnotations = AnnotationParser.parseAnnotations(
   1.187 -                annotations, sun.misc.SharedSecrets.getJavaLangAccess().
   1.188 -                getConstantPool(getDeclaringClass()),
   1.189 -                getDeclaringClass());
   1.190 -        }
   1.191 -        return declaredAnnotations;
   1.192 +        throw new UnsupportedOperationException();
   1.193      }
   1.194  }