diff --git a/src/fr/adrienbrault/idea/symfony2plugin/asset/AssetDirectoryReader.java b/src/fr/adrienbrault/idea/symfony2plugin/asset/AssetDirectoryReader.java index 4132cc117..98ae4f9bf 100644 --- a/src/fr/adrienbrault/idea/symfony2plugin/asset/AssetDirectoryReader.java +++ b/src/fr/adrienbrault/idea/symfony2plugin/asset/AssetDirectoryReader.java @@ -5,7 +5,6 @@ import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.vfs.VirtualFileVisitor; import com.intellij.psi.PsiDirectory; -import com.jetbrains.php.PhpIndex; import fr.adrienbrault.idea.symfony2plugin.Settings; import fr.adrienbrault.idea.symfony2plugin.util.SymfonyBundleUtil; import fr.adrienbrault.idea.symfony2plugin.util.dict.SymfonyBundle; @@ -13,7 +12,10 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import java.util.*; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.HashSet; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -68,7 +70,7 @@ public boolean visitFile(@NotNull VirtualFile virtualFile) { return files; } - SymfonyBundleUtil symfonyBundleUtil = new SymfonyBundleUtil(PhpIndex.getInstance(project)); + SymfonyBundleUtil symfonyBundleUtil = new SymfonyBundleUtil(project); for(SymfonyBundle bundle : symfonyBundleUtil.getBundles()) { PsiDirectory bundleDirectory = bundle.getDirectory(); if(null == bundleDirectory) { @@ -112,8 +114,7 @@ public Collection resolveAssetFile(@NotNull Project project, @NotNu int i = filename.indexOf("/"); if(i > 0) { String relativeFilename = filename.substring(1, i); - SymfonyBundle bundle = new SymfonyBundleUtil(PhpIndex.getInstance(project)).getBundle(relativeFilename); - if(bundle != null) { + for (SymfonyBundle bundle : new SymfonyBundleUtil(project).getBundle(relativeFilename)) { String assetPath = filename.substring(i + 1); Matcher matcher = Pattern.compile("^(.*[/\\\\])\\*([.\\w+]*)$").matcher(assetPath); diff --git a/src/fr/adrienbrault/idea/symfony2plugin/doctrine/EntityHelper.java b/src/fr/adrienbrault/idea/symfony2plugin/doctrine/EntityHelper.java index 697b94963..9a7252183 100644 --- a/src/fr/adrienbrault/idea/symfony2plugin/doctrine/EntityHelper.java +++ b/src/fr/adrienbrault/idea/symfony2plugin/doctrine/EntityHelper.java @@ -112,7 +112,7 @@ public static PhpClass getEntityRepositoryClass(@NotNull Project project, @NotNu } } - SymfonyBundle symfonyBundle = new SymfonyBundleUtil(PhpIndex.getInstance(project)).getContainingBundle(phpClass); + SymfonyBundle symfonyBundle = new SymfonyBundleUtil(project).getContainingBundle(phpClass); if(symfonyBundle != null) { PhpClass repositoryClass = getEntityRepositoryClass(project, symfonyBundle, presentableFQN); if(repositoryClass != null) { diff --git a/src/fr/adrienbrault/idea/symfony2plugin/routing/RouteHelper.java b/src/fr/adrienbrault/idea/symfony2plugin/routing/RouteHelper.java index 38c5f4be9..4600fafdf 100644 --- a/src/fr/adrienbrault/idea/symfony2plugin/routing/RouteHelper.java +++ b/src/fr/adrienbrault/idea/symfony2plugin/routing/RouteHelper.java @@ -224,9 +224,9 @@ public static ControllerClassOnShortcutReturn getControllerClassOnShortcut(@NotN String[] split = controllerName.split(":"); if(split.length == 3) { // try to resolve on bundle path - SymfonyBundle symfonyBundle = new SymfonyBundleUtil(project).getBundle(split[0]); - if(symfonyBundle != null) { + for (SymfonyBundle symfonyBundle : new SymfonyBundleUtil(project).getBundle(split[0])) { PhpClass aClass = PhpElementsUtil.getClass(project, symfonyBundle.getNamespaceName() + "Controller\\" + split[1] + "Controller"); + // @TODO: support multiple bundle names if(aClass != null) { return new ControllerClassOnShortcutReturn(aClass); } diff --git a/src/fr/adrienbrault/idea/symfony2plugin/templating/path/BundleTwigNamespaceExtension.java b/src/fr/adrienbrault/idea/symfony2plugin/templating/path/BundleTwigNamespaceExtension.java index 316ef8adb..35c4982ee 100644 --- a/src/fr/adrienbrault/idea/symfony2plugin/templating/path/BundleTwigNamespaceExtension.java +++ b/src/fr/adrienbrault/idea/symfony2plugin/templating/path/BundleTwigNamespaceExtension.java @@ -1,7 +1,6 @@ package fr.adrienbrault.idea.symfony2plugin.templating.path; import com.intellij.psi.PsiDirectory; -import com.jetbrains.php.PhpIndex; import fr.adrienbrault.idea.symfony2plugin.extension.TwigNamespaceExtension; import fr.adrienbrault.idea.symfony2plugin.extension.TwigNamespaceExtensionParameter; import fr.adrienbrault.idea.symfony2plugin.templating.util.TwigUtil; @@ -24,7 +23,7 @@ public class BundleTwigNamespaceExtension implements TwigNamespaceExtension { public Collection getNamespaces(@NotNull TwigNamespaceExtensionParameter parameter) { Collection twigPaths = new ArrayList<>(); - Collection symfonyBundles = new SymfonyBundleUtil(PhpIndex.getInstance(parameter.getProject())).getBundles(); + Collection symfonyBundles = new SymfonyBundleUtil(parameter.getProject()).getBundles(); for (SymfonyBundle bundle : symfonyBundles) { PsiDirectory views = bundle.getSubDirectory("Resources", "views"); if(views == null) { diff --git a/src/fr/adrienbrault/idea/symfony2plugin/templating/util/TwigUtil.java b/src/fr/adrienbrault/idea/symfony2plugin/templating/util/TwigUtil.java index f959ced2e..4e86e3368 100644 --- a/src/fr/adrienbrault/idea/symfony2plugin/templating/util/TwigUtil.java +++ b/src/fr/adrienbrault/idea/symfony2plugin/templating/util/TwigUtil.java @@ -125,7 +125,7 @@ public static String[] getControllerMethodShortcut(@NotNull Method method) { return new String[0]; } - SymfonyBundleUtil symfonyBundleUtil = new SymfonyBundleUtil(PhpIndex.getInstance(method.getProject())); + SymfonyBundleUtil symfonyBundleUtil = new SymfonyBundleUtil(method.getProject()); SymfonyBundle symfonyBundle = symfonyBundleUtil.getContainingBundle(phpClass); if(symfonyBundle == null) { return new String[0]; diff --git a/src/fr/adrienbrault/idea/symfony2plugin/util/SymfonyBundleFileCompletionProvider.java b/src/fr/adrienbrault/idea/symfony2plugin/util/SymfonyBundleFileCompletionProvider.java index aff6b18af..4ecdcc812 100644 --- a/src/fr/adrienbrault/idea/symfony2plugin/util/SymfonyBundleFileCompletionProvider.java +++ b/src/fr/adrienbrault/idea/symfony2plugin/util/SymfonyBundleFileCompletionProvider.java @@ -9,7 +9,6 @@ import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.vfs.VirtualFileVisitor; import com.intellij.util.ProcessingContext; -import com.jetbrains.php.PhpIndex; import fr.adrienbrault.idea.symfony2plugin.Symfony2ProjectComponent; import fr.adrienbrault.idea.symfony2plugin.util.dict.BundleFile; import fr.adrienbrault.idea.symfony2plugin.util.dict.ResourceFileInsertHandler; @@ -38,9 +37,7 @@ protected void addCompletions(@NotNull CompletionParameters completionParameters return; } - PhpIndex phpIndex = PhpIndex.getInstance(completionParameters.getPosition().getProject()); - - SymfonyBundleUtil symfonyBundleUtil = new SymfonyBundleUtil(phpIndex); + SymfonyBundleUtil symfonyBundleUtil = new SymfonyBundleUtil(completionParameters.getPosition().getProject()); List bundleFiles = new ArrayList<>(); for(SymfonyBundle symfonyBundle : symfonyBundleUtil.getBundles()) { diff --git a/src/fr/adrienbrault/idea/symfony2plugin/util/SymfonyBundleUtil.java b/src/fr/adrienbrault/idea/symfony2plugin/util/SymfonyBundleUtil.java index 1671809a1..ee593100c 100644 --- a/src/fr/adrienbrault/idea/symfony2plugin/util/SymfonyBundleUtil.java +++ b/src/fr/adrienbrault/idea/symfony2plugin/util/SymfonyBundleUtil.java @@ -10,91 +10,69 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.Map; +import java.util.stream.Collectors; /** * @author Daniel Espendiller */ public class SymfonyBundleUtil { + @NotNull + private final Project project; - protected PhpIndex phpIndex; - protected HashMap symfonyBundles; + @Nullable + private Collection symfonyBundles; - public SymfonyBundleUtil(PhpIndex phpIndex) { - this.phpIndex = phpIndex; - this.loadBundles(); + public SymfonyBundleUtil(@NotNull Project project) { + this.project = project; } - public SymfonyBundleUtil(Project project) { - this(PhpIndex.getInstance(project)); - } + @NotNull + public Collection getBundles() { + if(symfonyBundles != null) { + return symfonyBundles; + } - protected void loadBundles() { + symfonyBundles = new ArrayList<>(); - this.symfonyBundles = new HashMap<>(); - Collection phpClasses = this.phpIndex.getAllSubclasses("\\Symfony\\Component\\HttpKernel\\Bundle\\Bundle"); + Collection phpClasses = PhpIndex.getInstance(project).getAllSubclasses("\\Symfony\\Component\\HttpKernel\\Bundle\\Bundle"); for (PhpClass phpClass : phpClasses) { - this.symfonyBundles.put(phpClass.getName(), new SymfonyBundle(phpClass)); + symfonyBundles.add(new SymfonyBundle(phpClass)); } + return symfonyBundles; } - public Collection getBundles() { - return this.symfonyBundles.values(); - } - + @NotNull public Map getParentBundles() { - Map bundles = new HashMap<>(); - for (Map.Entry entry : this.symfonyBundles.entrySet()) { - if(entry.getValue().getParentBundleName() != null) { - bundles.put(entry.getKey(), entry.getValue()); + for (SymfonyBundle bundle : getBundles()) { + if(bundle.getParentBundleName() != null) { + bundles.put(bundle.getName(), bundle); } } return bundles; } - @Nullable - public SymfonyBundle getBundle(String bundleName) { - return this.symfonyBundles.get(bundleName); - } - - public boolean bundleExists(String bundleName) { - return this.symfonyBundles.get(bundleName) != null; - } - - @Nullable - public SymfonyBundle getContainingBundle(String bundleShortcutName) { - - if(!bundleShortcutName.startsWith("@")) { - return null; - } - - int stripedBundlePos = bundleShortcutName.indexOf("/"); - if(stripedBundlePos == -1) { - return null; - } - - String bundleName = bundleShortcutName.substring(1, stripedBundlePos); - for(SymfonyBundle bundle : this.getBundles()) { - if(bundle.getName().equals(bundleName)) { - return bundle; - } - } - - return null; + @NotNull + public Collection getBundle(@NotNull String bundleName) { + return getBundles() + .stream() + .filter( + symfonyBundle -> bundleName.equals(symfonyBundle.getName()) + ) + .collect(Collectors.toSet()); } - @Nullable - public SymfonyBundle getContainingBundle(PhpClass phpClass) { - - for(SymfonyBundle bundle : this.getBundles()) { + public SymfonyBundle getContainingBundle(@NotNull PhpClass phpClass) { + for(SymfonyBundle bundle : getBundles()) { if(bundle.isInBundle(phpClass)) { return bundle; } @@ -104,9 +82,8 @@ public SymfonyBundle getContainingBundle(PhpClass phpClass) { } @Nullable - public SymfonyBundle getContainingBundle(PsiFile psiFile) { - - for(SymfonyBundle bundle : this.getBundles()) { + public SymfonyBundle getContainingBundle(@NotNull PsiFile psiFile) { + for(SymfonyBundle bundle : getBundles()) { if(bundle.isInBundle(psiFile)) { return bundle; } @@ -117,8 +94,7 @@ public SymfonyBundle getContainingBundle(PsiFile psiFile) { @Nullable public SymfonyBundle getContainingBundle(@NotNull VirtualFile virtualFile) { - - for(SymfonyBundle bundle : this.getBundles()) { + for(SymfonyBundle bundle : getBundles()) { if(bundle.isInBundle(virtualFile)) { return bundle; } @@ -128,9 +104,8 @@ public SymfonyBundle getContainingBundle(@NotNull VirtualFile virtualFile) { } @Nullable - public SymfonyBundle getContainingBundle(PsiDirectory directory) { - - for(SymfonyBundle bundle : this.getBundles()) { + public SymfonyBundle getContainingBundle(@NotNull PsiDirectory directory) { + for(SymfonyBundle bundle : getBundles()) { if(bundle.isInBundle(directory.getVirtualFile())) { return bundle; } @@ -138,5 +113,4 @@ public SymfonyBundle getContainingBundle(PsiDirectory directory) { return null; } - } diff --git a/src/fr/adrienbrault/idea/symfony2plugin/util/controller/ControllerIndex.java b/src/fr/adrienbrault/idea/symfony2plugin/util/controller/ControllerIndex.java index be64e3f36..66b9cd33c 100644 --- a/src/fr/adrienbrault/idea/symfony2plugin/util/controller/ControllerIndex.java +++ b/src/fr/adrienbrault/idea/symfony2plugin/util/controller/ControllerIndex.java @@ -2,7 +2,6 @@ import com.intellij.codeInsight.lookup.LookupElement; import com.intellij.openapi.project.Project; -import com.jetbrains.php.PhpIndex; import com.jetbrains.php.lang.psi.elements.Method; import com.jetbrains.php.lang.psi.elements.PhpClass; import fr.adrienbrault.idea.symfony2plugin.routing.Route; @@ -23,21 +22,19 @@ * @author Daniel Espendiller */ public class ControllerIndex { - - private Project project; - private PhpIndex phpIndex; + @NotNull + final private Project project; private ContainerCollectionResolver.LazyServiceCollector lazyServiceCollector; - public ControllerIndex(Project project) { + public ControllerIndex(@NotNull Project project) { this.project = project; - this.phpIndex = PhpIndex.getInstance(project); } public Collection getActions() { Collection actions = new ArrayList<>(); - for (SymfonyBundle symfonyBundle : new SymfonyBundleUtil(phpIndex).getBundles()) { + for (SymfonyBundle symfonyBundle : new SymfonyBundleUtil(project).getBundles()) { actions.addAll(this.getActionMethods(symfonyBundle)); } diff --git a/src/fr/adrienbrault/idea/symfony2plugin/util/resource/FileResourceUtil.java b/src/fr/adrienbrault/idea/symfony2plugin/util/resource/FileResourceUtil.java index a063a8a14..3ff38e73e 100644 --- a/src/fr/adrienbrault/idea/symfony2plugin/util/resource/FileResourceUtil.java +++ b/src/fr/adrienbrault/idea/symfony2plugin/util/resource/FileResourceUtil.java @@ -13,7 +13,6 @@ import com.intellij.psi.search.GlobalSearchScope; import com.intellij.util.indexing.FileBasedIndex; import com.jetbrains.php.PhpIcons; -import com.jetbrains.php.PhpIndex; import fr.adrienbrault.idea.symfony2plugin.stubs.indexes.FileResourcesIndex; import fr.adrienbrault.idea.symfony2plugin.util.FileResourceVisitorUtil; import fr.adrienbrault.idea.symfony2plugin.util.PhpIndexUtil; @@ -200,18 +199,18 @@ public static Collection getFileResourceTargetsInBundleScope(@NotNull P String bundleName = content.substring(1, content.indexOf("/")); - SymfonyBundle symfonyBundle = new SymfonyBundleUtil(PhpIndex.getInstance(project)).getBundle(bundleName); - if(symfonyBundle == null) { - return Collections.emptyList(); - } + Collection targets = new HashSet<>(); - String path = content.substring(content.indexOf("/") + 1); - PsiFile psiFile = PsiElementUtils.virtualFileToPsiFile(project, symfonyBundle.getRelative(path)); - if(psiFile == null) { - return Collections.emptyList(); + for (SymfonyBundle bundle : new SymfonyBundleUtil(project).getBundle(bundleName)) { + String path = content.substring(content.indexOf("/") + 1); + PsiFile psiFile = PsiElementUtils.virtualFileToPsiFile(project, bundle.getRelative(path)); + + if(psiFile != null) { + targets.add(psiFile); + } } - return Collections.singletonList(psiFile); + return targets; } /** @@ -231,8 +230,7 @@ public static Collection getFileResourceTargetsInBundleDirectory(@No String bundleName = content.substring(1, content.indexOf("\\")); - SymfonyBundle symfonyBundle = new SymfonyBundleUtil(PhpIndex.getInstance(project)).getBundle(bundleName); - if(symfonyBundle == null) { + if(new SymfonyBundleUtil(project).getBundle(bundleName).size() == 0) { return Collections.emptyList(); }