Package java.lang.reflect

Source Code of java.lang.reflect.Field

/*
* @(#) $(JCGO)/goclsp/vm/java/lang/reflect/Field.java --
* VM specific Java "Field" implementation.
**
* Project: JCGO (http://www.ivmaisoft.com/jcgo/)
* Copyright (C) 2001-2007 Ivan Maidanski <ivmai@ivmaisoft.com>
* All rights reserved.
**
* Class specification origin: GNU Classpath v0.93 vm/reference
*/

/*
* This is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2, or (at your option)
* any later version.
**
* This software is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License (GPL) for more details.
**
* Linking this library statically or dynamically with other modules is
* making a combined work based on this library. Thus, the terms and
* conditions of the GNU General Public License cover the whole
* combination.
**
* As a special exception, the copyright holders of this library give you
* permission to link this library with independent modules to produce an
* executable, regardless of the license terms of these independent
* modules, and to copy and distribute the resulting executable under
* terms of your choice, provided that you also meet, for each linked
* independent module, the terms and conditions of the license of that
* module. An independent module is a module which is not derived from
* or based on this library. If you modify this library, you may extend
* this exception to your version of the library, but you are not
* obligated to do so. If you do not wish to do so, delete this
* exception statement from your version.
*/

package java.lang.reflect;

import gnu.classpath.VMStackWalker;

import gnu.java.lang.reflect.FieldSignatureParser;

