package krasa.inspections; import org.jetbrains.annotations.NotNull; import com.intellij.codeInspection.*; import com.intellij.psi.*; public abstract class SdpTestInspection extends BaseJavaLocalInspectionTool { public static final PsiElementVisitor EMPTY_VISITOR = new PsiElementVisitor() {}; @NotNull @Override public final PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) { return isAllowed(holder) ? buildInternalVisitor(holder, isOnTheFly) : EMPTY_VISITOR; } @NotNull @Override public final PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly, @NotNull LocalInspectionToolSession session) { return isAllowed(holder) ? buildInternalVisitor(holder, isOnTheFly) : EMPTY_VISITOR; } private static boolean isAllowed(ProblemsHolder holder) { PsiFile file = holder.getFile(); if (file instanceof PsiJavaFile) { return extendsClass((PsiJavaFile) file, "IntegrationTest"); } return false; } private static boolean extendsClass(PsiJavaFile file, String extendedClass) { PsiClass[] classes = file.getClasses(); boolean extendsIT = false; for (int i = 0; i < classes.length; i++) { extendsIT = extendsIT(classes[i], extendedClass); if (extendsIT) { break; } } return extendsIT; } private static boolean extendsIT(PsiClass aClass, String extendedClass) { boolean extendsIT = false; PsiClassType[] extendsListTypes = aClass.getExtendsListTypes(); for (int j = 0; j < extendsListTypes.length; j++) { PsiClassType extendsListType = extendsListTypes[j]; PsiClass resolve = extendsListType.resolve(); if (resolve != null && resolve != aClass) { if (extendedClass.equals(resolve.getName())) { extendsIT = true; break; } else { extendsIT = extendsIT(resolve, extendedClass); if (extendsIT) { break; } } } } return extendsIT; } public abstract PsiElementVisitor buildInternalVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly); }