package fr.adrienbrault.idea.symfony2plugin.dic; import com.intellij.codeInsight.lookup.LookupElement; import com.intellij.codeInsight.lookup.LookupElementPresentation; import com.intellij.util.containers.ContainerUtil; import fr.adrienbrault.idea.symfony2plugin.Symfony2Icons; import org.apache.commons.lang.StringUtils; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.Objects; /** * @author Daniel Espendiller <daniel@espendiller.net> */ public class ServiceStringLookupElement extends LookupElement { @NotNull private ContainerService containerService; private boolean boldText = false; public ServiceStringLookupElement(@NotNull ContainerService containerService) { this.containerService = containerService; } public ServiceStringLookupElement(@NotNull ContainerService containerService, boolean boldText) { this(containerService); this.boldText = boldText; } @NotNull @Override public String getLookupString() { return containerService.getName(); } public void renderElement(LookupElementPresentation presentation) { presentation.setItemText(getLookupString()); presentation.setTypeGrayed(true); String className = getClassName(containerService); if(className != null) { presentation.setTypeText(StringUtils.strip(className, "\\")); } // private or non container services if(className == null || containerService.isWeak()) { presentation.setIcon(Symfony2Icons.SERVICE_OPACITY); } else { presentation.setIcon(Symfony2Icons.SERVICE); } if(this.containerService.isPrivate()) { presentation.setIcon(Symfony2Icons.SERVICE_PRIVATE_OPACITY); } presentation.setItemTextBold(this.boldText); if(this.boldText) { presentation.setTypeGrayed(false); presentation.setItemTextUnderlined(true); } if(containerService.getService() != null) { presentation.setStrikeout(containerService.getService().isDeprecated()); } } @Nullable private String getClassName(@NotNull ContainerService containerService) { return ContainerUtil.find(containerService.getClassNames(), Objects::nonNull); } }