From 29440a8551fe1e0e9359631bef3272d0fc0948ce Mon Sep 17 00:00:00 2001 From: Daniel Espendiller Date: Sun, 28 Apr 2024 11:43:12 +0200 Subject: [PATCH] use indexed model classes to resolve Entity targets on linemarker to reduce wall time --- .../config/ServiceLineMarkerProvider.java | 22 +++++-------------- .../metadata/util/DoctrineMetadataUtil.java | 2 +- 2 files changed, 7 insertions(+), 17 deletions(-) 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 52ff7b602..6ea06f62e 100644 --- a/src/main/java/fr/adrienbrault/idea/symfony2plugin/config/ServiceLineMarkerProvider.java +++ b/src/main/java/fr/adrienbrault/idea/symfony2plugin/config/ServiceLineMarkerProvider.java @@ -23,7 +23,6 @@ import fr.adrienbrault.idea.symfony2plugin.dic.ClassServiceDefinitionTargetLazyValue; import fr.adrienbrault.idea.symfony2plugin.dic.ContainerService; import fr.adrienbrault.idea.symfony2plugin.dic.container.ServiceInterface; -import fr.adrienbrault.idea.symfony2plugin.doctrine.EntityHelper; import fr.adrienbrault.idea.symfony2plugin.doctrine.metadata.util.DoctrineMetadataUtil; import fr.adrienbrault.idea.symfony2plugin.form.util.FormUtil; import fr.adrienbrault.idea.symfony2plugin.stubs.ContainerCollectionResolver; @@ -31,7 +30,7 @@ import fr.adrienbrault.idea.symfony2plugin.translation.ConstraintMessageGotoCompletionRegistrar; import fr.adrienbrault.idea.symfony2plugin.translation.dict.TranslationUtil; import fr.adrienbrault.idea.symfony2plugin.util.PhpElementsUtil; -import fr.adrienbrault.idea.symfony2plugin.util.dict.DoctrineModel; +import fr.adrienbrault.idea.symfony2plugin.util.PsiElementUtils; import fr.adrienbrault.idea.symfony2plugin.util.dict.ServiceUtil; import icons.ExternalSystemIcons; import org.apache.commons.lang3.StringUtils; @@ -157,31 +156,22 @@ private void classNameMarker(@NotNull Project project, @NotNull PsiElement psiEl } private void entityClassMarker(@NotNull Project project, PsiElement psiElement, Collection> result) { - PsiElement phpClassContext = psiElement.getContext(); - if(!(phpClassContext instanceof PhpClass)) { + if (!(phpClassContext instanceof PhpClass phpClass)) { return; } Collection psiFiles = new ArrayList<>(); - // @TODO: use DoctrineMetadataUtil, for single resolve; we have collecting overhead here - for(DoctrineModel doctrineModel: EntityHelper.getModelClasses(project)) { - PhpClass phpClass = doctrineModel.getPhpClass(); - if(!PhpElementsUtil.isEqualClassName(phpClass, (PhpClass) phpClassContext)) { - continue; - } - - PsiFile psiFile = EntityHelper.getModelConfigFile(phpClass); - + for (PsiFile metadataFile : PsiElementUtils.convertVirtualFilesToPsiFiles(project, DoctrineMetadataUtil.findMetadataFiles(project, phpClass.getFQN()))) { // prevent self navigation for line marker - if(psiFile == null || psiFile instanceof PhpFile) { + if (metadataFile instanceof PhpFile) { continue; } - psiFiles.add(psiFile); + psiFiles.add(metadataFile); } - if(psiFiles.isEmpty()) { + if (psiFiles.isEmpty()) { return; } diff --git a/src/main/java/fr/adrienbrault/idea/symfony2plugin/doctrine/metadata/util/DoctrineMetadataUtil.java b/src/main/java/fr/adrienbrault/idea/symfony2plugin/doctrine/metadata/util/DoctrineMetadataUtil.java index b09081b00..9a746a239 100644 --- a/src/main/java/fr/adrienbrault/idea/symfony2plugin/doctrine/metadata/util/DoctrineMetadataUtil.java +++ b/src/main/java/fr/adrienbrault/idea/symfony2plugin/doctrine/metadata/util/DoctrineMetadataUtil.java @@ -90,7 +90,7 @@ public static PhpClass getClassRepository(final @NotNull Project project, final @NotNull public static Collection findMetadataFiles(@NotNull Project project, @NotNull String className) { - + className = StringUtils.stripStart(className, "\\"); final Collection virtualFiles = new ArrayList<>(); FileBasedIndex.getInstance().getFilesWithKey(DoctrineMetadataFileStubIndex.KEY, new HashSet<>(Collections.singletonList(className)), virtualFile -> {