Skip to content

Commit bc86359

Browse files
committed
use more stable psi elements to collect trans_default_domain domains #476
1 parent 0ce78b4 commit bc86359

File tree

1 file changed

+34
-7
lines changed
  • src/fr/adrienbrault/idea/symfony2plugin/templating/util

1 file changed

+34
-7
lines changed

src/fr/adrienbrault/idea/symfony2plugin/templating/util/TwigUtil.java

+34-7
Original file line numberDiff line numberDiff line change
@@ -21,15 +21,18 @@
2121
import com.jetbrains.twig.TwigFile;
2222
import com.jetbrains.twig.TwigFileType;
2323
import com.jetbrains.twig.elements.TwigBlockTag;
24+
import com.jetbrains.twig.elements.TwigCompositeElement;
2425
import com.jetbrains.twig.elements.TwigElementTypes;
2526
import com.jetbrains.twig.elements.TwigExtendsTag;
2627
import fr.adrienbrault.idea.symfony2plugin.TwigHelper;
2728
import fr.adrienbrault.idea.symfony2plugin.stubs.indexes.PhpTwigTemplateUsageStubIndex;
2829
import fr.adrienbrault.idea.symfony2plugin.templating.dict.*;
2930
import fr.adrienbrault.idea.symfony2plugin.templating.variable.dict.PsiVariable;
3031
import fr.adrienbrault.idea.symfony2plugin.util.PhpElementsUtil;
32+
import fr.adrienbrault.idea.symfony2plugin.util.PsiElementUtils;
3133
import fr.adrienbrault.idea.symfony2plugin.util.SymfonyBundleUtil;
3234
import fr.adrienbrault.idea.symfony2plugin.util.dict.SymfonyBundle;
35+
import fr.adrienbrault.idea.symfony2plugin.util.yaml.YamlHelper;
3336
import org.apache.commons.lang.StringUtils;
3437
import org.jetbrains.annotations.NotNull;
3538
import org.jetbrains.annotations.Nullable;
@@ -140,17 +143,41 @@ public static Map<String, PsiElement> getTemplateAnnotationFilesWithSiblingMetho
140143
return targets;
141144
}
142145

146+
/**
147+
* Finds a trans_default_domain definition in twig file
148+
*
149+
* "{% trans_default_domain "validators" %}"
150+
*
151+
* @param psiFile twig file
152+
* @return file translation domain
153+
*/
143154
@Nullable
144-
public static String getTwigFileTransDefaultDomain(PsiFile psiFile) {
155+
public static String getTwigFileTransDefaultDomain(@NotNull PsiFile psiFile) {
145156

146-
String str = psiFile.getText();
157+
for (PsiElement psiElement : psiFile.getChildren()) {
147158

148-
// {% trans_default_domain "app" %}
149-
String regex = "\\{%\\s?trans_default_domain\\s?['\"](\\w+)['\"]\\s?%}";
150-
Matcher matcher = Pattern.compile(regex).matcher(str.replace("\r\n", " ").replace("\n", " "));
159+
// filter parent trans_default_domain, it should be in file context
160+
if(psiElement instanceof TwigCompositeElement && psiElement.getNode().getElementType() == TwigElementTypes.TAG) {
151161

152-
if (matcher.find()) {
153-
return matcher.group(1);
162+
final String[] fileTransDomain = {null};
163+
psiElement.acceptChildren(new PsiRecursiveElementWalkingVisitor() {
164+
@Override
165+
public void visitElement(PsiElement element) {
166+
if(TwigHelper.getTransDefaultDomainPattern().accepts(element)) {
167+
String text = PsiElementUtils.trimQuote(element.getText());
168+
if(StringUtils.isNotBlank(text)) {
169+
fileTransDomain[0] = text;
170+
}
171+
}
172+
super.visitElement(element);
173+
}
174+
});
175+
176+
if(fileTransDomain[0] != null) {
177+
return fileTransDomain[0];
178+
}
179+
180+
}
154181
}
155182

156183
return null;

0 commit comments

Comments
 (0)