package fr.adrienbrault.idea.symfony2plugin.util.psi;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiNamedElement;
import com.intellij.psi.tree.IElementType;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.Arrays;
/**
* @author Daniel Espendiller <daniel@espendiller.net>
*/
public class PsiElementAssertUtil {
public static boolean isNotNullAndIsElementType(@Nullable PsiElement psiElement, @NotNull IElementType... iElementType) {
return psiElement != null && Arrays.asList(iElementType).contains(psiElement.getNode().getElementType());
}
@Nullable
public static <T extends PsiElement> T getParentOfTypeOrNull(@NotNull PsiElement element, @NotNull Class<T> aClass) {
PsiElement parent = element.getParent();
return aClass.isInstance(parent) ? (T) parent : null;
}
@Nullable
public static <T extends PsiNamedElement> T getParentOfTypeWithNameOrNull(@NotNull PsiElement element, @NotNull Class<T> aClass, @NotNull String name) {
PsiElement parent = element.getParent();
if(!aClass.isInstance(parent) || !(parent instanceof PsiNamedElement) || !name.equals(((PsiNamedElement) parent).getName())) {
return null;
}
return (T) parent;
}
@Nullable
public static <T extends PsiElement> T getInstanceOfOrNull(@Nullable PsiElement element, @NotNull Class<T> aClass) {
if(element == null) return null;
return aClass.isInstance(element) ? (T) element : null;
}
}