/*******************************************************************************
 * Copyright (c) 2008, 2010 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.ptp.internal.rdt.core.model;

import org.eclipse.cdt.core.dom.ast.DOMException;
import org.eclipse.cdt.core.dom.ast.IVariable;
import org.eclipse.cdt.core.model.CModelException;
import org.eclipse.cdt.core.model.ICElement;
import org.eclipse.cdt.core.model.ISourceReference;
import org.eclipse.cdt.core.model.IVariableDeclaration;

public class VariableDeclaration extends SourceManipulation implements IVariableDeclaration {
	private static final long serialVersionUID = 1L;

	protected String fTypeName;
	protected boolean fIsStatic;
	protected boolean fIsConst;
	protected boolean fIsVolatile;
	
	public VariableDeclaration(Parent parent, String variableName) {
		super(parent, ICElement.C_VARIABLE_DECLARATION, variableName);
	}
	
	protected VariableDeclaration(Parent parent, int kind, String name) {
		super(parent, kind, name);
	}
	
	protected VariableDeclaration(Parent parent, IVariableDeclaration element) throws CModelException {
		super(parent, element, (ISourceReference) element);
		fTypeName = element.getTypeName();
		fIsStatic = element.isStatic();
		fIsConst = element.isConst();
		fIsVolatile = element.isVolatile();
	}

	protected VariableDeclaration(Parent parent, int type, IVariable binding) throws DOMException {
		super(parent, type, binding.getName());
		fIsStatic = binding.isStatic();
	}

	public String getTypeName() {
		return fTypeName;
	}

	public void setTypeName(String type) {
		fTypeName = type;
	}

	public boolean isConst() {
		return fIsConst;
	}

	public boolean isStatic() {
		return fIsStatic;
	}

	public boolean isVolatile() {
		return fIsVolatile;
	}

	public void setConst(boolean isConst) {
		fIsConst = isConst;
	}

	public void setVolatile(boolean isVolatile) {
		fIsVolatile = isVolatile;
	}

	public void setStatic(boolean isStatic) {
		fIsStatic = isStatic;
	}
	
	public VariableInfo getVariableInfo(){
		if (fInfo == null) {
			fInfo = new VariableInfo(this);
		}
		return (VariableInfo) fInfo;
	}
	
	@Override
	public CElementInfo getElementInfo() {
		return getVariableInfo();
	}

}
