/*
* Copyright 2013 Guidewire Software, Inc.
*/
package gw.plugin.ij.lang.psi.impl.types;
import com.intellij.psi.PsiClassType;
import com.intellij.psi.PsiElementVisitor;
import com.intellij.psi.PsiJavaCodeReferenceElement;
import com.intellij.psi.PsiReferenceList;
import gw.lang.parser.statements.ITypeVariableExtendsListClause;
import gw.plugin.ij.lang.parser.GosuCompositeElement;
import gw.plugin.ij.lang.psi.IGosuPsiElement;
import gw.plugin.ij.lang.psi.api.types.IGosuCodeReferenceElement;
import gw.plugin.ij.lang.psi.impl.GosuClassReferenceType;
import gw.plugin.ij.lang.psi.impl.GosuElementVisitor;
import gw.plugin.ij.lang.psi.impl.GosuPsiElementImpl;
import org.jetbrains.annotations.NotNull;
public class GosuTypeVariableExtendsListImpl extends GosuPsiElementImpl<ITypeVariableExtendsListClause> implements IGosuPsiElement, PsiReferenceList {
public GosuTypeVariableExtendsListImpl(@NotNull GosuCompositeElement node) {
super(node);
}
@NotNull
public PsiJavaCodeReferenceElement[] getReferenceElements() {
return PsiJavaCodeReferenceElement.EMPTY_ARRAY;
}
@NotNull
public PsiClassType[] getReferencedTypes() {
final IGosuCodeReferenceElement[] refs = findChildrenByClass(IGosuCodeReferenceElement.class);
PsiClassType[] result = new PsiClassType[refs.length];
for (int i = 0; i < result.length; i++) {
result[i] = new GosuClassReferenceType(refs[i]);
}
return result;
}
@NotNull
public Role getRole() {
return Role.EXTENDS_BOUNDS_LIST;
}
@NotNull
public String toString() {
return "Type extends bounds list";
}
@Override
public void accept(@NotNull PsiElementVisitor visitor) {
if( visitor instanceof GosuElementVisitor) {
((GosuElementVisitor)visitor).visitTypeVariableExtendsList(this);
}
else {
visitor.visitElement( this );
}
}
}