/*
* Copyright 2013 Guidewire Software, Inc.
*/
package gw.plugin.ij.lang.psi.impl.expressions;
import com.intellij.psi.PsiAnnotationMemberValue;
import com.intellij.psi.PsiAnnotationOwner;
import com.intellij.psi.PsiAnnotationParameterList;
import com.intellij.psi.PsiClass;
import com.intellij.psi.PsiElementVisitor;
import com.intellij.psi.PsiJavaCodeReferenceElement;
import com.intellij.psi.PsiType;
import com.intellij.psi.impl.source.PsiClassReferenceType;
import com.intellij.psi.impl.source.tree.java.PsiAnnotationParamListImpl;
import com.intellij.psi.meta.PsiMetaData;
import gw.plugin.ij.lang.parser.GosuCompositeElement;
import gw.plugin.ij.lang.psi.api.auxilary.annotation.IGosuAnnotation;
import gw.plugin.ij.lang.psi.impl.GosuElementVisitor;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
public class GosuAnnotationExpressionImpl extends GosuNewExpressionImpl implements IGosuAnnotation {
public GosuAnnotationExpressionImpl(GosuCompositeElement node) {
super(node);
}
@Nullable
@Override
public String getShortName() {
final PsiType type = getType();
if (type instanceof PsiClassReferenceType) {
final PsiClass klass = ((PsiClassReferenceType) type).resolve();
if (klass != null) {
return klass.getName();
}
}
return null;
}
@Override
public String getQualifiedName() {
final PsiType type = getType();
if (type instanceof PsiClassReferenceType) {
final PsiClass klass = ((PsiClassReferenceType) type).resolve();
if (klass != null) {
return klass.getQualifiedName();
}
}
return null;
}
public PsiClass resolve() {
final PsiType type = getType();
if (type instanceof PsiClassReferenceType) {
final PsiClass klass = ((PsiClassReferenceType) type).resolve();
return klass;
}
return null;
}
@NotNull
@Override
public PsiAnnotationParameterList getParameterList() {
// This is incorect but we have no another implementation
return new PsiAnnotationParamListImpl(getNode());
}
@Override
public PsiJavaCodeReferenceElement getNameReferenceElement() {
return null;
}
@Override
public PsiAnnotationMemberValue findAttributeValue(@NonNls String attributeName) {
return null;
}
@Override
public PsiAnnotationMemberValue findDeclaredAttributeValue(@NonNls String attributeName) {
return null;
}
@Nullable
@Override
public <T extends PsiAnnotationMemberValue> T setDeclaredAttributeValue(@NonNls String attributeName, @Nullable T value) {
return null;
}
@Nullable
@Override
public PsiAnnotationOwner getOwner() {
return null;
}
@Override
public PsiMetaData getMetaData() {
return null;
}
@Override
public void accept( @NotNull PsiElementVisitor visitor ) {
if( visitor instanceof GosuElementVisitor) {
((GosuElementVisitor)visitor).visitAnnotation(this);
}
else {
visitor.visitElement( this );
}
}
}