diff --git a/src/main/java/fr/adrienbrault/idea/symfony2plugin/config/ServiceLineMarkerProvider.java b/src/main/java/fr/adrienbrault/idea/symfony2plugin/config/ServiceLineMarkerProvider.java index c10556f34..a18b6a6ff 100644 --- a/src/main/java/fr/adrienbrault/idea/symfony2plugin/config/ServiceLineMarkerProvider.java +++ b/src/main/java/fr/adrienbrault/idea/symfony2plugin/config/ServiceLineMarkerProvider.java @@ -67,6 +67,7 @@ public void collectSlowLineMarkers(@NotNull List psiElemen var classNamePattern = PhpElementsUtil.getClassNamePattern(); var classMethodNamePattern = PhpElementsUtil.getClassMethodNamePattern(); var constraintMessagePattern = ConstraintMessageGotoCompletionRegistrar.getConstraintPropertyMessagePattern(); + Supplier serviceCollectorSupplier = null; for(PsiElement psiElement: psiElements) { if(methodReturnPattern.accepts(psiElement)) { @@ -74,7 +75,11 @@ public void collectSlowLineMarkers(@NotNull List psiElemen } if(classNamePattern.accepts(psiElement)) { - this.classNameMarker(project, psiElement, results); + if (serviceCollectorSupplier == null) { + serviceCollectorSupplier = new LazyServiceCollector(project); + } + + this.classNameMarker(project, psiElement, results, serviceCollectorSupplier); this.entityClassMarker(project, psiElement, results); this.repositoryClassMarker(project, psiElement, results); this.validatorClassMarker(project, psiElement, results); @@ -82,7 +87,11 @@ public void collectSlowLineMarkers(@NotNull List psiElemen } if(classMethodNamePattern.accepts(psiElement)) { - this.autowireConstructorMarker(project, psiElement, results); + if (serviceCollectorSupplier == null) { + serviceCollectorSupplier = new LazyServiceCollector(project); + } + + this.autowireConstructorMarker(project, psiElement, results, serviceCollectorSupplier); } // public $message = 'This value should not be blank.'; @@ -92,21 +101,21 @@ public void collectSlowLineMarkers(@NotNull List psiElemen } } - private void classNameMarker(@NotNull Project project, @NotNull PsiElement psiElement, Collection> result) { + private void classNameMarker(@NotNull Project project, @NotNull PsiElement psiElement, Collection> result, @NotNull Supplier serviceCollectorSupplier) { PsiElement phpClassContext = psiElement.getContext(); if(!(phpClassContext instanceof PhpClass) || ((PhpClass) phpClassContext).isAbstract()) { return; } - Icon serviceLineMarker = ExternalSystemIcons.Task; - Collection targets = new ArrayList<>(); - Collection tags = new HashSet<>(); - ContainerCollectionResolver.ServiceCollector serviceCollector = ContainerCollectionResolver.ServiceCollector.create(project); + ContainerCollectionResolver.ServiceCollector serviceCollector = serviceCollectorSupplier.get(); Set serviceNames = serviceCollector.convertClassNameToServices(((PhpClass) phpClassContext).getFQN()); if (serviceNames.isEmpty()) { return; } + Icon serviceLineMarker = ExternalSystemIcons.Task; + Collection targets = new ArrayList<>(); + Collection tags = new HashSet<>(); targets.add(new ClassServiceDefinitionTargetLazyValue(project, ((PhpClass) phpClassContext).getFQN())); if (hasResourcePrototypeMetadata(serviceNames, serviceCollector)) { @@ -283,7 +292,7 @@ private void constraintValidatorClassMarker(@NotNull Project project, PsiElement results.add(builder.createLineMarkerInfo(psiElement)); } - private void autowireConstructorMarker(@NotNull Project project, @NotNull PsiElement psiElement, Collection> results) { + private void autowireConstructorMarker(@NotNull Project project, @NotNull PsiElement psiElement, Collection> results, @NotNull Supplier serviceCollectorSupplier) { PsiElement method = psiElement.getParent(); if (!(method instanceof Method)) { return; @@ -301,7 +310,7 @@ private void autowireConstructorMarker(@NotNull Project project, @NotNull PsiEle boolean isAutowire = false; Collection targets = new ArrayList<>(); - ContainerCollectionResolver.ServiceCollector serviceCollector = ContainerCollectionResolver.ServiceCollector.create(project); + ContainerCollectionResolver.ServiceCollector serviceCollector = serviceCollectorSupplier.get(); for (String convertClassNameToService : serviceCollector.convertClassNameToServices(phpClass.getFQN())) { ContainerService containerService = serviceCollector.getServices().get(convertClassNameToService); if (containerService == null) { @@ -366,4 +375,22 @@ public Collection get() { return myTargets; } } + + private static final class LazyServiceCollector implements Supplier { + private final Project project; + private ContainerCollectionResolver.ServiceCollector serviceCollector; + + private LazyServiceCollector(@NotNull Project project) { + this.project = project; + } + + @Override + public @NotNull ContainerCollectionResolver.ServiceCollector get() { + if (serviceCollector == null) { + serviceCollector = ContainerCollectionResolver.ServiceCollector.create(project); + } + + return serviceCollector; + } + } } diff --git a/src/main/java/fr/adrienbrault/idea/symfony2plugin/stubs/indexes/TwigComponentUsageStubIndex.java b/src/main/java/fr/adrienbrault/idea/symfony2plugin/stubs/indexes/TwigComponentUsageStubIndex.java index 1cb3a8da1..6b8b7a524 100644 --- a/src/main/java/fr/adrienbrault/idea/symfony2plugin/stubs/indexes/TwigComponentUsageStubIndex.java +++ b/src/main/java/fr/adrienbrault/idea/symfony2plugin/stubs/indexes/TwigComponentUsageStubIndex.java @@ -142,7 +142,7 @@ private static Collection getComponentUsages(@NotNull TwigFile twigFile) twigFile.acceptChildren(new PsiRecursiveElementVisitor() { @Override public void visitElement(@NotNull PsiElement element) { - if (componentPattern.accepts(element)) { + if (element.getNode() != null && element.getNode().getElementType() == TwigTokenTypes.STRING_TEXT && componentPattern.accepts(element)) { String componentName = PsiElementUtils.trimQuote(element.getText()); if (StringUtils.isNotBlank(componentName)) { usages.add(new Usage(componentName, element, UsageType.FUNCTION));