package org.jetbrains.plugins.cucumber.java.inspections; import com.intellij.codeInspection.ProblemsHolder; import com.intellij.codeInspection.ex.BaseLocalInspectionTool; import com.intellij.openapi.util.text.StringUtil; import com.intellij.psi.*; import org.jetbrains.annotations.Nls; import org.jetbrains.annotations.NotNull; import org.jetbrains.plugins.cucumber.java.CucumberJavaBundle; import org.jetbrains.plugins.cucumber.java.CucumberJavaUtil; public class CucumberJavaStepDefClassInDefaultPackageInspection extends BaseLocalInspectionTool { public boolean isEnabledByDefault() { return true; } @Nls @NotNull public String getDisplayName() { return CucumberJavaBundle.message("cucumber.java.inspections.step.def.class.in.default.package.title"); } @NotNull public String getShortName() { return "CucumberJavaStepDefClassInDefaultPackage"; } @NotNull public PsiElementVisitor buildVisitor(@NotNull final ProblemsHolder holder, boolean isOnTheFly) { return new CucumberJavaStepDefClassIsPublicVisitor(holder); } static class CucumberJavaStepDefClassIsPublicVisitor extends JavaElementVisitor { final ProblemsHolder holder; CucumberJavaStepDefClassIsPublicVisitor(final ProblemsHolder holder) { this.holder = holder; } @Override public void visitClass(PsiClass aClass) { if (!CucumberJavaUtil.isStepDefinitionClass(aClass)) { return; } PsiFile containingFile = aClass.getContainingFile(); if (containingFile instanceof PsiClassOwner) { PsiClassOwner javaFile = (PsiClassOwner) containingFile; final String packageName = javaFile.getPackageName(); if (StringUtil.isEmpty(packageName)) { PsiElement elementToHighlight = aClass.getNameIdentifier(); if (elementToHighlight != null) { holder.registerProblem(elementToHighlight, CucumberJavaBundle.message("cucumber.java.inspections.step.def.class.in.default.package.message") ); } } } } } }