33import com .intellij .codeInspection .LocalInspectionTool ;
44import com .intellij .codeInspection .ProblemHighlightType ;
55import com .intellij .codeInspection .ProblemsHolder ;
6+ import com .intellij .openapi .util .NotNullLazyValue ;
67import com .intellij .patterns .PlatformPatterns ;
78import com .intellij .psi .PsiElement ;
89import com .intellij .psi .PsiElementVisitor ;
9- import com .intellij .psi .PsiFile ;
1010import com .intellij .psi .xml .XmlTag ;
1111import com .intellij .psi .xml .XmlTokenType ;
1212import fr .adrienbrault .idea .symfony2plugin .Symfony2ProjectComponent ;
1717import org .jetbrains .annotations .NotNull ;
1818
1919import java .util .List ;
20- import java .util .Objects ;
2120
2221/**
2322 * @author Daniel Espendiller <daniel@espendiller.net>
@@ -35,39 +34,28 @@ public PsiElementVisitor buildVisitor(final @NotNull ProblemsHolder holder, bool
3534 }
3635
3736 private static class MyPsiElementVisitor extends PsiElementVisitor {
38-
3937 private final ProblemsHolder holder ;
40- private ContainerCollectionResolver .LazyServiceCollector lazyServiceCollector ;
38+ private NotNullLazyValue < ContainerCollectionResolver .LazyServiceCollector > serviceCollector ;
4139
4240 MyPsiElementVisitor (@ NotNull ProblemsHolder holder ) {
4341 this .holder = holder ;
4442 }
4543
4644 @ Override
47- public void visitFile ( PsiFile file ) {
48- for ( XmlTag xmlTag : ServiceActionUtil . getXmlContainerServiceDefinition ( file ) ) {
49- visitService (xmlTag , holder );
45+ public void visitElement ( @ NotNull PsiElement element ) {
46+ if ( element instanceof XmlTag xmlTag ) {
47+ visitService (xmlTag , holder , this . createLazyServiceCollector () );
5048 }
5149
52- this .lazyServiceCollector = null ;
53-
54- super .visitFile (file );
55- }
56-
57- private ContainerCollectionResolver .LazyServiceCollector getLazyServiceCollector (XmlTag xmlTag ) {
58- return Objects .requireNonNullElseGet (
59- this .lazyServiceCollector ,
60- () -> this .lazyServiceCollector = new ContainerCollectionResolver .LazyServiceCollector (xmlTag .getProject ())
61- );
62-
50+ super .visitElement (element );
6351 }
6452
65- private void visitService (XmlTag xmlTag , @ NotNull ProblemsHolder holder ) {
53+ private void visitService (XmlTag xmlTag , @ NotNull ProblemsHolder holder , @ NotNull NotNullLazyValue < ContainerCollectionResolver . LazyServiceCollector > lazyServiceCollector ) {
6654 if (!ServiceActionUtil .isValidXmlParameterInspectionService (xmlTag )) {
6755 return ;
6856 }
6957
70- final List <String > args = ServiceActionUtil .getXmlMissingArgumentTypes (xmlTag , false , getLazyServiceCollector ( xmlTag ));
58+ final List <String > args = ServiceActionUtil .getXmlMissingArgumentTypes (xmlTag , false , lazyServiceCollector . get ( ));
7159 if (args .size () == 0 ) {
7260 return ;
7361 }
@@ -79,5 +67,13 @@ private void visitService(XmlTag xmlTag, @NotNull ProblemsHolder holder) {
7967
8068 holder .registerProblem (childrenOfType , "Missing argument" , ProblemHighlightType .GENERIC_ERROR_OR_WARNING , new AddServiceXmlArgumentLocalQuickFix (args ));
8169 }
70+
71+ private NotNullLazyValue <ContainerCollectionResolver .LazyServiceCollector > createLazyServiceCollector () {
72+ if (this .serviceCollector == null ) {
73+ this .serviceCollector = NotNullLazyValue .lazy (() -> new ContainerCollectionResolver .LazyServiceCollector (holder .getProject ()));
74+ }
75+
76+ return this .serviceCollector ;
77+ }
8278 }
8379}
0 commit comments