package fr.adrienbrault.idea.symfony2plugin.asset.provider; import com.intellij.codeInsight.completion.CompletionParameters; import com.intellij.codeInsight.completion.CompletionProvider; import com.intellij.codeInsight.completion.CompletionResultSet; import com.intellij.codeInsight.lookup.LookupElementBuilder; import com.intellij.openapi.project.Project; import com.intellij.util.PlatformIcons; import com.intellij.util.ProcessingContext; import fr.adrienbrault.idea.symfony2plugin.Symfony2ProjectComponent; import fr.adrienbrault.idea.symfony2plugin.asset.AssetLookupElement; import fr.adrienbrault.idea.symfony2plugin.asset.dic.AssetDirectoryReader; import fr.adrienbrault.idea.symfony2plugin.asset.dic.AssetFile; import fr.adrienbrault.idea.symfony2plugin.templating.assets.TwigNamedAssetsServiceParser; import fr.adrienbrault.idea.symfony2plugin.util.service.ServiceXmlParserFactory; import org.jetbrains.annotations.NotNull; /** * @author Daniel Espendiller <daniel@espendiller.net> */ public class AssetCompletionProvider extends CompletionProvider<CompletionParameters> { protected AssetDirectoryReader assetParser; protected boolean includeCustom = false; public void addCompletions(@NotNull CompletionParameters parameters, ProcessingContext context, @NotNull final CompletionResultSet resultSet) { Project project = parameters.getPosition().getProject(); if(!Symfony2ProjectComponent.isEnabled(parameters.getPosition())) { return; } this.assetParser.setProject(project); for (final AssetFile assetFile : this.assetParser.getAssetFiles()) { resultSet.addElement(new AssetLookupElement(assetFile, project)); } if(includeCustom) { TwigNamedAssetsServiceParser twigPathServiceParser = ServiceXmlParserFactory.getInstance(project, TwigNamedAssetsServiceParser.class); for (String s : twigPathServiceParser.getNamedAssets().keySet()) { resultSet.addElement(LookupElementBuilder.create("@" + s).withIcon(PlatformIcons.FOLDER_ICON).withTypeText("Custom Assets", true)); } } } public AssetCompletionProvider setAssetParser(AssetDirectoryReader assetParser) { this.assetParser = assetParser; return this; } public AssetCompletionProvider setIncludeCustom(boolean includeCustom) { this.includeCustom = includeCustom; return this; } }