package com.google.devtools.j2objc.jdt;
import com.google.devtools.j2objc.types.GeneratedVariableElement;
import com.google.devtools.j2objc.util.ElementUtil;
import java.util.List;
import javax.lang.model.element.AnnotationMirror;
import javax.lang.model.element.Element;
import javax.lang.model.element.ElementKind;
import javax.lang.model.element.ExecutableElement;
import javax.lang.model.element.TypeElement;
import org.eclipse.jdt.core.IJavaElement;
import org.eclipse.jdt.core.dom.IAnnotationBinding;
import org.eclipse.jdt.core.dom.IBinding;
import org.eclipse.jdt.core.dom.IMethodBinding;
import org.eclipse.jdt.core.dom.ITypeBinding;
import org.eclipse.jdt.core.dom.IVariableBinding;
/**
* An associated IVariableBinding implementation for a GeneratedVariableElement.
*/
public class GeneratedVariableBinding implements IVariableBinding {
private final GeneratedVariableElement element;
public GeneratedVariableBinding(GeneratedVariableElement element) {
this.element = element;
}
public GeneratedVariableElement asElement() {
return element;
}
@Override
public int getKind() {
return IBinding.VARIABLE;
}
@Override
public String getName() {
return element.getName();
}
@Override
public String getKey() {
throw new AssertionError("not implemented");
}
@Override
public ITypeBinding getType() {
return BindingConverter.unwrapTypeMirrorIntoTypeBinding(element.asType());
}
@Override
public boolean isField() {
return element.getKind().isField();
}
@Override
public boolean isParameter() {
return element.getKind() == ElementKind.PARAMETER;
}
@Override
public boolean isEnumConstant() {
return element.getKind() == ElementKind.ENUM_CONSTANT;
}
@Override
public Object getConstantValue() {
return element.getConstantValue();
}
@Override
public IMethodBinding getDeclaringMethod() {
Element enclosing = element.getEnclosingElement();
return enclosing != null && ElementUtil.isExecutableElement(enclosing)
? BindingConverter.unwrapExecutableElement((ExecutableElement) enclosing) : null;
}
@Override
public ITypeBinding getDeclaringClass() {
Element enclosing = element.getEnclosingElement();
return enclosing != null && ElementUtil.isTypeElement(enclosing)
? BindingConverter.unwrapTypeElement((TypeElement) enclosing) : null;
}
@Override
public IVariableBinding getVariableDeclaration() {
return this;
}
@Override
public boolean isSynthetic() {
return element.isSynthetic();
}
@Override
public int getModifiers() {
return ElementUtil.fromModifierSet(element.getModifiers())
| (isSynthetic() ? ElementUtil.ACC_SYNTHETIC : 0);
}
@Override
public boolean isEffectivelyFinal() {
return false;
}
@Override
public boolean isRecovered() {
return false;
}
@Override
public boolean isDeprecated() {
return false;
}
@Override
public IAnnotationBinding[] getAnnotations() {
List<? extends AnnotationMirror> mirrors = element.getAnnotationMirrors();
IAnnotationBinding[] result = new IAnnotationBinding[mirrors.size()];
for (int i = 0; i < mirrors.size(); i++) {
result[i] = BindingConverter.unwrapAnnotationMirror(mirrors.get(i));
}
return result;
}
@Override
public int getVariableId() {
throw new AssertionError("not implemented");
}
@Override
public IJavaElement getJavaElement() {
throw new AssertionError("not implemented");
}
@Override
public boolean isEqualTo(IBinding binding) {
return this == binding;
}
}