package org.jetbrains.android.augment; import com.intellij.lang.java.JavaLanguage; import com.intellij.navigation.ItemPresentation; import com.intellij.navigation.ItemPresentationProviders; import com.intellij.openapi.util.Iconable; 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.PsiImplUtil; import com.intellij.psi.impl.light.LightElement; import com.intellij.psi.impl.light.LightEmptyImplementsList; import com.intellij.psi.impl.light.LightModifierList; import com.intellij.psi.impl.light.LightTypeParameterListBuilder; import com.intellij.psi.javadoc.PsiDocComment; import com.intellij.psi.scope.PsiScopeProcessor; import com.intellij.psi.search.SearchScope; import com.intellij.psi.util.PsiUtil; import com.intellij.util.IncorrectOperationException; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import javax.swing.*; import java.util.Collection; import java.util.Collections; import java.util.List; /** * @author Eugene.Kudelevsky */ abstract class AndroidLightClassBase extends LightElement implements PsiClass, SyntheticElement { protected AndroidLightClassBase(@NotNull PsiManager psiManager) { super(psiManager, JavaLanguage.INSTANCE); } @Override public void checkAdd(@NotNull PsiElement element) throws IncorrectOperationException { throw new IncorrectOperationException("Cannot add elements to R class"); } @Override public PsiElement add(@NotNull PsiElement element) throws IncorrectOperationException { throw new IncorrectOperationException(); } @Override public PsiElement addBefore(@NotNull PsiElement element, PsiElement anchor) throws IncorrectOperationException { throw new IncorrectOperationException(); } @Override public PsiElement addAfter(@NotNull PsiElement element, PsiElement anchor) throws IncorrectOperationException { throw new IncorrectOperationException(); } @Override public boolean isInterface() { return false; } @Override public boolean isAnnotationType() { return false; } @Override public boolean isEnum() { return false; } @Override public PsiReferenceList getExtendsList() { return new LightEmptyImplementsList(myManager); } @Override public PsiReferenceList getImplementsList() { return new LightEmptyImplementsList(myManager); } @NotNull @Override public PsiClassType[] getExtendsListTypes() { return PsiClassType.EMPTY_ARRAY; } @NotNull @Override public PsiClassType[] getImplementsListTypes() { return PsiClassType.EMPTY_ARRAY; } @Override public PsiClass getSuperClass() { return null; } @Override public PsiClass[] getInterfaces() { return PsiClass.EMPTY_ARRAY; } @NotNull @Override public PsiClass[] getSupers() { return PsiClass.EMPTY_ARRAY; } @NotNull @Override public PsiClassType[] getSuperTypes() { return PsiClassType.EMPTY_ARRAY; } @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 getFields(); } @NotNull @Override public PsiMethod[] getAllMethods() { return PsiMethod.EMPTY_ARRAY; } @NotNull @Override public PsiClass[] getAllInnerClasses() { return getInnerClasses(); } @Override public PsiField findFieldByName(@NonNls String name, boolean checkBases) { final PsiField[] fields = getFields(); for (final PsiField field : fields) { if (name.equals(field.getName())) return field; } return null; } @Override public PsiMethod findMethodBySignature(PsiMethod patternMethod, boolean checkBases) { return null; } @NotNull @Override public PsiMethod[] findMethodsBySignature(PsiMethod patternMethod, boolean checkBases) { return PsiMethod.EMPTY_ARRAY; } @NotNull @Override public PsiMethod[] findMethodsByName(@NonNls String name, boolean checkBases) { return PsiMethod.EMPTY_ARRAY; } @NotNull @Override public List<Pair<PsiMethod, PsiSubstitutor>> findMethodsAndTheirSubstitutorsByName(@NonNls String name, boolean checkBases) { return Collections.emptyList(); } @NotNull @Override public List<Pair<PsiMethod, PsiSubstitutor>> getAllMethodsAndTheirSubstitutors() { return Collections.emptyList(); } @Override public PsiClass findInnerClassByName(@NonNls String name, boolean checkBases) { return null; } @Override public PsiElement getLBrace() { return null; } @Override public PsiElement getRBrace() { return null; } @Override public PsiIdentifier getNameIdentifier() { return null; } @Nullable @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); } @NotNull @Override public Collection<HierarchicalMethodSignature> getVisibleSignatures() { return Collections.emptyList(); } @Override public PsiElement setName(@NonNls @NotNull String name) throws IncorrectOperationException { throw new IncorrectOperationException("Cannot change the name of " + getQualifiedName() + " class"); } @Override public PsiDocComment getDocComment() { return null; } @Override public boolean isDeprecated() { return false; } @Override public boolean hasTypeParameters() { return false; } @Override public PsiTypeParameterList getTypeParameterList() { return new LightTypeParameterListBuilder(myManager, getLanguage()); } @NotNull @Override public PsiTypeParameter[] getTypeParameters() { return PsiTypeParameter.EMPTY_ARRAY; } @Override public PsiModifierList getModifierList() { return new LightModifierList(myManager, getLanguage(), PsiModifier.PUBLIC, PsiModifier.STATIC, PsiModifier.FINAL); } @Override public boolean hasModifierProperty(@PsiModifier.ModifierConstant @NonNls @NotNull String name) { final PsiModifierList list = getModifierList(); return list != null && list.hasModifierProperty(name); } @Override protected boolean isVisibilitySupported() { return true; } @Override protected Icon getElementIcon(@Iconable.IconFlags int flags) { return PsiClassImplUtil.getClassIcon(flags, this); } @Override public boolean isEquivalentTo(PsiElement another) { return PsiClassImplUtil.isClassEquivalentTo(this, another); } @NotNull @Override public SearchScope getUseScope() { return PsiImplUtil.getMemberUseScope(this); } @Override public ItemPresentation getPresentation() { return ItemPresentationProviders.getItemPresentation(this); } @Nullable @Override public PsiFile getContainingFile() { final PsiClass containingClass = getContainingClass(); return containingClass == null ? null : containingClass.getContainingFile(); } @Override public boolean processDeclarations(@NotNull final PsiScopeProcessor processor, @NotNull final ResolveState state, final PsiElement lastParent, @NotNull final PsiElement place) { return PsiClassImplUtil.processDeclarationsInClass(this, processor, state, null, lastParent, place, PsiUtil.getLanguageLevel(place), false); } }