AccessibleImpl.java :  » IDE-Eclipse » All-Other-packages » org » eclipse » jdi » internal » Java Open Source

Java Open Source » IDE Eclipse » All Other packages 
All Other packages » org » eclipse » jdi » internal » AccessibleImpl.java
/*******************************************************************************
 * Copyright (c) 2000, 2005 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 * 
 * Contributors:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/
package org.eclipse.jdi.internal;


import java.lang.reflect.Field;
import java.lang.reflect.Modifier;

import com.sun.jdi.Accessible;

/**
 * this class implements the corresponding interfaces
 * declared by the JDI specification. See the com.sun.jdi package
 * for more information.
 *
 */
public abstract class AccessibleImpl extends MirrorImpl implements Accessible {
  /** Modifier bit flag: Is synthetic. see MODIFIER_ACC_SYNTHETIC. */
  public static final int MODIFIER_SYNTHETIC = 0xf0000000;
  /** Modifier bit flag: Is public; may be accessed from outside its package. */
  public static final int MODIFIER_ACC_PUBLIC = 0x0001;
  /** Modifier bit flag: Is private; usable only within the defining class. */
  public static final int MODIFIER_ACC_PRIVATE = 0x0002;
  /** Modifier bit flag: Is protected; may be accessed within subclasses. */
  public static final int MODIFIER_ACC_PROTECTED = 0x0004;
  /** Modifier bit flag: Is static. */
  public static final int MODIFIER_ACC_STATIC = 0x0008;
  /** Modifier bit flag: Is final; no overriding is allowed. */
  public static final int MODIFIER_ACC_FINAL = 0x0010;
  /** Modifier bit flag: Is synchronized; wrap use in monitor lock. */
  public static final int MODIFIER_ACC_SYNCHRONIZED = 0x0020;
  /** Modifier bit flag: Treat superclass methods specially in invokespecial. */
  public static final int MODIFIER_ACC_SUPER = 0x0020;
  /** Modifier bit flag: Is bridge; the method is a synthetic method created to support generic types. */
  public static final int MODIFIER_ACC_BRIDGE = 0x0040;
  /** Modifier bit flag: Is volitile; cannot be reached. */
  public static final int MODIFIER_ACC_VOLITILE = 0x0040;
  /** Modifier bit flag: Is transient; not written or read by a persistent object manager. */
  public static final int MODIFIER_ACC_TRANSIENT = 0x0080;
  /** Modifier bit flag: Is varargs; the method has been declared with variable number of arguments. */
  public static final int MODIFIER_ACC_VARARGS = 0x0080;
  /** Modifier bit flag: Is enum; the field hold an element of an enumerated type. */
  public static final int MODIFIER_ACC_ENUM = 0x0100;
  /** Modifier bit flag: Is native; implemented in a language other than Java. */
  public static final int MODIFIER_ACC_NATIVE = 0x0100;
  /** Modifier bit flag: Is abstract; no implementation is provided. */
  public static final int MODIFIER_ACC_ABSTRACT = 0x0400;
  /** Modifier bit flag: Is strict;  the method floating-point mode is FP-strict*/
  public static final int MODIFIER_ACC_STRICT = 0x0800;
  /** Modifier bit flag: Is synthetic. see MODIFIER_SYNTHETIC. */
  public static final int MODIFIER_ACC_SYNTHETIC = 0x1000;
  
  /** Mapping of command codes to strings. */
  private static String[] fgModifiers = null;
  
  /**
   * Creates new instance.
   */
  public AccessibleImpl(String description, VirtualMachineImpl vmImpl) {
    super(description, vmImpl);
  }

  /** 
   * @return Returns true if object is package private.
   */
  public boolean isPackagePrivate() {
    return !(isPrivate() || isPublic() || isProtected());
  }
    
  /** 
   * @return Returns true if object is private.
   */
  public boolean isPrivate() {
    return (modifiers() & MODIFIER_ACC_PRIVATE) != 0;
  }
  
  /** 
   * @return Returns true if object is pubic.
   */
  public boolean isPublic() {
    return (modifiers() & MODIFIER_ACC_PUBLIC) != 0;
  }
  
  /** 
   * @return Returns true if object is protected.
   */
  public boolean isProtected() {
    return (modifiers() & MODIFIER_ACC_PROTECTED) != 0;
  }
  
  /**
   * Retrieves constant mappings.
   */
  public static void getConstantMaps() {
    if (fgModifiers != null) {
      return;
    }
    
    Field[] fields = AccessibleImpl.class.getDeclaredFields();
    fgModifiers = new String[32];
    
    for (int i = 0; i < fields.length; i++) {
      Field field = fields[i];
      int modifiers= field.getModifiers();
      if ((modifiers & Modifier.PUBLIC) == 0 || (modifiers & Modifier.STATIC) == 0 || (modifiers & Modifier.FINAL) == 0)
        continue;
        
      String name = field.getName();
      if (!name.startsWith("MODIFIER_")) {//$NON-NLS-1$
        continue;
      }
        
      name = name.substring(9);
      
      try {
        int value = field.getInt(null);
        
        for (int j = 0; j < 32; j++) {
          if ((1 << j & value) != 0) {
            fgModifiers[j]= name;
            break;
          }
        }
      } catch (IllegalAccessException e) {
        // Will not occur for own class.
      } catch (IllegalArgumentException e) {
        // Should not occur.
        // We should take care that all public static final constants
        // in this class are numbers that are convertible to int.
      }
    }
  }
  
  /**
   * @return Returns an array with string representations of tags.
   */
   public static String[] getModifierStrings() {
     getConstantMaps();
     return fgModifiers;
   }
}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.