mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
json: extract JsonPsiUtil.getOtherSiblingPropertyNames
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
+2
-20
@@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user