json: extract JsonPsiUtil.getOtherSiblingPropertyNames

This commit is contained in:
Sergey Simonchik
2016-12-28 16:10:35 +03:00
parent e983d60050
commit ab08c979a5
3 changed files with 31 additions and 20 deletions
@@ -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<String> 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<String> result = ContainerUtil.newHashSet();
for (JsonProperty jsonProperty : object.getPropertyList()) {
if (jsonProperty != property) {
result.add(jsonProperty.getName());
}
}
return result;
}
}
@@ -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<String> properties = getExistingProperties(parent);
final Collection<String> properties = JsonPsiUtil.getOtherSiblingPropertyNames(parent);
JsonSchemaPropertyProcessor.process(new JsonSchemaPropertyProcessor.PropertyProcessor() {
@Override
@@ -124,23 +123,6 @@ class JsonBySchemaObjectCompletionContributor extends CompletionContributor {
}
}
public Collection<String> 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<String> 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;
}
@@ -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, "{\"firs<caret>t\" : 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));
}
}