/*******************************************************************************
 * Copyright (c) 2000, 2015 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 com.sun.jdi.ReferenceType;
import com.sun.jdi.TypeComponent;

/**
 * this class implements the corresponding interfaces declared by the JDI
 * specification. See the com.sun.jdi package for more information.
 *
 */
public abstract class TypeComponentImpl extends AccessibleImpl implements
		TypeComponent {
	/** Text representation of this type. */
	private String fName = null;
	/** JNI-style signature for this type. */
	private String fSignature = null;
	/** the generic signature for this type, java 1.5 */
	private String fGenericSignature;
	/** ReferenceType that holds field or method. */
	private ReferenceTypeImpl fDeclaringType;
	/** Modifier bits. */
	protected int fModifierBits;

	/**
	 * Creates new instance.
	 */
	public TypeComponentImpl(String description, VirtualMachineImpl vmImpl,
			ReferenceTypeImpl declaringType, String name, String signature,
			String genericSignature, int modifierBits) {
		super(description, vmImpl);
		fName = name;
		fSignature = signature;
		fGenericSignature = genericSignature;
		fDeclaringType = declaringType;
		fModifierBits = modifierBits;
	}

	/**
	 * @return Returns modifier bits.
	 */
	@Override
	public int modifiers() {
		return fModifierBits;
	}

	/**
	 * @return Returns the ReferenceTypeImpl in which this component was
	 *         declared.
	 */
	public ReferenceTypeImpl referenceTypeImpl() {
		return fDeclaringType;
	}

	/**
	 * @return Returns the type in which this component was declared.
	 */
	@Override
	public ReferenceType declaringType() {
		return fDeclaringType;
	}

	/**
	 * @return Returns true if type component is final.
	 */
	@Override
	public boolean isFinal() {
		return (fModifierBits & MODIFIER_ACC_FINAL) != 0;
	}

	/**
	 * @return Returns true if type component is static.
	 */
	@Override
	public boolean isStatic() {
		return (fModifierBits & MODIFIER_ACC_STATIC) != 0;
	}

	/**
	 * @return Returns true if type component is synthetic.
	 */
	@Override
	public boolean isSynthetic() {
		return (fModifierBits & (MODIFIER_SYNTHETIC | MODIFIER_ACC_SYNTHETIC)) != 0;
	}

	/**
	 * @return Returns text representation of this type.
	 */
	@Override
	public String name() {
		return fName;
	}

	/**
	 * @return JNI-style signature for this type.
	 */
	@Override
	public String signature() {
		return fSignature;
	}

	/**
	 * @return Returns description of Mirror object.
	 */
	@Override
	public String toString() {
		return fName;
	}

	@Override
	public String genericSignature() {
		return fGenericSignature;
	}

}
