/*
* Copyright 2013 Guidewire Software, Inc.
*/
package gw.plugin.ij.lang.psi.impl.types;
import com.intellij.psi.PsiElementVisitor;
import com.intellij.psi.PsiTypeParameter;
import gw.lang.parser.expressions.ITypeVariableListClause;
import gw.plugin.ij.lang.parser.GosuCompositeElement;
import gw.plugin.ij.lang.psi.api.types.IGosuTypeVariable;
import gw.plugin.ij.lang.psi.api.types.IGosuTypeVariableList;
import gw.plugin.ij.lang.psi.impl.GosuElementVisitor;
import gw.plugin.ij.lang.psi.impl.GosuPsiElementImpl;
import org.jetbrains.annotations.NotNull;
import java.util.Arrays;
/**
*/
public class GosuTypeVariableListImpl extends GosuPsiElementImpl<ITypeVariableListClause> implements IGosuTypeVariableList {
public GosuTypeVariableListImpl(@NotNull GosuCompositeElement node) {
super(node);
}
@NotNull
public String toString() {
return "Type variable list";
}
@NotNull
public IGosuTypeVariable[] getTypeParameters() {
return findChildrenByClass(IGosuTypeVariable.class);
}
public int getTypeParameterIndex(PsiTypeParameter typeParameter) {
final IGosuTypeVariable[] typeParameters = getTypeParameters();
for (int i = 0; i < typeParameters.length; i++) {
if (typeParameters[i].equals(typeParameter)) {
return i;
}
}
return -1;
}
@Override
public void accept(@NotNull PsiElementVisitor visitor) {
if( visitor instanceof GosuElementVisitor) {
((GosuElementVisitor)visitor).visitTypeVariableList(this);
}
else {
visitor.visitElement( this );
}
}
}