package fr.adrienbrault.idea.symfony2plugin.routing.inspection; import com.intellij.codeInspection.LocalInspectionTool; import com.intellij.codeInspection.ProblemsHolder; import com.intellij.psi.PsiElementVisitor; import com.intellij.psi.PsiFile; import com.intellij.psi.util.PsiTreeUtil; import fr.adrienbrault.idea.symfony2plugin.Symfony2ProjectComponent; import fr.adrienbrault.idea.symfony2plugin.util.yaml.YamlHelper; import org.jetbrains.annotations.NotNull; import org.jetbrains.yaml.psi.YAMLDocument; import org.jetbrains.yaml.psi.YAMLValue; /** * @author Daniel Espendiller <daniel@espendiller.net> */ public class DuplicateLocalRouteInspection extends LocalInspectionTool { @NotNull @Override public PsiElementVisitor buildVisitor(final @NotNull ProblemsHolder holder, boolean isOnTheFly) { if(!Symfony2ProjectComponent.isEnabled(holder.getProject())) { return super.buildVisitor(holder, isOnTheFly); } return new MyPsiElementVisitor(holder); } private static class MyPsiElementVisitor extends PsiElementVisitor { private final ProblemsHolder holder; public MyPsiElementVisitor(ProblemsHolder holder) { this.holder = holder; } @Override public void visitFile(PsiFile file) { // @TODO: detection of routing files in right way // routing.yml // comment.routing.yml // routing/foo.yml if(!YamlHelper.isRoutingFile(file)) { return; } YAMLDocument document = PsiTreeUtil.findChildOfType(file, YAMLDocument.class); if(document == null) { return; } YAMLValue topLevelValue = document.getTopLevelValue(); if(topLevelValue != null) { YamlHelper.attachDuplicateKeyInspection(topLevelValue, holder); } } } }