/*
* Copyright 2013 Guidewire Software, Inc.
*/
package gw.plugin.ij.lang.psi.custom;
import com.intellij.extapi.psi.PsiElementBase;
import com.intellij.lang.ASTNode;
import com.intellij.lang.Language;
import com.intellij.openapi.util.TextRange;
import com.intellij.psi.HierarchicalMethodSignature;
import com.intellij.psi.PsiClass;
import com.intellij.psi.PsiCodeBlock;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiIdentifier;
import com.intellij.psi.PsiMethod;
import com.intellij.psi.PsiMethodReceiver;
import com.intellij.psi.PsiModifier;
import com.intellij.psi.PsiModifierList;
import com.intellij.psi.PsiParameterList;
import com.intellij.psi.PsiReferenceList;
import com.intellij.psi.PsiSubstitutor;
import com.intellij.psi.PsiType;
import com.intellij.psi.PsiTypeElement;
import com.intellij.psi.PsiTypeParameter;
import com.intellij.psi.PsiTypeParameterList;
import com.intellij.psi.impl.light.LightParameter;
import com.intellij.psi.impl.light.LightParameterListBuilder;
import com.intellij.psi.javadoc.PsiDocComment;
import com.intellij.psi.util.MethodSignature;
import com.intellij.psi.util.MethodSignatureBackedByPsiMethod;
import com.intellij.util.IncorrectOperationException;
import gw.lang.reflect.IMethodInfo;
import gw.lang.reflect.IParameterInfo;
import gw.plugin.ij.lang.GosuLanguage;
import gw.plugin.ij.lang.psi.impl.GosuBaseElementImpl;
import gw.plugin.ij.util.GosuModuleUtil;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.List;
public class GosuXMLMethod extends PsiElementBase implements PsiMethod {
@NotNull
private final IMethodInfo mi;
private final CustomGosuClass psiClass;
public GosuXMLMethod(@NotNull IMethodInfo mi, CustomGosuClass psiClass) {
this.mi = mi;
this.psiClass = psiClass;
putUserData(GosuModuleUtil.KEY_GOSU_MODULE, mi.getOwnersType().getTypeLoader().getModule());
}
@NotNull
@Override
public String getName() {
return mi.getDisplayName();
}
@Override
public PsiType getReturnType() {
return GosuBaseElementImpl.createType(mi.getReturnType(), psiClass);
}
@Override
public PsiTypeElement getReturnTypeElement() {
return null;
}
@NotNull
@Override
public PsiParameterList getParameterList() {
LightParameterListBuilder builder = new LightParameterListBuilder(psiClass.getManager(), getLanguage());
for (IParameterInfo parameter : mi.getParameters()) {
PsiType type = GosuBaseElementImpl.createType(parameter.getFeatureType(), this);
builder.addParameter(new LightParameter(parameter.getName(), type, this, getLanguage()));
}
return builder;
}
@NotNull
@Override
public PsiReferenceList getThrowsList() {
return null;
}
@Override
public PsiCodeBlock getBody() {
return null;
}
@Override
public boolean isConstructor() {
return false;
}
@Override
public boolean isVarArgs() {
return false;
}
@NotNull
@Override
public MethodSignature getSignature(@NotNull PsiSubstitutor substitutor) {
return null;
}
@Override
public PsiIdentifier getNameIdentifier() {
return new CustomGosuIdentifier(this);
}
@NotNull
@Override
public PsiMethod[] findSuperMethods() {
return PsiMethod.EMPTY_ARRAY;
}
@NotNull
@Override
public PsiMethod[] findSuperMethods(boolean checkAccess) {
return PsiMethod.EMPTY_ARRAY;
}
@NotNull
@Override
public PsiMethod[] findSuperMethods(PsiClass parentClass) {
return PsiMethod.EMPTY_ARRAY;
}
@NotNull
@Override
public List<MethodSignatureBackedByPsiMethod> findSuperMethodSignaturesIncludingStatic(boolean checkAccess) {
return null;
}
@Override
public PsiMethod findDeepestSuperMethod() {
return null;
}
@NotNull
@Override
public PsiMethod[] findDeepestSuperMethods() {
return PsiMethod.EMPTY_ARRAY;
}
@NotNull
@Override
public PsiModifierList getModifierList() {
return null;
}
@Override
public boolean hasModifierProperty(@PsiModifier.ModifierConstant @NonNls @NotNull String name) {
return false;
}
@Nullable
@Override
public PsiElement setName(@NonNls @NotNull String name) throws IncorrectOperationException {
return null;
}
@NotNull
@Override
public HierarchicalMethodSignature getHierarchicalMethodSignature() {
return null;
}
@Override
public PsiType getReturnTypeNoResolve() {
return null;
}
@Override
public PsiDocComment getDocComment() {
return null;
}
@Override
public boolean isDeprecated() {
return false;
}
@Override
public boolean hasTypeParameters() {
return false;
}
@Override
public PsiTypeParameterList getTypeParameterList() {
return null;
}
@NotNull
@Override
public PsiTypeParameter[] getTypeParameters() {
return PsiTypeParameter.EMPTY_ARRAY;
}
@Override
public PsiClass getContainingClass() {
return psiClass;
}
@NotNull
@Override
public Language getLanguage() {
return GosuLanguage.instance();
}
@NotNull
@Override
public PsiElement[] getChildren() {
return PsiElement.EMPTY_ARRAY;
}
@Override
public PsiElement getParent() {
return psiClass;
}
@Override
public PsiElement getFirstChild() {
return null;
}
@Override
public PsiElement getLastChild() {
return null;
}
@Override
public PsiElement getNextSibling() {
return null;
}
@Override
public PsiElement getPrevSibling() {
return null;
}
@NotNull
@Override
public TextRange getTextRange() {
return new TextRange(0, 1);
}
@Override
public int getStartOffsetInParent() {
return 0;
}
@Override
public int getTextLength() {
return 0;
}
@Override
public PsiElement findElementAt(int offset) {
return null;
}
@Override
public int getTextOffset() {
return 0;
}
@NotNull
@Override
public String getText() {
return CustomGosuClass.getSignature(mi);
}
@NotNull
@Override
public char[] textToCharArray() {
return new char[0];
}
@Override
public boolean textContains(char c) {
return false;
}
@Override
public ASTNode getNode() {
return psiClass.getContainingFile().getNode();
}
@Override
public boolean isWritable() {
return false;
}
@Nullable
@Override
public PsiFile getContainingFile() {
return null;
}
@NotNull
@Override
public PsiElement getNavigationElement() {
return psiClass.getNavigationElement();
}
}