/*******************************************************************************
* Copyright (c) 2006, 2010 Wind River Systems, Inc. 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:
* Markus Schorn - initial API and implementation
*******************************************************************************/
package org.eclipse.cdt.internal.core.model.ext;
import org.eclipse.cdt.core.dom.ast.ASTTypeUtil;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPConstructor;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPMethod;
import org.eclipse.cdt.core.model.CModelException;
import org.eclipse.cdt.core.model.ICElement;
import org.eclipse.cdt.core.model.IMethodDeclaration;
import org.eclipse.cdt.core.parser.ast.ASTAccessVisibility;
import org.eclipse.cdt.internal.core.model.FunctionDeclaration;
import org.eclipse.cdt.internal.core.model.MethodDeclaration;
public class MethodDeclarationHandle extends CElementHandle implements IMethodDeclaration {
private String[] fParameterTypes;
private String fReturnType;
private ASTAccessVisibility fVisibility;
private boolean fIsStatic;
private boolean fIsConstructor;
private boolean fIsDestructor;
public MethodDeclarationHandle(ICElement parent, ICPPMethod method) {
this(parent, ICElement.C_METHOD_DECLARATION, method);
}
protected MethodDeclarationHandle(ICElement parent, int type, ICPPMethod method) {
super(parent, type, method.getName());
fParameterTypes= extractParameterTypes(method);
fReturnType= ASTTypeUtil.getType(method.getType().getReturnType(), false);
fVisibility= getVisibility(method);
fIsStatic= method.isStatic();
fIsConstructor= method instanceof ICPPConstructor;
if (!fIsConstructor)
fIsDestructor= method.isDestructor();
}
@Override
public boolean equals(Object obj) {
if (obj instanceof IMethodDeclaration) {
return MethodDeclaration.equals(this, (IMethodDeclaration) obj);
}
return false;
}
public int getNumberOfParameters() {
return fParameterTypes.length;
}
public String[] getParameterTypes() {
return fParameterTypes;
}
public String getReturnType() {
return fReturnType;
}
public String getSignature() throws CModelException {
return FunctionDeclaration.getSignature(this);
}
public boolean isStatic() throws CModelException {
return fIsStatic;
}
public ASTAccessVisibility getVisibility() throws CModelException {
return fVisibility;
}
public boolean isConstructor() throws CModelException {
return fIsConstructor;
}
public boolean isDestructor() throws CModelException {
return fIsDestructor;
}
}