Skip to content

Commit 688a876

Browse files
authored
Merge pull request #1109 from Haehnchen/feature/twig-split
Twig plugin split package path milestone
2 parents eee2c11 + 1b623e8 commit 688a876

File tree

120 files changed

+2894
-3089
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

120 files changed

+2894
-3089
lines changed

META-INF/plugin.xml

Lines changed: 11 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -176,10 +176,6 @@
176176
nonDefaultProject="true"
177177
/>
178178

179-
<!--
180-
<iconProvider implementation="fr.adrienbrault.idea.symfony2plugin.templating.TwigFileIconProvider" />
181-
-->
182-
183179
<psi.referenceContributor implementation="fr.adrienbrault.idea.symfony2plugin.config.SymfonyPhpReferenceContributor"/>
184180
<psi.referenceContributor implementation="fr.adrienbrault.idea.symfony2plugin.translation.TranslationReferenceContributor"/>
185181
<psi.referenceContributor implementation="fr.adrienbrault.idea.symfony2plugin.routing.PhpRouteReferenceContributor"/>
@@ -565,9 +561,9 @@
565561
<ControllerActionGotoRelatedCollector implementation="fr.adrienbrault.idea.symfony2plugin.navigation.controller.TemplatesControllerRelatedGotoCollector"/>
566562

567563
<GotoCompletionRegistrar implementation="fr.adrienbrault.idea.symfony2plugin.form.FormOptionGotoCompletionRegistrar"/>
568-
<GotoCompletionRegistrar implementation="fr.adrienbrault.idea.symfony2plugin.templating.BlockCompletionRegistrar"/>
569-
<GotoCompletionRegistrar implementation="fr.adrienbrault.idea.symfony2plugin.templating.FilterCompletionRegistrar"/>
570-
<GotoCompletionRegistrar implementation="fr.adrienbrault.idea.symfony2plugin.templating.TranslationTagCompletionRegistrar"/>
564+
<GotoCompletionRegistrar implementation="fr.adrienbrault.idea.symfony2plugin.templating.BlockGotoCompletionRegistrar"/>
565+
<GotoCompletionRegistrar implementation="fr.adrienbrault.idea.symfony2plugin.templating.FilterGotoCompletionRegistrar"/>
566+
<GotoCompletionRegistrar implementation="fr.adrienbrault.idea.symfony2plugin.templating.TranslationTagGotoCompletionRegistrar"/>
571567
<GotoCompletionRegistrar implementation="fr.adrienbrault.idea.symfony2plugin.form.FormGotoCompletionRegistrar"/>
572568
<GotoCompletionRegistrar implementation="fr.adrienbrault.idea.symfony2plugin.config.php.PhpEventDispatcherGotoCompletionRegistrar"/>
573569
<GotoCompletionRegistrar implementation="fr.adrienbrault.idea.symfony2plugin.completion.command.PhpCommandGotoCompletionRegistrar"/>
@@ -597,13 +593,13 @@
597593

598594
<TwigVariableCollector implementation="fr.adrienbrault.idea.symfony2plugin.templating.variable.collector.StaticVariableCollector"/>
599595
<TwigVariableCollector implementation="fr.adrienbrault.idea.symfony2plugin.templating.variable.collector.GlobalExtensionVariableCollector"/>
600-
<TwigVariableCollector implementation="fr.adrienbrault.idea.symfony2plugin.templating.variable.collector.ControllerDocVariableCollector"/>
601-
<TwigVariableCollector implementation="fr.adrienbrault.idea.symfony2plugin.templating.variable.collector.ServiceContainerVariableCollector"/>
596+
<TwigVariableCollector implementation="fr.adrienbrault.idea.symfony2plugin.twig.variable.collector.ControllerDocVariableCollector"/>
597+
<TwigVariableCollector implementation="fr.adrienbrault.idea.symfony2plugin.twig.variable.collector.ServiceContainerGlobalVariableCollector"/>
602598
<TwigVariableCollector implementation="fr.adrienbrault.idea.symfony2plugin.templating.variable.collector.FileDocVariableCollector"/>
603-
<TwigVariableCollector implementation="fr.adrienbrault.idea.symfony2plugin.templating.variable.collector.ControllerVariableCollector"/>
599+
<TwigVariableCollector implementation="fr.adrienbrault.idea.symfony2plugin.twig.variable.collector.ControllerVariableCollector"/>
604600
<TwigVariableCollector implementation="fr.adrienbrault.idea.symfony2plugin.templating.variable.collector.IncludeVariableCollector"/>
605601
<TwigVariableCollector implementation="fr.adrienbrault.idea.symfony2plugin.templating.variable.collector.MarcoScopeVariableCollector"/>
606-
<TwigVariableCollector implementation="fr.adrienbrault.idea.symfony2plugin.templating.variable.collector.GlobalTwigConfigVariableCollector"/>
602+
<TwigVariableCollector implementation="fr.adrienbrault.idea.symfony2plugin.twig.variable.collector.GlobalTwigConfigVariableCollector"/>
607603
</extensions>
608604

