From b6f61aa16c63efb79cf00f25158bab82b76638ed Mon Sep 17 00:00:00 2001 From: irengrig Date: Wed, 8 Feb 2017 11:47:20 +0100 Subject: [PATCH] WEB-25360 package.json dependencies & devDependencies issues related to json schema-based support --- .../JsonSchemaInsideSchemaResolver.java | 2 +- .../jsonSchema/impl/JsonSchemaWalker.java | 41 +++++++++++++------ 2 files changed, 29 insertions(+), 14 deletions(-) diff --git a/json/src/com/jetbrains/jsonSchema/extension/schema/JsonSchemaInsideSchemaResolver.java b/json/src/com/jetbrains/jsonSchema/extension/schema/JsonSchemaInsideSchemaResolver.java index eba9f84fc17d..393e4674979c 100644 --- a/json/src/com/jetbrains/jsonSchema/extension/schema/JsonSchemaInsideSchemaResolver.java +++ b/json/src/com/jetbrains/jsonSchema/extension/schema/JsonSchemaInsideSchemaResolver.java @@ -61,7 +61,7 @@ public class JsonSchemaInsideSchemaResolver { if (jsonObject.getParent() instanceof JsonProperty) ref.set(((JsonProperty)jsonObject.getParent()).getNameElement()); else ref.set(jsonObject); } - }, mySchemaFile, object, true, mySteps); + }, mySchemaFile, object, true, mySteps, false); return true; }); return ref.get(); diff --git a/json/src/com/jetbrains/jsonSchema/impl/JsonSchemaWalker.java b/json/src/com/jetbrains/jsonSchema/impl/JsonSchemaWalker.java index 87b9db1dcbff..59f6c3385788 100644 --- a/json/src/com/jetbrains/jsonSchema/impl/JsonSchemaWalker.java +++ b/json/src/com/jetbrains/jsonSchema/impl/JsonSchemaWalker.java @@ -62,11 +62,13 @@ public class JsonSchemaWalker { if (JsonSchemaFileType.INSTANCE.equals(element.getContainingFile().getFileType()) && position.get(0).getTransition() instanceof PropertyTransition && "definitions".equals(((PropertyTransition)position.get(0).getTransition()).getName())) return; - extractSchemaVariants(element.getProject(), consumer, schemaFile, rootSchema, false, position); + extractSchemaVariants(element.getProject(), consumer, schemaFile, rootSchema, false, position, true); } - public static void findSchemasForCompletion(@NotNull final PsiElement element, @NotNull final CompletionSchemesConsumer consumer, - @NotNull final JsonSchemaObject rootSchema, @NotNull VirtualFile schemaFile) { + public static void findSchemasForCompletion(@NotNull final PsiElement element, + @NotNull final CompletionSchemesConsumer consumer, + @NotNull final JsonSchemaObject rootSchema, + @NotNull VirtualFile schemaFile) { final PsiElement checkable = goUpToCheckable(element); if (checkable == null) return; final boolean isName = isName(checkable); @@ -76,7 +78,7 @@ public class JsonSchemaWalker { return; } - extractSchemaVariants(element.getProject(), consumer, schemaFile, rootSchema, isName, position); + extractSchemaVariants(element.getProject(), consumer, schemaFile, rootSchema, isName, position, false); } public static Pair, String> buildSteps(@NotNull String nameInSchema) { @@ -122,9 +124,13 @@ public class JsonSchemaWalker { } } - public static void extractSchemaVariants(@NotNull final Project project, @NotNull final CompletionSchemesConsumer consumer, + public static void extractSchemaVariants(@NotNull final Project project, + @NotNull final CompletionSchemesConsumer consumer, @NotNull VirtualFile rootSchemaFile, - @NotNull JsonSchemaObject rootSchema, boolean isName, List position) { + @NotNull JsonSchemaObject rootSchema, + boolean isName, + List position, + boolean acceptAdditionalPropertiesSchemas) { final Set>> control = new HashSet<>(); final JsonSchemaServiceEx serviceEx = JsonSchemaServiceEx.Impl.getEx(project); final ArrayDeque>> queue = new ArrayDeque<>(); @@ -141,7 +147,7 @@ public class JsonSchemaWalker { continue; } final DefinitionsResolver definitionsResolver = new DefinitionsResolver(path); - extractSchemaVariants(definitionsResolver, object, path); + extractSchemaVariants(definitionsResolver, object, path, acceptAdditionalPropertiesSchemas); if (definitionsResolver.isFound()) { final List list = gatherSchemas(definitionsResolver.getSchemaObject()); @@ -182,7 +188,10 @@ public class JsonSchemaWalker { }); } - private static void extractSchemaVariants(@NotNull DefinitionsResolver consumer, @NotNull JsonSchemaObject rootSchema, @NotNull List position) { + private static void extractSchemaVariants(@NotNull DefinitionsResolver consumer, + @NotNull JsonSchemaObject rootSchema, + @NotNull List position, + boolean acceptAdditionalPropertiesSchemas) { final ArrayDeque> queue = new ArrayDeque<>(); queue.add(Pair.create(rootSchema, 0)); while (!queue.isEmpty()) { @@ -218,7 +227,7 @@ public class JsonSchemaWalker { TransitionResultConsumer transitionResultConsumer = new TransitionResultConsumer(); for (JsonSchemaObject object : list) { if (schema.getAllOf() == null) transitionResultConsumer = new TransitionResultConsumer(); - step.getTransition().step(object, transitionResultConsumer); + step.getTransition().step(object, transitionResultConsumer, acceptAdditionalPropertiesSchemas); if (transitionResultConsumer.isNothing()) continue; if (transitionResultConsumer.getSchema() != null) { reporter.consume(transitionResultConsumer.getSchema()); @@ -357,7 +366,9 @@ public class JsonSchemaWalker { } @Override - public void step(@NotNull JsonSchemaObject parent, @NotNull TransitionResultConsumer resultConsumer) { + public void step(@NotNull JsonSchemaObject parent, + @NotNull TransitionResultConsumer resultConsumer, + boolean acceptAdditionalPropertiesSchemas) { if ("definitions".equals(myName)) { if (parent.getDefinitions() != null) { final SmartPsiElementPointer pointer = parent.getDefinitionsPointer(); @@ -377,7 +388,9 @@ public class JsonSchemaWalker { return; } if (parent.getAdditionalPropertiesSchema() != null) { - resultConsumer.setSchema(parent.getAdditionalPropertiesSchema()); + if (acceptAdditionalPropertiesSchemas) { + resultConsumer.setSchema(parent.getAdditionalPropertiesSchema()); + } } else { if (!Boolean.FALSE.equals(parent.getAdditionalPropertiesAllowed())) { resultConsumer.anything(); @@ -407,7 +420,9 @@ public class JsonSchemaWalker { } @Override - public void step(@NotNull JsonSchemaObject parent, @NotNull TransitionResultConsumer resultConsumer) { + public void step(@NotNull JsonSchemaObject parent, + @NotNull TransitionResultConsumer resultConsumer, + boolean acceptAdditionalPropertiesSchemas) { if (parent.getItemsSchema() != null) { resultConsumer.setSchema(parent.getItemsSchema()); } else if (parent.getItemsSchemaList() != null) { @@ -427,7 +442,7 @@ public class JsonSchemaWalker { private interface Transition { boolean possibleFromState(@NotNull StateType stateType); - void step(@NotNull JsonSchemaObject parent, @NotNull TransitionResultConsumer resultConsumer); + void step(@NotNull JsonSchemaObject parent, @NotNull TransitionResultConsumer resultConsumer, boolean acceptAdditionalPropertiesSchemas); } public enum StateType {