diff --git a/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/refs/JavaFxImportClassFix.java b/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/refs/JavaFxImportClassFix.java index a49c247fe755..c1bd42111bb0 100644 --- a/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/refs/JavaFxImportClassFix.java +++ b/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/refs/JavaFxImportClassFix.java @@ -20,6 +20,7 @@ import com.intellij.openapi.util.text.StringUtil; import com.intellij.psi.*; import com.intellij.psi.xml.XmlFile; import com.intellij.psi.xml.XmlTag; +import com.intellij.xml.XmlElementDescriptor; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.plugins.javaFX.fxml.JavaFxPsiUtil; @@ -71,7 +72,8 @@ abstract class JavaFxImportClassFix extends ImportClassFixBase consumer) { - class StopException extends RuntimeException { - } - try { - file.accept(new XmlRecursiveElementVisitor() { - @Override - public void visitXmlAttribute(XmlAttribute attribute) { - final PsiReference[] references = attribute.getReferences(); - for (PsiReference reference : references) { - if ((reference instanceof JavaFxStaticPropertyReference || reference instanceof JavaFxEventHandlerReference) && - reference.isReferenceTo(psiMethod)) { - if (!consumer.process(reference)) { - throw new StopException(); - } + final Ref stopped = new Ref<>(false); + file.accept(new XmlRecursiveElementVisitor() { + @Override + public void visitXmlElement(XmlElement element) { + if (stopped.get()) return; + super.visitXmlElement(element); + } + + @Override + public void visitXmlAttribute(XmlAttribute attribute) { + if (stopped.get()) return; + final PsiReference[] references = attribute.getReferences(); + for (PsiReference reference : references) { + if ((reference instanceof JavaFxStaticPropertyReference || reference instanceof JavaFxEventHandlerReference) && + reference.isReferenceTo(psiMethod)) { + if (!consumer.process(reference)) { + stopped.set(true); + return; } } } - }); - return true; - } - catch (StopException unused) { - return false; - } + } + }); + return !stopped.get(); } } diff --git a/plugins/javaFX/src/org/jetbrains/plugins/javaFX/refactoring/JavaFxPropertyRenameHandler.java b/plugins/javaFX/src/org/jetbrains/plugins/javaFX/refactoring/JavaFxPropertyRenameHandler.java index 6e7b0a972de6..803088749d67 100644 --- a/plugins/javaFX/src/org/jetbrains/plugins/javaFX/refactoring/JavaFxPropertyRenameHandler.java +++ b/plugins/javaFX/src/org/jetbrains/plugins/javaFX/refactoring/JavaFxPropertyRenameHandler.java @@ -138,17 +138,17 @@ public class JavaFxPropertyRenameHandler implements RenameHandler { @NotNull private static Map getElementsToRename(@NotNull JavaFxPropertyReference reference, @NotNull String newPropertyName) { final Map rename = new THashMap<>(); - putIfKeyNotNull(rename, reference.getGetter(), () -> PropertyUtil.suggestGetterName(newPropertyName, reference.getType())); - putIfKeyNotNull(rename, reference.getField(), () -> newPropertyName); - putIfKeyNotNull(rename, reference.getSetter(), () -> PropertyUtil.suggestSetterName(newPropertyName)); - putIfKeyNotNull(rename, reference.getObservableGetter(), () -> newPropertyName + JavaFxCommonNames.PROPERTY_METHOD_SUFFIX); - putIfKeyNotNull(rename, reference.getStaticSetter(), () -> PropertyUtil.suggestSetterName(newPropertyName)); + putIfKeyNotNull(rename, reference.getGetter(), PropertyUtil.suggestGetterName(newPropertyName, reference.getType())); + putIfKeyNotNull(rename, reference.getField(), newPropertyName); + putIfKeyNotNull(rename, reference.getSetter(), PropertyUtil.suggestSetterName(newPropertyName)); + putIfKeyNotNull(rename, reference.getObservableGetter(), newPropertyName + JavaFxCommonNames.PROPERTY_METHOD_SUFFIX); + putIfKeyNotNull(rename, reference.getStaticSetter(), PropertyUtil.suggestSetterName(newPropertyName)); //TODO add "name" parameter of the observable property constructor (like new SimpleObjectProperty(this, "name", null); return rename; } - private static void putIfKeyNotNull(Map map, K key, NotNullProducer valueProducer) { - if (key != null) map.put(key, valueProducer.produce()); + private static void putIfKeyNotNull(@NotNull Map map, @Nullable K key, @NotNull V value) { + if (key != null) map.put(key, value); } private static class PropertyRenameDialog extends RenameDialog {