609605
<depends>com.jetbrains.twig</depends>
@@ -616,12 +612,12 @@
616612
<depends optional="true" config-file="deployment-aware.xml">com.jetbrains.plugins.webDeployment</depends>
617613

618614
<extensions defaultExtensionNs="de.espend.idea.php.annotation">
619-
<PhpAnnotationReferenceProvider implementation="fr.adrienbrault.idea.symfony2plugin.templating.annotation.TemplateAnnotationReferences"/>
615+
<PhpAnnotationReferenceProvider implementation="fr.adrienbrault.idea.symfony2plugin.twig.annotation.TemplateAnnotationReferences"/>
620616
<PhpAnnotationReferenceProvider implementation="fr.adrienbrault.idea.symfony2plugin.doctrine.DoctrineAnnotationTargetEntityReferences"/>
621617
<PhpAnnotationReferenceProvider implementation="fr.adrienbrault.idea.symfony2plugin.config.SymfonyAnnotationReferences"/>
622618
<PhpAnnotationReferenceProvider implementation="fr.adrienbrault.idea.symfony2plugin.doctrine.DoctrineAnnotationReferencedColumnReferences"/>
623-
<PhpAnnotationDocTagAnnotator implementation="fr.adrienbrault.idea.symfony2plugin.templating.annotation.TemplateAnnotationAnnotator"/>
624-
<PhpAnnotationDocTagGotoHandler implementation="fr.adrienbrault.idea.symfony2plugin.templating.annotation.TemplateAnnotationGotoHandler"/>
619+
<PhpAnnotationDocTagAnnotator implementation="fr.adrienbrault.idea.symfony2plugin.twig.annotation.TemplateAnnotationAnnotator"/>
620+
<PhpAnnotationDocTagGotoHandler implementation="fr.adrienbrault.idea.symfony2plugin.twig.annotation.TemplateAnnotationGotoHandler"/>
625621
</extensions>
626622

627623
<extensions defaultExtensionNs="de.espend.idea.php.toolbox.extension">
@@ -671,7 +667,7 @@
671667
<add-to-group group-id="GenerateGroup" anchor="last" />
672668
</action>
673669

674-
<action id="Symfony.TwigTranslationGenerator" class="fr.adrienbrault.idea.symfony2plugin.templating.TwigTranslationGeneratorAction" text="Translation" icon="SymfonyIcons.Translation">
670+
<action id="Symfony.TwigTranslationGenerator" class="fr.adrienbrault.idea.symfony2plugin.twig.action.TwigTranslationGeneratorAction" text="Translation" icon="SymfonyIcons.Translation">
675671
<add-to-group group-id="GenerateGroup" anchor="last" />
676672
</action>
677673