public final class Field extends AccessibleObject
implements Member /* hard-coded class name */
{ /* VM class */

private static final int FIELD_MODIFIERS =
  Modifier.PUBLIC | Modifier.PRIVATE | Modifier.PROTECTED | Modifier.STATIC |
  Modifier.FINAL | Modifier.VOLATILE | Modifier.TRANSIENT;

private final Class declaringClass;

private final String name;

final int slot;

final Class type;

final int modifiers;

final String signature;

Field(Class declaringClass, String name, int slot, Class type,
   int modifiers, String signature)
{ /* used by VM classes only */
  if (declaringClass == null || name == null || type == null)
   throw new NullPointerException();
  this.declaringClass = declaringClass;
  this.name = name;
  this.slot = slot;
  this.type = type;
  this.modifiers = modifiers;
  this.signature = signature;
}

public Class getDeclaringClass()
{
  if (declaringClass == null) /* hack */
   throw new InternalError();
  return declaringClass;
}

public String getName()
{
  if (name == null) /* hack */
   throw new InternalError();
  return name;
}

public int getModifiers()
{
  return VMField.getModifiersInternal(this) & FIELD_MODIFIERS;
}

public boolean isSynthetic()
{
  return (VMField.getModifiersInternal(this) & Modifier.SYNTHETIC) != 0;
}

public boolean isEnumConstant()
{
  return (VMField.getModifiersInternal(this) & Modifier.ENUM) != 0;
}

public Class getType()
{
  return VMField.getType(this);
}

public boolean equals(Object obj)
{
  if (obj == this)
   return true;
  if (!(obj instanceof Field))
   return false;
  Field field = (Field) obj;
  return getDeclaringClass() == field.getDeclaringClass() &&
          getName().equals(field.getName()) && getType() == field.getType();
}

public int hashCode()
{
  return getDeclaringClass().getName().hashCode() ^ getName().hashCode();
}

public String toString()
{
  StringBuilder sb = new StringBuilder();
  int modifiers = getModifiers();
  if (modifiers != 0)
   Modifier.toString(modifiers, sb).append(' ');
  Constructor.appendTypeName(getType(), sb).append(' ');
  sb.append(getDeclaringClass().getName()).append('.');
  sb.append(getName());
  return sb.toString();
}

public String toGenericString()
{
  StringBuilder sb = new StringBuilder();
  int modifiers = getModifiers();
  if (modifiers != 0)
   Modifier.toString(modifiers, sb).append(' ');
  sb.append(getGenericType()).append(' ');
  sb.append(getDeclaringClass().getName()).append('.');
  sb.append(getName());
  return sb.toString();
}

public Object get(Object obj)
  throws IllegalAccessException
{
  return VMField.get(this, obj, isAccessible() ? getDeclaringClass() :
          VMStackWalker.getCallingClass());
}

public boolean getBoolean(Object obj)
  throws IllegalAccessException
{
  return VMField.getBoolean(this, obj, isAccessible() ? getDeclaringClass() :
          VMStackWalker.getCallingClass());
}

public byte getByte(Object obj)
  throws IllegalAccessException
{
  return VMField.getByte(this, obj, isAccessible() ? getDeclaringClass() :
          VMStackWalker.getCallingClass());
}

public char getChar(Object obj)
  throws IllegalAccessException
{
  return VMField.getChar(this, obj, isAccessible() ? getDeclaringClass() :
          VMStackWalker.getCallingClass());
}

public short getShort(Object obj)
  throws IllegalAccessException
{
  return VMField.getShort(this, obj, isAccessible() ? getDeclaringClass() :
          VMStackWalker.getCallingClass());
}

public int getInt(Object obj)
  throws IllegalAccessException
{
  return VMField.getInt(this, obj, isAccessible() ? getDeclaringClass() :
          VMStackWalker.getCallingClass());
}

public long getLong(Object obj)
  throws IllegalAccessException
{
  return VMField.getLong(this, obj, isAccessible() ? getDeclaringClass() :
          VMStackWalker.getCallingClass());
}

public float getFloat(Object obj)
  throws IllegalAccessException
{
  return VMField.getFloat(this, obj, isAccessible() ? getDeclaringClass() :
          VMStackWalker.getCallingClass());
}

public double getDouble(Object obj)
  throws IllegalAccessException
{
  return VMField.getDouble(this, obj, isAccessible() ? getDeclaringClass() :
          VMStackWalker.getCallingClass());
}

public void set(Object obj, Object value)
  throws IllegalAccessException
{
  VMField.set(this, obj, value, isAccessible() ? getDeclaringClass() :
   VMStackWalker.getCallingClass());
}

public void setBoolean(Object obj, boolean value)
  throws IllegalAccessException
{
  VMField.setBoolean(this, obj, value, isAccessible() ? getDeclaringClass() :
   VMStackWalker.getCallingClass());
}

public void setByte(Object obj, byte value)
  throws IllegalAccessException
{
  VMField.setByte(this, obj, value, isAccessible() ? getDeclaringClass() :
   VMStackWalker.getCallingClass());
}

public void setChar(Object obj, char value)
  throws IllegalAccessException
{
  VMField.setChar(this, obj, value, isAccessible() ? getDeclaringClass() :
   VMStackWalker.getCallingClass());
}

public void setShort(Object obj, short value)
  throws IllegalAccessException
{
  VMField.setShort(this, obj, value, isAccessible() ? getDeclaringClass() :
   VMStackWalker.getCallingClass());
}

public void setInt(Object obj, int value)
  throws IllegalAccessException
{
  VMField.setInt(this, obj, value, isAccessible() ? getDeclaringClass() :
   VMStackWalker.getCallingClass());
}

public void setLong(Object obj, long value)
  throws IllegalAccessException
{
  VMField.setLong(this, obj, value, isAccessible() ? getDeclaringClass() :
   VMStackWalker.getCallingClass());
}

public void setFloat(Object obj, float value)
  throws IllegalAccessException
{
  VMField.setFloat(this, obj, value, isAccessible() ? getDeclaringClass() :
   VMStackWalker.getCallingClass());
}

public void setDouble(Object obj, double value)
  throws IllegalAccessException
{
  VMField.setDouble(this, obj, value, isAccessible() ? getDeclaringClass() :
   VMStackWalker.getCallingClass());
}

public Type getGenericType()
{
  String signature = VMField.getSignature(this);
  if (signature == null)
   return getType();
  return (new FieldSignatureParser(getDeclaringClass(),
          signature)).getFieldType();
}
}
TOP

Related Classes of java.lang.reflect.Field

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.