package com.cedricziel.idea.typo3.codeInsight.extbase; import com.cedricziel.idea.typo3.TYPO3CMSIcons; import com.cedricziel.idea.typo3.container.IconProvider; import com.cedricziel.idea.typo3.psi.PhpElementsUtil; import com.cedricziel.idea.typo3.util.IconUtil; import com.intellij.codeInsight.daemon.RelatedItemLineMarkerInfo; import com.intellij.codeInsight.daemon.RelatedItemLineMarkerProvider; import com.intellij.codeInsight.navigation.NavigationGutterIconBuilder; import com.intellij.psi.PsiElement; import com.jetbrains.php.PhpIndex; import com.jetbrains.php.lang.psi.elements.PhpClass; import org.jetbrains.annotations.NotNull; import javax.swing.*; import java.io.IOException; import java.util.Collection; public class EntityLineMarkerProvider extends RelatedItemLineMarkerProvider { @Override protected void collectNavigationMarkers(@NotNull PsiElement element, Collection<? super RelatedItemLineMarkerInfo> result) { renderDefinitionMarker(element, result); } private void renderDefinitionMarker(PsiElement element, Collection<? super RelatedItemLineMarkerInfo> result) { if (!(element instanceof PhpClass)) { return; } PhpClass thisClass = (PhpClass) element; Collection<PhpClass> abstractEntityClasses = PhpIndex.getInstance(element.getProject()).getClassesByFQN("\\TYPO3\\CMS\\Extbase\\DomainObject\\AbstractDomainObject"); if (abstractEntityClasses.isEmpty()) { return; } PhpClass abstractDomainObjectClass = abstractEntityClasses.iterator().next(); if (!PhpElementsUtil.extendsClass(thisClass, abstractDomainObjectClass)) { return; } markLineForEntityDefinition(element, result); } private void markLineForEntityDefinition(PsiElement element, Collection<? super RelatedItemLineMarkerInfo> result) { IconProvider iconProvider = IconProvider.getInstance(element.getProject()); Icon icon = null; if (iconProvider.has(element.getProject(), "actions-document")) { try { icon = IconUtil.createIconFromFile(iconProvider.get(element.getProject(), "actions-document").iterator().next().getVirtualFile()); } catch (IOException e) { icon = TYPO3CMSIcons.ICON_NOT_RESOLVED; } } if (icon == null) { icon = TYPO3CMSIcons.ICON_NOT_RESOLVED; } NavigationGutterIconBuilder<PsiElement> builder; builder = NavigationGutterIconBuilder .create(icon) .setTarget(element) .setTooltipText("Extbase Entity"); result.add(builder.createLineMarkerInfo(element)); } }