/* * Copyright 2000-2016 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 org.jetbrains.plugins.groovy.lang.psi.impl.synthetic; import com.intellij.openapi.util.Pair; import com.intellij.psi.*; import com.intellij.psi.impl.InheritanceImplUtil; import com.intellij.psi.impl.PsiClassImplUtil; import com.intellij.psi.impl.PsiSuperMethodImplUtil; import com.intellij.psi.impl.light.LightElement; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.plugins.groovy.lang.groovydoc.psi.api.GrDocComment; import org.jetbrains.plugins.groovy.lang.psi.GroovyElementVisitor; import org.jetbrains.plugins.groovy.lang.psi.api.statements.GrClassInitializer; import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.GrExtendsClause; import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.GrImplementsClause; import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.GrTypeDefinition; import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.GrTypeDefinitionBody; import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.members.GrMembersDeclaration; import org.jetbrains.plugins.groovy.lang.psi.api.types.GrTypeParameter; import org.jetbrains.plugins.groovy.lang.psi.impl.auxiliary.GrLightIdentifier; import org.jetbrains.plugins.groovy.lang.psi.util.GrClassImplUtil; import java.util.Collection; import java.util.List; public abstract class GrLightTypeDefinitionBase extends LightElement implements GrTypeDefinition { private final @NotNull GrLightModifierList myModifierList; private final @NotNull GrLightTypeParameterList myTypeParameterList; private @Nullable PsiClass myContainingClass; protected GrLightTypeDefinitionBase(@NotNull PsiElement context) { super(context.getManager(), context.getLanguage()); myModifierList = new GrLightModifierList(this); myTypeParameterList = new GrLightTypeParameterList(context); } @NotNull @Override public PsiElement getNameIdentifierGroovy() { return new GrLightIdentifier(getManager(), getName()); } @Nullable @Override public GrDocComment getDocComment() { return null; } @Override public void accept(GroovyElementVisitor visitor) { } @Override public void acceptChildren(GroovyElementVisitor visitor) { } @Override public boolean hasTypeParameters() { return getTypeParameters().length != 0; } @NotNull @Override public GrLightModifierList getModifierList() { return myModifierList; } @Override public boolean isDeprecated() { return false; } @Override public boolean hasModifierProperty(@PsiModifier.ModifierConstant @NonNls @NotNull String name) { return getModifierList().hasModifierProperty(name); } @NotNull @Override public GrTypeParameter[] getTypeParameters() { return getTypeParameterList().getTypeParameters(); } @Override public boolean isInterface() { return false; } @Override public boolean isAnnotationType() { return false; } @Override public boolean isEnum() { return false; } @NotNull @Override public PsiClass[] getSupers(boolean includeSynthetic) { return GrClassImplUtil.getSupers(this, includeSynthetic); } @Nullable @Override public PsiReferenceList getExtendsList() { return null; } @NotNull @Override public PsiClassType[] getSuperTypes(boolean includeSynthetic) { return GrClassImplUtil.getSuperTypes(this, includeSynthetic); } @Nullable @Override public PsiReferenceList getImplementsList() { return null; } @Override public boolean isTrait() { return false; } @Nullable @Override public GrTypeDefinitionBody getBody() { return null; } @Override public String toString() { return "Light Groovy type definition: " + getName(); } @NotNull @Override public GrClassInitializer[] getInitializers() { return GrClassInitializer.EMPTY_ARRAY; } @NotNull @Override public GrMembersDeclaration[] getMemberDeclarations() { return GrMembersDeclaration.EMPTY_ARRAY; } @Nullable @Override public String getQualifiedName() { return null; } @Nullable @Override public GrExtendsClause getExtendsClause() { return null; } @Nullable @Override public GrImplementsClause getImplementsClause() { return null; } @Nullable @Override public PsiField findCodeFieldByName(String name, boolean checkBases) { return GrClassImplUtil.findFieldByName(this, name, checkBases, false); } @NotNull @Override public PsiMethod[] findCodeMethodsByName(@NonNls String name, boolean checkBases) { return GrClassImplUtil.findCodeMethodsByName(this, name, checkBases); } @NotNull @Override public PsiMethod[] findCodeMethodsBySignature(PsiMethod patternMethod, boolean checkBases) { return GrClassImplUtil.findCodeMethodsBySignature(this, patternMethod, checkBases); } @Nullable @Override public PsiClass getSuperClass() { return GrClassImplUtil.getSuperClass(this); } @Override public boolean isAnonymous() { return false; } @NotNull @Override public GrLightTypeParameterList getTypeParameterList() { return myTypeParameterList; } @NotNull @Override public PsiClass[] getInterfaces() { return GrClassImplUtil.getInterfaces(this); } @NotNull @Override public PsiField[] getAllFields() { return GrClassImplUtil.getAllFields(this); } @NotNull @Override public PsiMethod[] getAllMethods() { return GrClassImplUtil.getAllMethods(this); } @NotNull @Override public PsiClass[] getAllInnerClasses() { return PsiClassImplUtil.getAllInnerClasses(this); } @Nullable @Override public PsiField findFieldByName(@NonNls String name, boolean checkBases) { return GrClassImplUtil.findFieldByName(this, name, checkBases, true); } @Nullable @Override public PsiMethod findMethodBySignature(PsiMethod patternMethod, boolean checkBases) { return GrClassImplUtil.findMethodBySignature(this, patternMethod, checkBases); } @NotNull @Override public PsiMethod[] findMethodsBySignature(PsiMethod patternMethod, boolean checkBases) { return GrClassImplUtil.findMethodsBySignature(this, patternMethod, checkBases); } @NotNull @Override public PsiMethod[] findMethodsByName(@NonNls String name, boolean checkBases) { return GrClassImplUtil.findMethodsByName(this, name, checkBases); } @NotNull @Override public List<Pair<PsiMethod, PsiSubstitutor>> findMethodsAndTheirSubstitutorsByName(@NonNls String name, boolean checkBases) { return GrClassImplUtil.findMethodsAndTheirSubstitutorsByName(this, name, checkBases); } @NotNull @Override public List<Pair<PsiMethod, PsiSubstitutor>> getAllMethodsAndTheirSubstitutors() { return GrClassImplUtil.getAllMethodsAndTheirSubstitutors(this); } @Nullable @Override public PsiClass findInnerClassByName(@NonNls String name, boolean checkBases) { return GrClassImplUtil.findInnerClassByName(this, name, checkBases); } @Nullable @Override public PsiElement getLBrace() { return null; } @Nullable @Override public PsiElement getRBrace() { return null; } @Nullable @Override public PsiIdentifier getNameIdentifier() { return null; } @Override public PsiElement getScope() { return null; } @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 myContainingClass; } @NotNull @Override public Collection<HierarchicalMethodSignature> getVisibleSignatures() { return PsiSuperMethodImplUtil.getVisibleSignatures(this); } @Override public PsiElement setName(@NonNls @NotNull String name) { throw new UnsupportedOperationException(); } @NotNull public GrLightTypeDefinitionBase setContainingClass(@Nullable PsiClass containingClass) { myContainingClass = containingClass; return this; } }