Skip to content

Commit 7097765

Browse files
committed
map entity class with orm.yml file as linemarker #309
1 parent 7c169a5 commit 7097765

File tree

3 files changed

+37
-0
lines changed

3 files changed

+37
-0
lines changed

src/fr/adrienbrault/idea/symfony2plugin/Symfony2Icons.java

+1
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ public class Symfony2Icons {
1313
public static final Icon SYMFONY = IconLoader.getIcon("icons/symfony.png");
1414
public static final Icon SYMFONY_TOOL_WINDOW = IconLoader.getIcon("icons/symfony_tool_window.png");
1515
public static final Icon DOCTRINE = IconLoader.getIcon("icons/doctrine.png");
16+
public static final Icon DOCTRINE_LINE_MARKER = IconLoader.getIcon("icons/doctrine_line_marker.png");
1617
public static final Icon MONGODB = IconLoader.getIcon("icons/mongodb.png");
1718
public static final Icon ROUTE = IconLoader.getIcon("icons/route.png");
1819
public static final Icon ROUTE_WEAK = IconLoader.getIcon("icons/route_weak.png");

src/fr/adrienbrault/idea/symfony2plugin/config/ServiceLineMarkerProvider.java

+36
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,19 @@
66
import com.intellij.codeInsight.navigation.NavigationGutterIconBuilder;
77
import com.intellij.openapi.project.Project;
88
import com.intellij.psi.PsiElement;
9+
import com.intellij.psi.PsiFile;
910
import com.intellij.psi.util.PsiTreeUtil;
1011
import com.jetbrains.php.lang.psi.elements.*;
1112
import fr.adrienbrault.idea.symfony2plugin.Settings;
1213
import fr.adrienbrault.idea.symfony2plugin.Symfony2Icons;
1314
import fr.adrienbrault.idea.symfony2plugin.Symfony2InterfacesUtil;
1415
import fr.adrienbrault.idea.symfony2plugin.Symfony2ProjectComponent;
1516
import fr.adrienbrault.idea.symfony2plugin.dic.XmlServiceParser;
17+
import fr.adrienbrault.idea.symfony2plugin.doctrine.EntityHelper;
1618
import fr.adrienbrault.idea.symfony2plugin.form.util.FormUtil;
1719
import fr.adrienbrault.idea.symfony2plugin.stubs.ServiceIndexUtil;
1820
import fr.adrienbrault.idea.symfony2plugin.util.PhpElementsUtil;
21+
import fr.adrienbrault.idea.symfony2plugin.util.dict.DoctrineModel;
1922
import fr.adrienbrault.idea.symfony2plugin.util.service.ServiceXmlParserFactory;
2023
import org.apache.commons.lang.StringUtils;
2124
import org.jetbrains.annotations.NotNull;
@@ -55,6 +58,7 @@ public void collectSlowLineMarkers(@NotNull List<PsiElement> psiElements, @NotNu
5558

5659
if(PhpElementsUtil.getClassNamePattern().accepts(psiElement)) {
5760
this.classNameMarker(psiElement, results);
61+
this.entityClassMarker(psiElement, results);
5862
}
5963

6064
if(phpHighlightServices) {
@@ -121,6 +125,38 @@ private void classNameMarker(PsiElement psiElement, Collection<? super RelatedIt
121125

122126
}
123127

128+
private void entityClassMarker(PsiElement psiElement, Collection<? super RelatedItemLineMarkerInfo> result) {
129+
130+
PsiElement phpClassContext = psiElement.getContext();
131+
if(!(phpClassContext instanceof PhpClass)) {
132+
return;
133+
}
134+
135+
String originFqn = ((PhpClass) phpClassContext).getPresentableFQN();
136+
if(originFqn == null || !originFqn.toLowerCase().contains("entity")) {
137+
return;
138+
}
139+
140+
for(DoctrineModel doctrineModel: EntityHelper.getModelClasses(psiElement.getProject())) {
141+
PhpClass phpClass = doctrineModel.getPhpClass();
142+
if(phpClass != null) {
143+
String presentableFQN = phpClass.getPresentableFQN();
144+
145+
if(presentableFQN != null && presentableFQN.equals(originFqn)) {
146+
PsiFile psiFile = EntityHelper.getModelConfigFile(phpClass);
147+
if(psiFile != null) {
148+
NavigationGutterIconBuilder<PsiElement> builder = NavigationGutterIconBuilder.create(Symfony2Icons.DOCTRINE_LINE_MARKER).
149+
setTarget(psiFile).
150+
setTooltipText("Navigate to model");
151+
152+
result.add(builder.createLineMarkerInfo(psiElement));
153+
}
154+
}
155+
}
156+
}
157+
158+
}
159+
124160
private void formNameMarker(PsiElement psiElement, Collection<? super RelatedItemLineMarkerInfo> result) {
125161

126162
if(!(psiElement instanceof StringLiteralExpression)) {
Loading

0 commit comments

Comments
 (0)