/* * Copyright 2003-2013 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package jetbrains.mps.idea.java.psi.impl; import com.intellij.openapi.util.Pair; import com.intellij.psi.HierarchicalMethodSignature; import com.intellij.psi.PsiAnnotation; import com.intellij.psi.PsiClass; import com.intellij.psi.PsiClassInitializer; import com.intellij.psi.PsiClassType; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiField; import com.intellij.psi.PsiIdentifier; import com.intellij.psi.PsiJavaCodeReferenceElement; import com.intellij.psi.PsiManager; import com.intellij.psi.PsiMethod; import com.intellij.psi.PsiModifier.ModifierConstant; import com.intellij.psi.PsiModifierList; import com.intellij.psi.PsiReferenceList; import com.intellij.psi.PsiReferenceList.Role; import com.intellij.psi.PsiSubstitutor; import com.intellij.psi.PsiTypeParameter; import com.intellij.psi.PsiTypeParameterList; import com.intellij.psi.PsiTypeParameterListOwner; import com.intellij.psi.impl.InheritanceImplUtil; import com.intellij.psi.impl.PsiClassImplUtil; import com.intellij.psi.impl.PsiSuperMethodImplUtil; import com.intellij.psi.impl.light.JavaIdentifier; import com.intellij.psi.javadoc.PsiDocComment; import com.intellij.util.IncorrectOperationException; import jetbrains.mps.idea.core.psi.impl.MPSPsiNode; import jetbrains.mps.idea.core.psi.impl.MPSPsiNodeBase; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.mps.openapi.model.SNodeId; import java.util.Collection; import java.util.List; /** * danilla 2/11/13 */ public class MPSPsiTypeParameter extends MPSPsiNode implements PsiTypeParameter { public MPSPsiTypeParameter(SNodeId id, String concept, String containingRole, PsiManager manager) { super(id, concept, containingRole, manager); } @Nullable @Override public String getQualifiedName() { return null; } @Override public boolean isInterface() { return false; } @Override public boolean isAnnotationType() { return false; } @Override public boolean isEnum() { return false; } @NotNull @Override public PsiReferenceList getExtendsList() { return new EmptyPsiRefList(Role.EXTENDS_LIST, getManager()); } @Nullable @Override public PsiReferenceList getImplementsList() { return null; } @NotNull @Override public PsiClassType[] getExtendsListTypes() { return PsiClassType.EMPTY_ARRAY; } @NotNull @Override public PsiClassType[] getImplementsListTypes() { return PsiClassType.EMPTY_ARRAY; } @Nullable @Override public PsiClass getSuperClass() { return PsiClassImplUtil.getSuperClass(this); } @Override public PsiClass[] getInterfaces() { return PsiClassImplUtil.getInterfaces(this); } @NotNull @Override public PsiClass[] getSupers() { return PsiClassImplUtil.getSupers(this); } @NotNull @Override public PsiClassType[] getSuperTypes() { return PsiClassImplUtil.getSuperTypes(this); } @NotNull @Override public PsiField[] getFields() { return PsiField.EMPTY_ARRAY; } @NotNull @Override public PsiMethod[] getMethods() { return PsiMethod.EMPTY_ARRAY; } @NotNull @Override public PsiMethod[] getConstructors() { return PsiMethod.EMPTY_ARRAY; } @NotNull @Override public PsiClass[] getInnerClasses() { return PsiClass.EMPTY_ARRAY; } @NotNull @Override public PsiClassInitializer[] getInitializers() { return PsiClassInitializer.EMPTY_ARRAY; } @NotNull @Override public PsiField[] getAllFields() { return PsiField.EMPTY_ARRAY; } @NotNull @Override public PsiMethod[] getAllMethods() { return PsiMethod.EMPTY_ARRAY; } @NotNull @Override public PsiClass[] getAllInnerClasses() { return PsiClass.EMPTY_ARRAY; } @Nullable @Override public PsiField findFieldByName(@NonNls String name, boolean checkBases) { return PsiClassImplUtil.findFieldByName(this, name, checkBases); } @Nullable @Override public PsiMethod findMethodBySignature(PsiMethod patternMethod, boolean checkBases) { return PsiClassImplUtil.findMethodBySignature(this, patternMethod, checkBases); } @NotNull @Override public PsiMethod[] findMethodsBySignature(PsiMethod patternMethod, boolean checkBases) { return PsiClassImplUtil.findMethodsBySignature(this, patternMethod, checkBases); } @NotNull @Override public PsiMethod[] findMethodsByName(@NonNls String name, boolean checkBases) { return PsiClassImplUtil.findMethodsByName(this, name, checkBases); } @NotNull @Override public List<Pair<PsiMethod, PsiSubstitutor>> findMethodsAndTheirSubstitutorsByName(@NonNls String name, boolean checkBases) { return PsiClassImplUtil.findMethodsAndTheirSubstitutorsByName(this, name, checkBases); } @NotNull @Override public List<Pair<PsiMethod, PsiSubstitutor>> getAllMethodsAndTheirSubstitutors() { return PsiClassImplUtil.getAllWithSubstitutorsByMap(this, PsiClassImplUtil.MemberType.METHOD); } @Nullable @Override public PsiClass findInnerClassByName(@NonNls String name, boolean checkBases) { return PsiClassImplUtil.findInnerByName(this, name, checkBases); } @Nullable @Override public PsiElement getLBrace() { return null; } @Nullable @Override public PsiElement getRBrace() { return null; } @Nullable @Override public PsiIdentifier getNameIdentifier() { return new JavaIdentifier(getManager(), this); } @Override public PsiElement getScope() { // hmm. copied from PsiTypeParameterImpl // maybe we need just getParent() since our parent is class, not typeParamList return getParent().getParent(); } @Override public boolean isInheritor(@NotNull PsiClass baseClass, boolean checkDeep) { return InheritanceImplUtil.isInheritor(this, baseClass, checkDeep); } @Override public boolean isInheritorDeep(PsiClass baseClass, @Nullable PsiClass classToByPass) { return InheritanceImplUtil.isInheritorDeep(this, baseClass, classToByPass); } @Nullable @Override public PsiClass getContainingClass() { return null; } @NotNull @Override public Collection<HierarchicalMethodSignature> getVisibleSignatures() { return PsiSuperMethodImplUtil.getVisibleSignatures(this); } @Override public PsiElement setName(@NonNls @NotNull String name) throws IncorrectOperationException { return this; } @Nullable @Override public PsiTypeParameterListOwner getOwner() { PsiElement parent = getParent(); if (!(parent instanceof PsiTypeParameterListOwner)) { return null; } return (PsiTypeParameterListOwner) parent; } @Override public int getIndex() { return 0; //To change body of implemented methods use File | Settings | File Templates. } @NotNull @Override public PsiAnnotation[] getAnnotations() { return new PsiAnnotation[0]; //To change body of implemented methods use File | Settings | File Templates. } @NotNull @Override public PsiAnnotation[] getApplicableAnnotations() { return new PsiAnnotation[0]; //To change body of implemented methods use File | Settings | File Templates. } @Nullable @Override public PsiAnnotation findAnnotation(@NotNull @NonNls String qualifiedName) { return null; //To change body of implemented methods use File | Settings | File Templates. } @NotNull @Override public PsiAnnotation addAnnotation(@NotNull @NonNls String qualifiedName) { return null; //To change body of implemented methods use File | Settings | File Templates. } @Nullable @Override public PsiDocComment getDocComment() { return null; //To change body of implemented methods use File | Settings | File Templates. } @Override public boolean isDeprecated() { return false; //To change body of implemented methods use File | Settings | File Templates. } @Override public boolean hasTypeParameters() { return false; //To change body of implemented methods use File | Settings | File Templates. } @Nullable @Override public PsiTypeParameterList getTypeParameterList() { return null; //To change body of implemented methods use File | Settings | File Templates. } @NotNull @Override public PsiTypeParameter[] getTypeParameters() { return PsiTypeParameter.EMPTY_ARRAY; } @Nullable @Override public PsiModifierList getModifierList() { return null; //To change body of implemented methods use File | Settings | File Templates. } @Override public boolean hasModifierProperty(@ModifierConstant @NonNls @NotNull String name) { return false; //To change body of implemented methods use File | Settings | File Templates. } class EmptyPsiRefList extends MPSPsiNodeBase implements PsiReferenceList { private Role myRole; EmptyPsiRefList(Role role, PsiManager manager) { super(manager); myRole = role; } @Override public String toString() { return null; //To change body of implemented methods use File | Settings | File Templates. } @NotNull @Override public PsiJavaCodeReferenceElement[] getReferenceElements() { return PsiJavaCodeReferenceElement.EMPTY_ARRAY; } @NotNull @Override public PsiClassType[] getReferencedTypes() { return PsiClassType.EMPTY_ARRAY; } @Override public Role getRole() { return myRole; } } }