Skip to content

Commit c28c265

Browse files
authored
Merge pull request #2365 from Haehnchen/feature/model-entity-metadata
use indexed model classes to resolve Entity targets on linemarker to reduce wall time
2 parents 2e26bfb + 29440a8 commit c28c265

File tree

2 files changed

+7
-17
lines changed

2 files changed

+7
-17
lines changed

src/main/java/fr/adrienbrault/idea/symfony2plugin/config/ServiceLineMarkerProvider.java

Lines changed: 6 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -23,15 +23,14 @@
2323
import fr.adrienbrault.idea.symfony2plugin.dic.ClassServiceDefinitionTargetLazyValue;
2424
import fr.adrienbrault.idea.symfony2plugin.dic.ContainerService;
2525
import fr.adrienbrault.idea.symfony2plugin.dic.container.ServiceInterface;
26-
import fr.adrienbrault.idea.symfony2plugin.doctrine.EntityHelper;
2726
import fr.adrienbrault.idea.symfony2plugin.doctrine.metadata.util.DoctrineMetadataUtil;
2827
import fr.adrienbrault.idea.symfony2plugin.form.util.FormUtil;
2928
import fr.adrienbrault.idea.symfony2plugin.stubs.ContainerCollectionResolver;
3029
import fr.adrienbrault.idea.symfony2plugin.stubs.ServiceIndexUtil;
3130
import fr.adrienbrault.idea.symfony2plugin.translation.ConstraintMessageGotoCompletionRegistrar;
3231
import fr.adrienbrault.idea.symfony2plugin.translation.dict.TranslationUtil;
3332
import fr.adrienbrault.idea.symfony2plugin.util.PhpElementsUtil;
34-
import fr.adrienbrault.idea.symfony2plugin.util.dict.DoctrineModel;
33+
import fr.adrienbrault.idea.symfony2plugin.util.PsiElementUtils;
3534
import fr.adrienbrault.idea.symfony2plugin.util.dict.ServiceUtil;
3635
import icons.ExternalSystemIcons;
3736
import org.apache.commons.lang3.StringUtils;
@@ -157,31 +156,22 @@ private void classNameMarker(@NotNull Project project, @NotNull PsiElement psiEl
157156
}
158157

159158
private void entityClassMarker(@NotNull Project project, PsiElement psiElement, Collection<? super RelatedItemLineMarkerInfo<?>> result) {
160-
161159
PsiElement phpClassContext = psiElement.getContext();
162-
if(!(phpClassContext instanceof PhpClass)) {
160+
if (!(phpClassContext instanceof PhpClass phpClass)) {
163161
return;
164162
}
165163

166164
Collection<PsiFile> psiFiles = new ArrayList<>();
167-
// @TODO: use DoctrineMetadataUtil, for single resolve; we have collecting overhead here
168-
for(DoctrineModel doctrineModel: EntityHelper.getModelClasses(project)) {
169-
PhpClass phpClass = doctrineModel.getPhpClass();
170-
if(!PhpElementsUtil.isEqualClassName(phpClass, (PhpClass) phpClassContext)) {
171-
continue;
172-
}
173-
174-
PsiFile psiFile = EntityHelper.getModelConfigFile(phpClass);
175-
165+
for (PsiFile metadataFile : PsiElementUtils.convertVirtualFilesToPsiFiles(project, DoctrineMetadataUtil.findMetadataFiles(project, phpClass.getFQN()))) {
176166
// prevent self navigation for line marker
177-
if(psiFile == null || psiFile instanceof PhpFile) {
167+
if (metadataFile instanceof PhpFile) {
178168
continue;
179169
}
180170

181-
psiFiles.add(psiFile);
171+
psiFiles.add(metadataFile);
182172
}
183173

184-
if(psiFiles.isEmpty()) {
174+
if (psiFiles.isEmpty()) {
185175
return;
186176
}
187177

src/main/java/fr/adrienbrault/idea/symfony2plugin/doctrine/metadata/util/DoctrineMetadataUtil.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ public static PhpClass getClassRepository(final @NotNull Project project, final
9090

9191
@NotNull
9292
public static Collection<VirtualFile> findMetadataFiles(@NotNull Project project, @NotNull String className) {
93-
93+
className = StringUtils.stripStart(className, "\\");
9494
final Collection<VirtualFile> virtualFiles = new ArrayList<>();
9595

9696
FileBasedIndex.getInstance().getFilesWithKey(DoctrineMetadataFileStubIndex.KEY, new HashSet<>(Collections.singletonList(className)), virtualFile -> {

0 commit comments

Comments
 (0)