From 40a99caac61cf66f7db8c92528830e768a2a8603 Mon Sep 17 00:00:00 2001 From: Daniil Ovchinnikov Date: Wed, 28 Feb 2018 17:03:28 +0300 Subject: [PATCH] fix SIOOBE (EA-116377) --- .../javaFX/fxml/JavaFXQuickfixTest.java | 48 +++++++++++++++++-- ...FxEventHandlerReferenceQuickFixProvider.kt | 4 +- .../CreateControllerMethodEmptyName.java | 1 + .../createControllerMethodEmptyName.fxml | 5 ++ 4 files changed, 52 insertions(+), 6 deletions(-) create mode 100644 plugins/javaFX/testData/quickfix/CreateControllerMethodEmptyName.java create mode 100644 plugins/javaFX/testData/quickfix/createControllerMethodEmptyName.fxml diff --git a/plugins/javaFX/javaFX-CE/testSrc/org/jetbrains/plugins/javaFX/fxml/JavaFXQuickfixTest.java b/plugins/javaFX/javaFX-CE/testSrc/org/jetbrains/plugins/javaFX/fxml/JavaFXQuickfixTest.java index 32082937bfda..189d478af610 100644 --- a/plugins/javaFX/javaFX-CE/testSrc/org/jetbrains/plugins/javaFX/fxml/JavaFXQuickfixTest.java +++ b/plugins/javaFX/javaFX-CE/testSrc/org/jetbrains/plugins/javaFX/fxml/JavaFXQuickfixTest.java @@ -4,11 +4,20 @@ package org.jetbrains.plugins.javaFX.fxml; import com.intellij.codeInsight.intention.IntentionAction; import com.intellij.codeInsight.intention.IntentionActionDelegate; import com.intellij.openapi.application.PluginPathManager; +import com.intellij.openapi.command.WriteCommandAction; +import com.intellij.openapi.editor.Document; +import com.intellij.openapi.editor.Editor; import com.intellij.openapi.module.Module; import com.intellij.openapi.roots.ContentEntry; import com.intellij.openapi.roots.ModifiableRootModel; +import com.intellij.openapi.util.TextRange; +import com.intellij.psi.PsiDocumentManager; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiFile; import com.intellij.psi.PsiModifier; import com.intellij.psi.codeStyle.JavaCodeStyleSettings; +import com.intellij.psi.util.PsiTreeUtil; +import com.intellij.psi.xml.XmlAttributeValue; import com.intellij.psi.xml.XmlFile; import com.intellij.testFramework.LightProjectDescriptor; import com.intellij.testFramework.PlatformTestUtil; @@ -17,6 +26,7 @@ import com.intellij.testFramework.fixtures.DefaultLightProjectDescriptor; import com.intellij.testFramework.fixtures.LightCodeInsightFixtureTestCase; import com.intellij.util.VisibilityUtil; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import org.jetbrains.plugins.javaFX.fxml.codeInsight.inspections.JavaFxUnresolvedFxIdReferenceInspection; import org.jetbrains.plugins.javaFX.fxml.codeInsight.intentions.JavaFxInjectPageLanguageIntention; @@ -38,6 +48,29 @@ public class JavaFXQuickfixTest extends LightCodeInsightFixtureTestCase { return JAVA_FX_WITH_GROOVY_DESCRIPTOR; } + public void testCreateControllerMethodEmptyName() { + String inputName = getTestName(false); + String extension = ".java"; + String actionName = "Create method"; + + String path = PlatformTestUtil.lowercaseFirstLetter(inputName, true) + ".fxml"; + myFixture.configureByFiles(path, inputName + extension); + IntentionAction intention = myFixture.findSingleIntention(actionName); + + Editor editor = myFixture.getEditor(); + PsiFile file = myFixture.getFile(); + WriteCommandAction.runWriteCommandAction(getProject(), () -> { + Document document = editor.getDocument(); + + PsiElement leaf = file.findElementAt(editor.getCaretModel().getOffset()); + TextRange range = PsiTreeUtil.getParentOfType(leaf, XmlAttributeValue.class).getValueTextRange(); + document.deleteString(range.getStartOffset(), range.getEndOffset()); + + PsiDocumentManager.getInstance(getProject()).commitDocument(document); + }); + assertFalse(intention.isAvailable(getProject(), editor, file)); + } + public void testCreateControllerMethod() { doTest("Create method 'bar'", ".java"); } @@ -141,13 +174,18 @@ public class JavaFXQuickfixTest extends LightCodeInsightFixtureTestCase { doTest(actionName, getTestName(false), getTestName(false), extension); } - private void doTest(final String actionName, final String inputName, final String outputName, final String extension) { + private void doTest(final String actionName, final String inputName, @Nullable final String outputName, final String extension) { String path = PlatformTestUtil.lowercaseFirstLetter(inputName, true) + ".fxml"; myFixture.configureByFiles(path, inputName + extension); - final IntentionAction intention = myFixture.findSingleIntention(actionName); - assertNotNull(intention); - myFixture.launchAction(intention); - myFixture.checkResultByFile(inputName + extension, outputName + "_after" + extension, true); + + if (outputName == null) { + assertNull(myFixture.getAvailableIntention(actionName)); + } + else { + final IntentionAction intention = myFixture.findSingleIntention(actionName); + myFixture.launchAction(intention); + myFixture.checkResultByFile(inputName + extension, outputName + "_after" + extension, true); + } } @Override diff --git a/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/refs/JavaFxEventHandlerReferenceQuickFixProvider.kt b/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/refs/JavaFxEventHandlerReferenceQuickFixProvider.kt index e6d314e6b6d4..0a1d36a0069a 100644 --- a/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/refs/JavaFxEventHandlerReferenceQuickFixProvider.kt +++ b/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/refs/JavaFxEventHandlerReferenceQuickFixProvider.kt @@ -41,7 +41,9 @@ class CreateEventHandlerRequest(element: XmlAttributeValue) : CreateMethodReques private val myPointer = element.createSmartPointer(myProject) override fun isValid(): Boolean = myPointer.element.let { - it != null && it.value != null + it != null && it.value.let { value -> + value != null && value.length > 2 + } } private val myElement get() = myPointer.element!! diff --git a/plugins/javaFX/testData/quickfix/CreateControllerMethodEmptyName.java b/plugins/javaFX/testData/quickfix/CreateControllerMethodEmptyName.java new file mode 100644 index 000000000000..1c86ca366894 --- /dev/null +++ b/plugins/javaFX/testData/quickfix/CreateControllerMethodEmptyName.java @@ -0,0 +1 @@ +public class CreateControllerMethodEmptyName {} \ No newline at end of file diff --git a/plugins/javaFX/testData/quickfix/createControllerMethodEmptyName.fxml b/plugins/javaFX/testData/quickfix/createControllerMethodEmptyName.fxml new file mode 100644 index 000000000000..7938c913d990 --- /dev/null +++ b/plugins/javaFX/testData/quickfix/createControllerMethodEmptyName.fxml @@ -0,0 +1,5 @@ + + + +