diff --git a/json/src/com/intellij/json/psi/JsonPsiUtil.java b/json/src/com/intellij/json/psi/JsonPsiUtil.java index a28dbbf84a93..78cf5b34de75 100644 --- a/json/src/com/intellij/json/psi/JsonPsiUtil.java +++ b/json/src/com/intellij/json/psi/JsonPsiUtil.java @@ -7,10 +7,14 @@ import com.intellij.psi.PsiElement; import com.intellij.psi.TokenType; import com.intellij.psi.tree.IElementType; import com.intellij.psi.tree.TokenSet; +import com.intellij.util.ObjectUtils; import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; +import java.util.Collections; import java.util.List; +import java.util.Set; import static com.intellij.json.JsonParserDefinition.JSON_COMMENTARIES; @@ -210,4 +214,18 @@ public class JsonPsiUtil { } return addedProperty; } + + @NotNull + public static Set getOtherSiblingPropertyNames(@Nullable JsonProperty property) { + if (property == null) return Collections.emptySet(); + JsonObject object = ObjectUtils.tryCast(property.getParent(), JsonObject.class); + if (object == null) return Collections.emptySet(); + Set result = ContainerUtil.newHashSet(); + for (JsonProperty jsonProperty : object.getPropertyList()) { + if (jsonProperty != property) { + result.add(jsonProperty.getName()); + } + } + return result; + } } diff --git a/json/src/com/jetbrains/jsonSchema/impl/JsonBySchemaObjectCompletionContributor.java b/json/src/com/jetbrains/jsonSchema/impl/JsonBySchemaObjectCompletionContributor.java index e3642c64390a..f8397da2a90d 100644 --- a/json/src/com/jetbrains/jsonSchema/impl/JsonBySchemaObjectCompletionContributor.java +++ b/json/src/com/jetbrains/jsonSchema/impl/JsonBySchemaObjectCompletionContributor.java @@ -6,8 +6,8 @@ import com.intellij.codeInsight.lookup.LookupElement; import com.intellij.codeInsight.lookup.LookupElementBuilder; import com.intellij.ide.DataManager; import com.intellij.internal.statistic.UsageTrigger; -import com.intellij.json.psi.JsonObject; import com.intellij.json.psi.JsonProperty; +import com.intellij.json.psi.JsonPsiUtil; import com.intellij.json.psi.JsonStringLiteral; import com.intellij.openapi.actionSystem.IdeActions; import com.intellij.openapi.application.ApplicationManager; @@ -30,7 +30,6 @@ import org.jetbrains.annotations.Nullable; import java.util.ArrayList; import java.util.Collection; -import java.util.HashSet; import java.util.List; /** @@ -100,7 +99,7 @@ class JsonBySchemaObjectCompletionContributor extends CompletionContributor { final JsonProperty parent = possibleParent instanceof JsonProperty ? (JsonProperty)possibleParent : null; final boolean hasValue = hasValuePart(parent); - final Collection properties = getExistingProperties(parent); + final Collection properties = JsonPsiUtil.getOtherSiblingPropertyNames(parent); JsonSchemaPropertyProcessor.process(new JsonSchemaPropertyProcessor.PropertyProcessor() { @Override @@ -124,23 +123,6 @@ class JsonBySchemaObjectCompletionContributor extends CompletionContributor { } } - public Collection getExistingProperties(@Nullable JsonProperty property) { - if (property == null) return ContainerUtil.emptyList(); - - PsiElement parent = property.getParent(); - if (!(parent instanceof JsonObject)) return ContainerUtil.emptyList(); - - JsonObject object = (JsonObject)parent; - HashSet result = ContainerUtil.newHashSet(); - for (JsonProperty jsonProperty : object.getPropertyList()) { - if (jsonProperty == property) continue; - - result.add(jsonProperty.getName()); - } - - return result; - } - public boolean hasValuePart(@Nullable JsonProperty property) { return property != null && property.getValue() != null; } diff --git a/json/tests/test/com/intellij/json/JsonPsiUtilTest.java b/json/tests/test/com/intellij/json/JsonPsiUtilTest.java index cd93a892103e..b28d77bede30 100644 --- a/json/tests/test/com/intellij/json/JsonPsiUtilTest.java +++ b/json/tests/test/com/intellij/json/JsonPsiUtilTest.java @@ -17,6 +17,7 @@ package com.intellij.json; import com.intellij.json.psi.JsonElementGenerator; import com.intellij.json.psi.JsonObject; +import com.intellij.json.psi.JsonProperty; import com.intellij.json.psi.JsonPsiUtil; import com.intellij.openapi.command.WriteCommandAction; import com.intellij.psi.PsiElement; @@ -24,6 +25,8 @@ import com.intellij.psi.codeStyle.CommonCodeStyleSettings; import com.intellij.psi.util.PsiTreeUtil; import org.jetbrains.annotations.NotNull; +import java.util.Collections; + /** * @author Mikhail Golubev */ @@ -55,4 +58,12 @@ public class JsonPsiUtilTest extends JsonTestCase { }); myFixture.checkResult(after); } + + public void testGetOtherSiblingPropertyNames() throws Exception { + myFixture.configureByText(JsonFileType.INSTANCE, "{\"first\" : 1, \"second\" : 2}"); + PsiElement atCaret = myFixture.getFile().findElementAt(myFixture.getCaretOffset()); + JsonProperty property = PsiTreeUtil.getParentOfType(atCaret, JsonProperty.class); + assertNotNull(property); + assertEquals(Collections.singleton("second"), JsonPsiUtil.getOtherSiblingPropertyNames(property)); + } }