package at.bestsolution.efxclipse.tooling.model.internal;
import org.eclipse.jdt.core.Flags;
import org.eclipse.jdt.core.IJavaElement;
import org.eclipse.jdt.core.IMethod;
import org.eclipse.jdt.core.IType;
import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.jdt.core.Signature;
import at.bestsolution.efxclipse.tooling.model.IFXObjectProperty;
public class FXObjectPoperty extends FXProperty implements IFXObjectProperty {
private String erasedFQNType;
private IType type;
private Boolean valueOf;
private IMethod valueOfMethod;
private boolean valueOfMethodResolved;
public FXObjectPoperty(FXClass fxClass, String name, IJavaElement javaElement, String erasedFQNType, boolean isStatic) {
super(fxClass, name, javaElement, isStatic);
this.erasedFQNType = erasedFQNType;
}
@Override
public String toString() {
return "FXObjectPoperty(" + getName() + ")";
}
@Override
public String getElementTypeAsString(boolean fqn) {
return fqn ? erasedFQNType : Signature.getSimpleName(erasedFQNType);
}
@Override
public boolean hasValueOf() {
if( valueOf == null ) {
valueOf = Boolean.valueOf(getValueOfMethod() != null );
}
return valueOf.booleanValue();
}
public IMethod getValueOfMethod() {
if( ! valueOfMethodResolved ) {
try {
for( IMethod m : getElementType().getMethods() ) {
if( Flags.isStatic(m.getFlags()) && Flags.isPublic(m.getFlags()) && "valueOf".equals(m.getElementName()) ) {
valueOfMethod = m;
}
}
} catch (JavaModelException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
valueOfMethodResolved = true;
}
return valueOfMethod;
}
@Override
public IType getElementType() {
if (type == null) {
try {
type = getFXClass().getJavaProject().findType(erasedFQNType);
} catch (JavaModelException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return type;
}
}