From 4b3802702e339f478309bafde3102ad70c910830 Mon Sep 17 00:00:00 2001 From: Jakub Caban Date: Mon, 30 Dec 2019 12:09:33 +0100 Subject: [PATCH] Attempt to use new persistance namespaces without breaking BC --- .../config/SymfonyPhpReferenceContributor.java | 3 +++ .../idea/symfony2plugin/doctrine/EntityHelper.java | 4 ++++ .../doctrine/ObjectManagerFindTypeProvider.java | 5 ++++- .../doctrine/ObjectRepositoryResultTypeProvider.java | 4 ++++ .../doctrine/ObjectRepositoryTypeProvider.java | 1 + .../completion/DoctrineCompletionContributor.java | 1 + .../DoctrineRepositoryClassConstantIntention.java | 1 + .../ObjectRepositoryFindGotoCompletionRegistrar.java | 2 ++ .../doctrine/metadata/util/DoctrineMetadataUtil.java | 6 +++++- .../querybuilder/QueryBuilderMethodReferenceParser.java | 8 +++++++- 10 files changed, 32 insertions(+), 3 deletions(-) diff --git a/src/main/java/fr/adrienbrault/idea/symfony2plugin/config/SymfonyPhpReferenceContributor.java b/src/main/java/fr/adrienbrault/idea/symfony2plugin/config/SymfonyPhpReferenceContributor.java index f42c793f6..a92ba8970 100644 --- a/src/main/java/fr/adrienbrault/idea/symfony2plugin/config/SymfonyPhpReferenceContributor.java +++ b/src/main/java/fr/adrienbrault/idea/symfony2plugin/config/SymfonyPhpReferenceContributor.java @@ -45,8 +45,10 @@ public class SymfonyPhpReferenceContributor extends PsiReferenceContributor { new MethodMatcher.CallToSignature("\\Doctrine\\Common\\Persistence\\ManagerRegistry", "getRepository"), new MethodMatcher.CallToSignature("\\Doctrine\\Common\\Persistence\\ObjectManager", "getRepository"), new MethodMatcher.CallToSignature("\\Doctrine\\Persistence\\ManagerRegistry", "getRepository"), + new MethodMatcher.CallToSignature("\\Doctrine\\Persistence\\ObjectManager", "getRepository"), new MethodMatcher.CallToSignature("\\Doctrine\\ORM\\EntityManager", "getReference"), new MethodMatcher.CallToSignature("\\Doctrine\\Common\\Persistence\\ManagerRegistry", "getManagerForClass"), + new MethodMatcher.CallToSignature("\\Doctrine\\Persistence\\ManagerRegistry", "getManagerForClass"), new MethodMatcher.CallToSignature("\\Doctrine\\ORM\\QueryBuilder", "update"), new MethodMatcher.CallToSignature("\\Doctrine\\ORM\\QueryBuilder", "delete"), new MethodMatcher.CallToSignature("\\Doctrine\\ORM\\QueryBuilder", "from"), @@ -161,6 +163,7 @@ public PsiReference[] getReferencesByElement(@NotNull PsiElement psiElement, @No MethodMatcher.MethodMatchParameter methodMatchParameter = new MethodMatcher.StringParameterMatcher(psiElement, 0) .withSignature("\\Doctrine\\Common\\Persistence\\ObjectManager", "find") + .withSignature("\\Doctrine\\Persistence\\ObjectManager", "find") .match(); if(methodMatchParameter == null) { diff --git a/src/main/java/fr/adrienbrault/idea/symfony2plugin/doctrine/EntityHelper.java b/src/main/java/fr/adrienbrault/idea/symfony2plugin/doctrine/EntityHelper.java index 9a7252183..593b94f1f 100644 --- a/src/main/java/fr/adrienbrault/idea/symfony2plugin/doctrine/EntityHelper.java +++ b/src/main/java/fr/adrienbrault/idea/symfony2plugin/doctrine/EntityHelper.java @@ -758,6 +758,10 @@ public static Collection getModelClasses(Project project, Map models = new ArrayList<>(); for (Map.Entry entry : shortcutNames.entrySet()) { for(PhpClass phpClass: PhpIndexUtil.getPhpClassInsideNamespace(project, entry.getValue())) { diff --git a/src/main/java/fr/adrienbrault/idea/symfony2plugin/doctrine/ObjectManagerFindTypeProvider.java b/src/main/java/fr/adrienbrault/idea/symfony2plugin/doctrine/ObjectManagerFindTypeProvider.java index b6c470c68..518b1600b 100644 --- a/src/main/java/fr/adrienbrault/idea/symfony2plugin/doctrine/ObjectManagerFindTypeProvider.java +++ b/src/main/java/fr/adrienbrault/idea/symfony2plugin/doctrine/ObjectManagerFindTypeProvider.java @@ -85,7 +85,10 @@ public Collection getBySignature(String expression, S return Collections.emptySet(); } - if (!PhpElementsUtil.isMethodInstanceOf((Method) phpNamedElement, "\\Doctrine\\Common\\Persistence\\ObjectManager", "find")) { + if (!( + PhpElementsUtil.isMethodInstanceOf((Method) phpNamedElement, "\\Doctrine\\Common\\Persistence\\ObjectManager", "find") || + PhpElementsUtil.isMethodInstanceOf((Method) phpNamedElement, "\\Doctrine\\Persistence\\ObjectManager", "find") + )) { return Collections.emptySet(); } diff --git a/src/main/java/fr/adrienbrault/idea/symfony2plugin/doctrine/ObjectRepositoryResultTypeProvider.java b/src/main/java/fr/adrienbrault/idea/symfony2plugin/doctrine/ObjectRepositoryResultTypeProvider.java index f5f41a3f5..e782aaa8c 100644 --- a/src/main/java/fr/adrienbrault/idea/symfony2plugin/doctrine/ObjectRepositoryResultTypeProvider.java +++ b/src/main/java/fr/adrienbrault/idea/symfony2plugin/doctrine/ObjectRepositoryResultTypeProvider.java @@ -32,6 +32,10 @@ public class ObjectRepositoryResultTypeProvider implements PhpTypeProvider3 { new MethodMatcher.CallToSignature("\\Doctrine\\Common\\Persistence\\ObjectRepository", "findOneBy"), new MethodMatcher.CallToSignature("\\Doctrine\\Common\\Persistence\\ObjectRepository", "findAll"), new MethodMatcher.CallToSignature("\\Doctrine\\Common\\Persistence\\ObjectRepository", "findBy"), + new MethodMatcher.CallToSignature("\\Doctrine\\Persistence\\ObjectRepository", "find"), + new MethodMatcher.CallToSignature("\\Doctrine\\Persistence\\ObjectRepository", "findOneBy"), + new MethodMatcher.CallToSignature("\\Doctrine\\Persistence\\ObjectRepository", "findAll"), + new MethodMatcher.CallToSignature("\\Doctrine\\Persistence\\ObjectRepository", "findBy"), }; final static char TRIM_KEY = '\u0184'; diff --git a/src/main/java/fr/adrienbrault/idea/symfony2plugin/doctrine/ObjectRepositoryTypeProvider.java b/src/main/java/fr/adrienbrault/idea/symfony2plugin/doctrine/ObjectRepositoryTypeProvider.java index 2511dce29..37b014293 100644 --- a/src/main/java/fr/adrienbrault/idea/symfony2plugin/doctrine/ObjectRepositoryTypeProvider.java +++ b/src/main/java/fr/adrienbrault/idea/symfony2plugin/doctrine/ObjectRepositoryTypeProvider.java @@ -28,6 +28,7 @@ public class ObjectRepositoryTypeProvider implements PhpTypeProvider3 { new MethodMatcher.CallToSignature("\\Doctrine\\Common\\Persistence\\ManagerRegistry", "getRepository"), new MethodMatcher.CallToSignature("\\Doctrine\\Common\\Persistence\\ObjectManager", "getRepository"), new MethodMatcher.CallToSignature("\\Doctrine\\Persistence\\ManagerRegistry", "getRepository"), + new MethodMatcher.CallToSignature("\\Doctrine\\Persistence\\ObjectManager", "getRepository"), }; final public static char TRIM_KEY = '\u0185'; diff --git a/src/main/java/fr/adrienbrault/idea/symfony2plugin/doctrine/completion/DoctrineCompletionContributor.java b/src/main/java/fr/adrienbrault/idea/symfony2plugin/doctrine/completion/DoctrineCompletionContributor.java index 2b892c9ad..efe2b98f8 100644 --- a/src/main/java/fr/adrienbrault/idea/symfony2plugin/doctrine/completion/DoctrineCompletionContributor.java +++ b/src/main/java/fr/adrienbrault/idea/symfony2plugin/doctrine/completion/DoctrineCompletionContributor.java @@ -43,6 +43,7 @@ protected void addCompletions(@NotNull CompletionParameters completionParameters if(!( PhpElementsUtil.isMethodReferenceInstanceOf(methodReference, "Doctrine\\Common\\Persistence\\ObjectManager", "getRepository") || PhpElementsUtil.isMethodReferenceInstanceOf(methodReference, "Doctrine\\Common\\Persistence\\ManagerRegistry", "getRepository") || + PhpElementsUtil.isMethodReferenceInstanceOf(methodReference, "Doctrine\\Persistence\\ObjectManager", "getRepository") || PhpElementsUtil.isMethodReferenceInstanceOf(methodReference, "Doctrine\\Persistence\\ManagerRegistry", "getRepository") )) { return; diff --git a/src/main/java/fr/adrienbrault/idea/symfony2plugin/doctrine/intention/DoctrineRepositoryClassConstantIntention.java b/src/main/java/fr/adrienbrault/idea/symfony2plugin/doctrine/intention/DoctrineRepositoryClassConstantIntention.java index 3684efb66..4d04aba8b 100644 --- a/src/main/java/fr/adrienbrault/idea/symfony2plugin/doctrine/intention/DoctrineRepositoryClassConstantIntention.java +++ b/src/main/java/fr/adrienbrault/idea/symfony2plugin/doctrine/intention/DoctrineRepositoryClassConstantIntention.java @@ -57,6 +57,7 @@ public boolean isAvailable(@NotNull Project project, Editor editor, @NotNull Psi return null != new MethodMatcher.StringParameterMatcher(parent, 0) .withSignature(SymfonyPhpReferenceContributor.REPOSITORY_SIGNATURES) + .withSignature("Doctrine\\Persistence\\ObjectManager", "find") .withSignature("Doctrine\\Common\\Persistence\\ObjectManager", "find") // @TODO: missing somewhere .match(); } diff --git a/src/main/java/fr/adrienbrault/idea/symfony2plugin/doctrine/metadata/ObjectRepositoryFindGotoCompletionRegistrar.java b/src/main/java/fr/adrienbrault/idea/symfony2plugin/doctrine/metadata/ObjectRepositoryFindGotoCompletionRegistrar.java index 6869c6d7b..4cde4aa4e 100644 --- a/src/main/java/fr/adrienbrault/idea/symfony2plugin/doctrine/metadata/ObjectRepositoryFindGotoCompletionRegistrar.java +++ b/src/main/java/fr/adrienbrault/idea/symfony2plugin/doctrine/metadata/ObjectRepositoryFindGotoCompletionRegistrar.java @@ -41,6 +41,8 @@ public void register(@NotNull GotoCompletionRegistrarParameter registrar) { MethodMatcher.MethodMatchParameter methodMatchParameter = new MethodMatcher.ArrayParameterMatcher(context, 0) .withSignature("\\Doctrine\\Common\\Persistence\\ObjectRepository", "findOneBy") .withSignature("\\Doctrine\\Common\\Persistence\\ObjectRepository", "findBy") + .withSignature("\\Doctrine\\Persistence\\ObjectRepository", "findOneBy") + .withSignature("\\Doctrine\\Persistence\\ObjectRepository", "findBy") .match(); if(methodMatchParameter != null) { 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 ee00f0883..b1ea8f2f9 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 @@ -47,7 +47,11 @@ public class DoctrineMetadataUtil { @NotNull public static Collection getObjectRepositoryLookupElements(@NotNull Project project) { - return new ArrayList<>(DoctrineRepositoryLookupElement.create(PhpIndex.getInstance(project).getAllSubclasses("\\Doctrine\\Common\\Persistence\\ObjectRepository"))); + PhpIndex index = PhpIndex.getInstance(project); + Collection collection = index.getAllSubclasses("\\Doctrine\\Common\\Persistence\\ObjectRepository"); + collection.addAll(index.getAllSubclasses("\\Doctrine\\Persistence\\ObjectRepository")); + + return new ArrayList<>(DoctrineRepositoryLookupElement.create(collection)); } /** diff --git a/src/main/java/fr/adrienbrault/idea/symfony2plugin/doctrine/querybuilder/QueryBuilderMethodReferenceParser.java b/src/main/java/fr/adrienbrault/idea/symfony2plugin/doctrine/querybuilder/QueryBuilderMethodReferenceParser.java index 9b49e7693..8e59d7a39 100644 --- a/src/main/java/fr/adrienbrault/idea/symfony2plugin/doctrine/querybuilder/QueryBuilderMethodReferenceParser.java +++ b/src/main/java/fr/adrienbrault/idea/symfony2plugin/doctrine/querybuilder/QueryBuilderMethodReferenceParser.java @@ -257,7 +257,13 @@ private Map findRootDefinition(Collection metho if(rootAlias != null && repository == null) { MethodReference methodReference = methodReferences.iterator().next(); PhpClass phpClass = PsiTreeUtil.getParentOfType(methodReference, PhpClass.class); - if(phpClass != null && PhpElementsUtil.isInstanceOf(phpClass, "\\Doctrine\\Common\\Persistence\\ObjectRepository")) { + if( + phpClass != null && + ( + PhpElementsUtil.isInstanceOf(phpClass, "\\Doctrine\\Common\\Persistence\\ObjectRepository") || + PhpElementsUtil.isInstanceOf(phpClass, "\\Doctrine\\Persistence\\ObjectRepository") + ) + ) { for(DoctrineModel model: EntityHelper.getModelClasses(project)) { String className = model.getPhpClass().getPresentableFQN(); PhpClass resolvedRepoName = EntityHelper.getEntityRepositoryClass(project, className);