diff options
Diffstat (limited to 'plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/refs/JavaFxControllerFieldSearcher.java')
-rw-r--r-- | plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/refs/JavaFxControllerFieldSearcher.java | 66 |
1 files changed, 34 insertions, 32 deletions
diff --git a/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/refs/JavaFxControllerFieldSearcher.java b/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/refs/JavaFxControllerFieldSearcher.java index 0f3a1846b4e2..742f84fd3efc 100644 --- a/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/refs/JavaFxControllerFieldSearcher.java +++ b/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/refs/JavaFxControllerFieldSearcher.java @@ -16,6 +16,7 @@ package org.jetbrains.plugins.javaFX.fxml.refs; import com.intellij.openapi.application.ApplicationManager; +import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Computable; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.*; @@ -23,6 +24,7 @@ import com.intellij.psi.search.GlobalSearchScope; import com.intellij.psi.search.LocalSearchScope; import com.intellij.psi.search.SearchScope; import com.intellij.psi.search.searches.ReferencesSearch; +import com.intellij.psi.util.PsiUtilCore; import com.intellij.psi.xml.XmlAttribute; import com.intellij.psi.xml.XmlAttributeValue; import com.intellij.util.Processor; @@ -43,7 +45,12 @@ public class JavaFxControllerFieldSearcher implements QueryExecutor<PsiReference final PsiElement elementToSearch = queryParameters.getElementToSearch(); if (elementToSearch instanceof PsiField) { final PsiField field = (PsiField)elementToSearch; - final PsiClass containingClass = field.getContainingClass(); + final PsiClass containingClass = ApplicationManager.getApplication().runReadAction(new Computable<PsiClass>() { + @Override + public PsiClass compute() { + return field.getContainingClass(); + } + }); if (containingClass != null) { final String qualifiedName = ApplicationManager.getApplication().runReadAction(new Computable<String>() { @Override @@ -52,45 +59,40 @@ public class JavaFxControllerFieldSearcher implements QueryExecutor<PsiReference } }); if (qualifiedName != null) { - final List<PsiFile> fxmlWithController = - JavaFxControllerClassIndex.findFxmlWithController(containingClass.getProject(), qualifiedName); - final String fieldName = field.getName(); + Project project = PsiUtilCore.getProjectInReadAction(containingClass); + final List<PsiFile> fxmlWithController = + JavaFxControllerClassIndex.findFxmlWithController(project, qualifiedName); for (final PsiFile file : fxmlWithController) { - final VirtualFile virtualFile = file.getViewProvider().getVirtualFile(); - final SearchScope searchScope = ApplicationManager.getApplication().runReadAction(new Computable<SearchScope>() { + ApplicationManager.getApplication().runReadAction(new Runnable() { @Override - public SearchScope compute() { - return queryParameters.getEffectiveSearchScope(); - } - }); - if (searchScope instanceof LocalSearchScope) { - if (!((LocalSearchScope)searchScope).isInScope(virtualFile)) continue; - } else if (searchScope instanceof GlobalSearchScope) { - if (!((GlobalSearchScope)searchScope).contains(virtualFile)) continue; - } - final Runnable runnable = new Runnable() { public void run() { - file.accept(new XmlRecursiveElementVisitor() { - @Override - public void visitXmlAttributeValue(final XmlAttributeValue value) { - final PsiReference reference = value.getReference(); - if (reference != null) { - final PsiElement resolve = reference.resolve(); - if (resolve instanceof XmlAttributeValue) { - final PsiElement parent = resolve.getParent(); - if (parent instanceof XmlAttribute) { - final XmlAttribute attribute = (XmlAttribute)parent; - if (FxmlConstants.FX_ID.equals(attribute.getName()) && fieldName.equals(attribute.getValue())) { - consumer.process(reference); + final String fieldName = field.getName(); + final VirtualFile virtualFile = file.getViewProvider().getVirtualFile(); + final SearchScope searchScope = queryParameters.getEffectiveSearchScope(); + boolean contains = searchScope instanceof LocalSearchScope ? ((LocalSearchScope)searchScope).isInScope(virtualFile) : + ((GlobalSearchScope)searchScope).contains(virtualFile); + if (contains) { + file.accept(new XmlRecursiveElementVisitor() { + @Override + public void visitXmlAttributeValue(final XmlAttributeValue value) { + final PsiReference reference = value.getReference(); + if (reference != null) { + final PsiElement resolve = reference.resolve(); + if (resolve instanceof XmlAttributeValue) { + final PsiElement parent = resolve.getParent(); + if (parent instanceof XmlAttribute) { + final XmlAttribute attribute = (XmlAttribute)parent; + if (FxmlConstants.FX_ID.equals(attribute.getName()) && fieldName.equals(attribute.getValue())) { + consumer.process(reference); + } } } } } - } - }); + }); + } } - }; - ApplicationManager.getApplication().runReadAction(runnable); + }); } } } |