/*******************************************************************************
* Copyright (c) 2009, 2015, 2016 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
* Zend Technologies
*******************************************************************************/
/**
*
*/
package org.eclipse.php.core.ast.nodes;
import org.eclipse.dltk.ast.Modifiers;
import org.eclipse.dltk.core.DLTKCore;
import org.eclipse.dltk.core.IMethod;
import org.eclipse.dltk.core.IModelElement;
import org.eclipse.dltk.core.ModelException;
/**
* A PHP function binding. This class is also the base class for the
* {@link MethodBinding} implementation.
*
* @author shalom
*/
public class FunctionBinding implements IFunctionBinding {
protected static final int VALID_MODIFIERS = Modifiers.AccPublic | Modifiers.AccProtected | Modifiers.AccPrivate
| Modifiers.AccDefault | Modifiers.AccStatic | Modifiers.AccFinal | Modifiers.AccAbstract;
protected BindingResolver resolver;
protected IMethod modelElement;
/**
* Constructs a new FunctionBinding.
*
* @param resolver
* A {@link BindingResolver}.
* @param modelElement
* An {@link IMethod}.
*/
public FunctionBinding(BindingResolver resolver, IMethod modelElement) {
this.resolver = resolver;
this.modelElement = modelElement;
}
/*
* (non-Javadoc)
*
* @see org.eclipse.php.internal.core.ast.nodes.IFunctionBinding#
* getExceptionTypes ()
*/
public ITypeBinding[] getExceptionTypes() {
// Get an array of PHPDocFields
// ArrayList<ITypeBinding> exceptions = new ArrayList<ITypeBinding>();
// PHPDocBlock docBlock = PHPModelUtils.getDocBlock(modelElement);
// for (PHPDocTag tag : docBlock.getTags(TagKind.THROWS)) {
// List<TypeReference> references = tag.getTypeReferences();
// TODO - create ITypeBinding array from this TypeReference
// array
// }
return null;
}
/*
* (non-Javadoc)
*
* @see org.eclipse.php.internal.core.ast.nodes.IFunctionBinding#getName()
*/
public String getName() {
return modelElement.getElementName();
}
/*
* (non-Javadoc)
*
* @see org.eclipse.php.internal.core.ast.nodes.IFunctionBinding#
* getParameterTypes ()
*/
public ITypeBinding[] getParameterTypes() {
// TODO - Create the parameters types according to the defined types in
// the function declaration
// and in its DocBlock.
return null;
}
/*
* (non-Javadoc)
*
* @see
* org.eclipse.php.internal.core.ast.nodes.IFunctionBinding#getReturnType()
*/
public ITypeBinding[] getReturnType() {
return resolver.getMethodReturnTypeBinding(modelElement);
}
/*
* (non-Javadoc)
*
* @see org.eclipse.php.internal.core.ast.nodes.IFunctionBinding#isVarargs()
*/
public boolean isVarargs() {
// TODO
return false;
}
/*
* (non-Javadoc)
*
* @see org.eclipse.php.internal.core.ast.nodes.IBinding#getKey()
*/
public String getKey() {
return modelElement.getHandleIdentifier();
}
/*
* (non-Javadoc)
*
* @see org.eclipse.php.internal.core.ast.nodes.IBinding#getKind()
*/
public int getKind() {
return IBinding.METHOD;
}
/*
* (non-Javadoc)
*
* @see org.eclipse.php.internal.core.ast.nodes.IBinding#getModifiers()
*/
public int getModifiers() {
try {
return modelElement.getFlags() & VALID_MODIFIERS;
} catch (ModelException e) {
if (DLTKCore.DEBUG) {
e.printStackTrace();
}
}
return 0;
}
/*
* (non-Javadoc)
*
* @see org.eclipse.php.internal.core.ast.nodes.IBinding#getPHPElement()
*/
public IModelElement getPHPElement() {
return modelElement;
}
/*
* (non-Javadoc)
*
* @see org.eclipse.php.internal.core.ast.nodes.IBinding#isDeprecated()
*/
public boolean isDeprecated() {
return false;
}
}