From e2950f5b7fdbfc21d29a5ebaf3a8f2b684b0f00d Mon Sep 17 00:00:00 2001 From: Alexey Merkulov Date: Mon, 30 Jul 2018 21:50:27 +0300 Subject: [PATCH] RUBY-22215 Reverted standard Copy reference action for YAML files IDEA-CR-35493 --- .../navigation/YAMLQualifiedNameProvider.java | 7 ++- .../navigation/YAMLCopyReferenceTest.java | 53 +++++++++++++++++-- .../yaml/navigation/data/comment.yml | 4 ++ .../yaml/navigation/data/plainTextValue.yml | 2 + 4 files changed, 60 insertions(+), 6 deletions(-) create mode 100644 plugins/yaml/testSrc/org/jetbrains/yaml/navigation/data/comment.yml create mode 100644 plugins/yaml/testSrc/org/jetbrains/yaml/navigation/data/plainTextValue.yml diff --git a/plugins/yaml/src/org/jetbrains/yaml/navigation/YAMLQualifiedNameProvider.java b/plugins/yaml/src/org/jetbrains/yaml/navigation/YAMLQualifiedNameProvider.java index 4bf937b75900..89f4ce2eb843 100644 --- a/plugins/yaml/src/org/jetbrains/yaml/navigation/YAMLQualifiedNameProvider.java +++ b/plugins/yaml/src/org/jetbrains/yaml/navigation/YAMLQualifiedNameProvider.java @@ -18,7 +18,12 @@ public class YAMLQualifiedNameProvider implements QualifiedNameProvider { @Nullable @Override public String getQualifiedName(PsiElement element) { - return element instanceof YAMLPsiElement ? YAMLUtil.getConfigFullName((YAMLPsiElement)element) : null; + if (element instanceof YAMLPsiElement) { + String configFullName = YAMLUtil.getConfigFullName((YAMLPsiElement)element); + if (!configFullName.isEmpty()) + return configFullName; + } + return null; } @Nullable diff --git a/plugins/yaml/testSrc/org/jetbrains/yaml/navigation/YAMLCopyReferenceTest.java b/plugins/yaml/testSrc/org/jetbrains/yaml/navigation/YAMLCopyReferenceTest.java index 5c2a53d1f052..91f527529425 100644 --- a/plugins/yaml/testSrc/org/jetbrains/yaml/navigation/YAMLCopyReferenceTest.java +++ b/plugins/yaml/testSrc/org/jetbrains/yaml/navigation/YAMLCopyReferenceTest.java @@ -2,10 +2,18 @@ package org.jetbrains.yaml.navigation; import com.intellij.ide.actions.CopyReferenceAction; +import com.intellij.openapi.actionSystem.IdeActions; import com.intellij.openapi.application.ex.PathManagerEx; +import com.intellij.openapi.ide.CopyPasteManager; import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiFile; import com.intellij.testFramework.fixtures.LightPlatformCodeInsightFixtureTestCase; -import org.jetbrains.yaml.psi.YAMLKeyValue; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.yaml.psi.YAMLFile; + +import java.awt.datatransfer.DataFlavor; +import java.awt.datatransfer.UnsupportedFlavorException; +import java.io.IOException; public class YAMLCopyReferenceTest extends LightPlatformCodeInsightFixtureTestCase { @Override @@ -25,11 +33,46 @@ public class YAMLCopyReferenceTest extends LightPlatformCodeInsightFixtureTestCa doTest("top.next.several line targetKey"); } + public void testPlainTextValue() { + checkEmptyReference(); + } + + public void testComment() { + checkEmptyReference(); + } + + public void testFileNoReference() { + myFixture.configureByFile("simpleConfig.yml"); + PsiElement element = myFixture.getElementAtCaret(); + PsiFile file = element.getContainingFile(); + assertInstanceOf(file, YAMLFile.class); + String qualifiedName = CopyReferenceAction.elementToFqn(file); + assertEquals("simpleConfig.yml", qualifiedName); + } + + private void checkEmptyReference() { + String reference = configureAndCopyReference(); + int line = myFixture.getEditor().getDocument().getLineNumber(myFixture.getCaretOffset()); + String expected = getTestName(true) + ".yml:" + (line + 1); + assertEquals(expected, reference); + } + private void doTest(String result) { + String reference = configureAndCopyReference(); + assertEquals(result, reference); + } + + @NotNull + private String configureAndCopyReference() { myFixture.configureByFile(getTestName(true) + ".yml"); - final PsiElement element = myFixture.getElementAtCaret(); - assertInstanceOf(element, YAMLKeyValue.class); - final String qualifiedName = CopyReferenceAction.elementToFqn(element); - assertEquals(result, qualifiedName); + myFixture.performEditorAction(IdeActions.ACTION_COPY_REFERENCE); + String reference; + try { + reference = (String)CopyPasteManager.getInstance().getContents().getTransferData(DataFlavor.stringFlavor); + } + catch (UnsupportedFlavorException | IOException e) { + throw new RuntimeException(e); + } + return reference; } } diff --git a/plugins/yaml/testSrc/org/jetbrains/yaml/navigation/data/comment.yml b/plugins/yaml/testSrc/org/jetbrains/yaml/navigation/data/comment.yml new file mode 100644 index 000000000000..2f3544f6af3f --- /dev/null +++ b/plugins/yaml/testSrc/org/jetbrains/yaml/navigation/data/comment.yml @@ -0,0 +1,4 @@ +top: + key: haha + # comment + next: value \ No newline at end of file diff --git a/plugins/yaml/testSrc/org/jetbrains/yaml/navigation/data/plainTextValue.yml b/plugins/yaml/testSrc/org/jetbrains/yaml/navigation/data/plainTextValue.yml new file mode 100644 index 000000000000..067427658147 --- /dev/null +++ b/plugins/yaml/testSrc/org/jetbrains/yaml/navigation/data/plainTextValue.yml @@ -0,0 +1,2 @@ +top: + next: value \ No newline at end of file