package fr.adrienbrault.idea.symfony2plugin.config.yaml;
import com.intellij.codeInsight.completion.CompletionParameters;
import com.intellij.codeInsight.completion.CompletionProvider;
import com.intellij.codeInsight.completion.CompletionResultSet;
import com.intellij.codeInsight.lookup.LookupElement;
import com.intellij.codeInsight.lookup.LookupElementBuilder;
import com.intellij.util.ProcessingContext;
import fr.adrienbrault.idea.symfony2plugin.Symfony2Icons;
import fr.adrienbrault.idea.symfony2plugin.Symfony2ProjectComponent;
import org.jetbrains.annotations.NotNull;
import java.util.List;
import java.util.Map;
/**
* @author Daniel Espendiller <daniel@espendiller.net>
*/
public class YamlCompletionProvider extends CompletionProvider<CompletionParameters> {
private List<LookupElement> lookupList;
private Map<String, String> lookupMap;
private String[] lookupArray;
public YamlCompletionProvider(List<LookupElement> lookups) {
this.lookupList = lookups;
}
public YamlCompletionProvider(Map<String, String> lookups) {
this.lookupMap = lookups;
}
public YamlCompletionProvider(String[] lookups) {
this.lookupArray = lookups;
}
public void addCompletions(@NotNull CompletionParameters parameters, ProcessingContext context, @NotNull CompletionResultSet resultSet) {
if(!Symfony2ProjectComponent.isEnabled(parameters.getPosition())) {
return;
}
if(this.lookupList != null) {
resultSet.addAllElements(this.lookupList);
} else if(lookupMap != null) {
for (Map.Entry<String, String> lookup : lookupMap.entrySet()) {
LookupElementBuilder lookupElement = LookupElementBuilder.create(lookup.getKey()).withTypeText(lookup.getValue(), true).withIcon(Symfony2Icons.SYMFONY);
if(lookup.getValue() != null && lookup.getValue().contains("deprecated")) {
lookupElement = lookupElement.withStrikeoutness(true);
}
resultSet.addElement(lookupElement);
}
} else if(lookupArray != null) {
for (String lookup : lookupArray) {
resultSet.addElement(LookupElementBuilder.create(lookup).withIcon(Symfony2Icons.SYMFONY));
}
}
}
}