src/fr/adrienbrault/idea/symfony2plugin/action/SymfonySymbolSearchAction.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222
import com.jetbrains.php.lang.psi.elements.PhpClass;
2323
import fr.adrienbrault.idea.symfony2plugin.Symfony2Icons;
2424
import fr.adrienbrault.idea.symfony2plugin.Symfony2ProjectComponent;
25-
import fr.adrienbrault.idea.symfony2plugin.TwigHelper;
2625
import fr.adrienbrault.idea.symfony2plugin.action.model.SymfonySymbolSearchModel;
2726
import fr.adrienbrault.idea.symfony2plugin.dic.ContainerService;
2827
import fr.adrienbrault.idea.symfony2plugin.doctrine.EntityHelper;
@@ -33,6 +32,7 @@
3332
import fr.adrienbrault.idea.symfony2plugin.stubs.ContainerCollectionResolver;
3433
import fr.adrienbrault.idea.symfony2plugin.templating.dict.TwigExtension;
3534
import fr.adrienbrault.idea.symfony2plugin.templating.util.TwigExtensionParser;
35+
import fr.adrienbrault.idea.symfony2plugin.templating.util.TwigUtil;
3636
import fr.adrienbrault.idea.symfony2plugin.util.PhpElementsUtil;
3737
import fr.adrienbrault.idea.symfony2plugin.util.SymfonyCommandUtil;
3838
import fr.adrienbrault.idea.symfony2plugin.util.dict.SymfonyCommand;
@@ -94,7 +94,7 @@ private ContainerCollectionResolver.ServiceCollector getServiceCollector() {
9494

9595
private Map<String, Set<VirtualFile>> getTemplateMap() {
9696
if(this.templateMap == null) {
97-
this.templateMap = TwigHelper.getTwigAndPhpTemplateFiles(this.project);
97+
this.templateMap = TwigUtil.getTwigAndPhpTemplateFiles(this.project);
9898
}
9999

100100
return this.templateMap;
@@ -110,7 +110,7 @@ private Map<String, Route> getRoutes() {
110110

111111
private Set<String> getTwigMacroSet() {
112112
if(this.twigMacroSet == null) {
113-
this.twigMacroSet = TwigHelper.getTwigMacroSet(this.project);
113+
this.twigMacroSet = TwigUtil.getTwigMacroSet(this.project);
114114
}
115115

116116
return this.twigMacroSet;
@@ -193,7 +193,7 @@ public void processElementsWithName(@NotNull String name, @NotNull Processor<Nav
193193

194194
// @TODO name filter
195195
if(getTemplateMap().containsKey(name)) {
196-
for (PsiFile psiFile : TwigHelper.getTemplatePsiElements(project, name)) {
196+
for (PsiFile psiFile : TwigUtil.getTemplatePsiElements(project, name)) {
197197
processor.process(new NavigationItemEx(psiFile, name, psiFile.getFileType().getIcon(), "Template"));
198198
}
199199
}
@@ -227,7 +227,7 @@ public void processElementsWithName(@NotNull String name, @NotNull Processor<Nav
227227
}
228228

229229
if(getTwigMacroSet().contains(name)) {
230-
for(PsiElement macroTarget: TwigHelper.getTwigMacroTargets(project, name)) {
230+
for(PsiElement macroTarget: TwigUtil.getTwigMacroTargets(project, name)) {
231231
processor.process(new NavigationItemEx(macroTarget, name, TwigIcons.TwigFileIcon, "Macro"));
232232
}
233233
}

src/fr/adrienbrault/idea/symfony2plugin/asset/AssetGoToDeclarationHandler.java

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@
77
import com.intellij.psi.PsiElement;
88
import com.intellij.psi.PsiManager;
99
import fr.adrienbrault.idea.symfony2plugin.Symfony2ProjectComponent;
10-
import fr.adrienbrault.idea.symfony2plugin.TwigHelper;
10+
import fr.adrienbrault.idea.symfony2plugin.templating.TwigPattern;
11+
import fr.adrienbrault.idea.symfony2plugin.templating.util.TwigUtil;
1112
import org.apache.commons.lang.ArrayUtils;
1213
import org.jetbrains.annotations.Nullable;
1314

@@ -33,7 +34,7 @@ public PsiElement[] getGotoDeclarationTargets(PsiElement psiElement, int i, Edit
3334
}
3435

3536
List<PsiElement> psiElements = new ArrayList<>();
36-
for (VirtualFile virtualFile : TwigHelper.resolveAssetsFiles(psiElement.getProject(), psiElement.getText(), fileExtensionFilterIfValidTag)) {
37+
for (VirtualFile virtualFile : TwigUtil.resolveAssetsFiles(psiElement.getProject(), psiElement.getText(), fileExtensionFilterIfValidTag)) {
3738
psiElements.add(PsiManager.getInstance(psiElement.getProject()).findFile(virtualFile));
3839
}
3940

@@ -49,8 +50,8 @@ private String[] findValidAssetFilter(PsiElement psiElement) {
4950
}
5051

5152
// asset / absolute_url dont have pre filter
52-
if(TwigHelper.getPrintBlockOrTagFunctionPattern("asset", "absolute_url").accepts(psiElement)) {
53-
return (String[]) ArrayUtils.addAll(TwigHelper.CSS_FILES_EXTENSIONS, TwigHelper.JS_FILES_EXTENSIONS);
53+
if(TwigPattern.getPrintBlockOrTagFunctionPattern("asset", "absolute_url").accepts(psiElement)) {
54+
return (String[]) ArrayUtils.addAll(TwigUtil.CSS_FILES_EXTENSIONS, TwigUtil.JS_FILES_EXTENSIONS);
5455
}
5556

5657
return null;
@@ -59,15 +60,15 @@ private String[] findValidAssetFilter(PsiElement psiElement) {
5960
@Nullable
6061
private String[] getFileExtensionFilterIfValidTag(PsiElement psiElement) {
6162
for (String tag: new String[] {"stylesheets", "javascripts"}) {
62-
if (!TwigHelper.getAutocompletableAssetTag(tag).accepts(psiElement)) {
63+
if (!TwigPattern.getAutocompletableAssetTag(tag).accepts(psiElement)) {
6364
continue;
6465
}
6566

6667
switch (tag) {
6768
case "stylesheets":
68-
return TwigHelper.CSS_FILES_EXTENSIONS;
69+
return TwigUtil.CSS_FILES_EXTENSIONS;
6970
case "javascripts":
70-
return TwigHelper.JS_FILES_EXTENSIONS;
71+
return TwigUtil.JS_FILES_EXTENSIONS;
7172
default:
7273
return null;
7374
}
Lines changed: 17 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package fr.adrienbrault.idea.symfony2plugin.asset.dic;
22

3-
43
import com.intellij.openapi.project.Project;
54
import com.intellij.openapi.vfs.VfsUtil;
65
import com.intellij.openapi.vfs.VirtualFile;
@@ -13,32 +12,24 @@
1312
import org.jetbrains.annotations.NotNull;
1413
import org.jetbrains.annotations.Nullable;
1514

16-
import java.util.ArrayList;
17-
import java.util.Arrays;
18-
import java.util.List;
15+
import java.util.*;
1916

2017
/**
2118
* @author Daniel Espendiller <daniel@espendiller.net>
2219
*/
2320
public class AssetDirectoryReader {
21+
final private boolean includeBundleDir;
2422

25-
protected Project project;
26-
protected boolean includeBundleDir = false;
27-
protected String[] filterExtension;
23+
@NotNull
24+
final private Collection<String> filterExtension = new HashSet<>();
2825

29-
public AssetDirectoryReader setProject(Project project) {
30-
this.project = project;
31-
return this;
26+
public AssetDirectoryReader() {
27+
includeBundleDir = false;
3228
}
3329

34-
public AssetDirectoryReader setIncludeBundleDir(boolean includeBundleDir) {
30+
public AssetDirectoryReader(@NotNull String[] filterExtension, boolean includeBundleDir) {
3531
this.includeBundleDir = includeBundleDir;
36-
return this;
37-
}
38-
39-
public AssetDirectoryReader setFilterExtension(String... filterExtension) {
40-
this.filterExtension = filterExtension;
41-
return this;
32+
this.filterExtension.addAll(Arrays.asList(filterExtension));
4233
}
4334

4435
@Nullable
@@ -48,10 +39,10 @@ public static VirtualFile getProjectAssetRoot(@NotNull Project project) {
4839
return VfsUtil.findRelativeFile(projectDirectory, webDirectoryName.split("/"));
4940
}
5041

51-
public List<AssetFile> getAssetFiles() {
52-
final List<AssetFile> files = new ArrayList<>();
42+
public List<AssetFile> getAssetFiles(@NotNull Project project) {
43+
List<AssetFile> files = new ArrayList<>();
5344

54-
final VirtualFile webDirectory = getProjectAssetRoot(project);
45+
VirtualFile webDirectory = getProjectAssetRoot(project);
5546
if (null == webDirectory) {
5647
return files;
5748
}
@@ -70,19 +61,17 @@ public boolean visitFile(@NotNull VirtualFile virtualFile) {
7061
return files;
7162
}
7263

73-
SymfonyBundleUtil symfonyBundleUtil = new SymfonyBundleUtil(PhpIndex.getInstance(this.project));
64+
SymfonyBundleUtil symfonyBundleUtil = new SymfonyBundleUtil(PhpIndex.getInstance(project));
7465
for(final SymfonyBundle bundle : symfonyBundleUtil.getBundles()) {
75-
7666
PsiDirectory bundleDirectory = bundle.getDirectory();
7767
if(null == bundleDirectory) {
7868
continue;
7969
}
8070

81-
final VirtualFile bundleDirectoryVirtual = bundleDirectory.getVirtualFile();
71+
VirtualFile bundleDirectoryVirtual = bundleDirectory.getVirtualFile();
8272
VirtualFile resourceDirectory = VfsUtil.findRelativeFile(bundleDirectoryVirtual, "Resources");
8373

8474
if (null != resourceDirectory) {
85-
8675
VfsUtil.visitChildrenRecursively(resourceDirectory, new VirtualFileVisitor() {
8776
@Override
8877
public boolean visitFile(@NotNull VirtualFile virtualFile) {
@@ -92,29 +81,18 @@ public boolean visitFile(@NotNull VirtualFile virtualFile) {
9281
return super.visitFile(virtualFile);
9382
}
9483
});
95-
9684
}
97-
9885
}
9986

10087
return files;
10188
}
10289

103-
private boolean isValidFile(VirtualFile virtualFile) {
104-
105-
if (virtualFile.isDirectory()) {
90+
private boolean isValidFile(@NotNull VirtualFile virtualFile) {
91+
if (this.filterExtension.size() == 0 || virtualFile.isDirectory()) {
10692
return false;
10793
}
10894

109-
if (this.filterExtension != null) {
110-
String extension = virtualFile.getExtension();
111-
112-
// file need extension and it must be in list
113-
return null != extension && Arrays.asList(this.filterExtension).contains(extension);
114-
115-
}
116-
117-
return true;
95+
String extension = virtualFile.getExtension();
96+
return extension != null && this.filterExtension.contains(extension);
11897
}
119-
12098
}

src/fr/adrienbrault/idea/symfony2plugin/asset/provider/AssetCompletionProvider.java

Lines changed: 15 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -11,29 +11,36 @@
1111
import fr.adrienbrault.idea.symfony2plugin.asset.AssetLookupElement;
1212
import fr.adrienbrault.idea.symfony2plugin.asset.dic.AssetDirectoryReader;
1313
import fr.adrienbrault.idea.symfony2plugin.asset.dic.AssetFile;
14-
import fr.adrienbrault.idea.symfony2plugin.templating.assets.TwigNamedAssetsServiceParser;
14+
import fr.adrienbrault.idea.symfony2plugin.twig.assets.TwigNamedAssetsServiceParser;
1515
import fr.adrienbrault.idea.symfony2plugin.util.service.ServiceXmlParserFactory;
1616
import org.jetbrains.annotations.NotNull;
1717

1818
/**
1919
* @author Daniel Espendiller <daniel@espendiller.net>
2020
*/
2121
public class AssetCompletionProvider extends CompletionProvider<CompletionParameters> {
22+
@NotNull
23+
final private AssetDirectoryReader assetParser;
2224

23-
protected AssetDirectoryReader assetParser;
24-
protected boolean includeCustom = false;
25+
final private boolean includeCustom;
2526

26-
public void addCompletions(@NotNull CompletionParameters parameters,
27-
ProcessingContext context,
28-
@NotNull final CompletionResultSet resultSet) {
27+
public AssetCompletionProvider(@NotNull AssetDirectoryReader assetParser, boolean includeCustom) {
28+
this.assetParser = assetParser;
29+
this.includeCustom = includeCustom;
30+
}
31+
32+
public AssetCompletionProvider(@NotNull AssetDirectoryReader assetParser) {
33+
this(assetParser, false);
34+
}
35+
36+
public void addCompletions(@NotNull CompletionParameters parameters, ProcessingContext context, @NotNull final CompletionResultSet resultSet) {
2937
Project project = parameters.getPosition().getProject();
3038

3139
if(!Symfony2ProjectComponent.isEnabled(parameters.getPosition())) {
3240
return;
3341
}
3442

35-
this.assetParser.setProject(project);
36-
for (final AssetFile assetFile : this.assetParser.getAssetFiles()) {
43+
for (AssetFile assetFile : assetParser.getAssetFiles(project)) {
3744
resultSet.addElement(new AssetLookupElement(assetFile, project));
3845
}
3946

@@ -43,17 +50,5 @@ public void addCompletions(@NotNull CompletionParameters parameters,
4350
resultSet.addElement(LookupElementBuilder.create("@" + s).withIcon(PlatformIcons.FOLDER_ICON).withTypeText("Custom Assets", true));
4451
}
4552
}
46-
4753
}
48-
49-
public AssetCompletionProvider setAssetParser(AssetDirectoryReader assetParser) {
50-
this.assetParser = assetParser;
51-
return this;
52-
}
53-
54-
public AssetCompletionProvider setIncludeCustom(boolean includeCustom) {
55-
this.includeCustom = includeCustom;
56-
return this;
57-
}
58-
5954
}
Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
package fr.adrienbrault.idea.symfony2plugin.codeInsight;
22

3+
import org.jetbrains.annotations.NotNull;
4+
35
/**
46
* @author Daniel Espendiller <daniel@espendiller.net>
57
*/
68
public interface GotoCompletionRegistrar {
7-
void register(GotoCompletionRegistrarParameter registrar);
9+
void register(@NotNull GotoCompletionRegistrarParameter registrar);
810
}

src/fr/adrienbrault/idea/symfony2plugin/completion/command/ConsoleHelperGotoCompletionRegistrar.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ public class ConsoleHelperGotoCompletionRegistrar implements GotoCompletionRegis
2929
};
3030

3131
@Override
32-
public void register(GotoCompletionRegistrarParameter registrar) {
32+
public void register(@NotNull GotoCompletionRegistrarParameter registrar) {
3333
registrar.register(PlatformPatterns.psiElement().withParent(StringLiteralExpression.class).withLanguage(PhpLanguage.INSTANCE), psiElement -> {
3434
PsiElement context = psiElement.getContext();
3535
if (!(context instanceof StringLiteralExpression)) {

src/fr/adrienbrault/idea/symfony2plugin/completion/command/PhpCommandGotoCompletionRegistrar.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
public class PhpCommandGotoCompletionRegistrar implements GotoCompletionRegistrar {
3232

3333
@Override
34-
public void register(GotoCompletionRegistrarParameter registrar) {
34+
public void register(@NotNull GotoCompletionRegistrarParameter registrar) {
3535

3636
registrar.register(PlatformPatterns.psiElement().withParent(StringLiteralExpression.class).withLanguage(PhpLanguage.INSTANCE), psiElement -> {
3737
PsiElement context = psiElement.getContext();

0 commit comments

Comments
 (0)