From 13b022cdabe296e49987e481a88d7331405b1e28 Mon Sep 17 00:00:00 2001 From: irengrig Date: Mon, 16 Jan 2017 17:13:43 +0100 Subject: [PATCH] json schema, fix special case of finding "definitions" in schema of schema to validate themselves -> skip validation by now, have test for that --- .../jsonSchema/impl/JsonSchemaWalker.java | 7 ++- .../jsonSchema/impl/JsonSchemaReadTest.java | 45 +++++++++++++++++++ 2 files changed, 51 insertions(+), 1 deletion(-) diff --git a/json/src/com/jetbrains/jsonSchema/impl/JsonSchemaWalker.java b/json/src/com/jetbrains/jsonSchema/impl/JsonSchemaWalker.java index b0f37226ce45..1b70ac9cb687 100644 --- a/json/src/com/jetbrains/jsonSchema/impl/JsonSchemaWalker.java +++ b/json/src/com/jetbrains/jsonSchema/impl/JsonSchemaWalker.java @@ -16,6 +16,7 @@ import com.intellij.psi.SmartPsiElementPointer; import com.intellij.psi.util.PsiTreeUtil; import com.intellij.util.Consumer; import com.intellij.util.containers.ContainerUtil; +import com.jetbrains.jsonSchema.JsonSchemaFileType; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -57,7 +58,10 @@ public class JsonSchemaWalker { @NotNull final JsonSchemaObject rootSchema, @NotNull VirtualFile schemaFile) { final List position = findPosition(element, false, true); if (position == null || position.isEmpty()) return; - + // but this does not validate definitions section against general schema --> should be done separately + 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); } @@ -360,6 +364,7 @@ public class JsonSchemaWalker { final JsonSchemaObject object = new JsonSchemaObject(pointer); object.setProperties(parent.getDefinitions()); resultConsumer.setSchema(object); + return; } } final JsonSchemaObject child = parent.getProperties().get(myName); diff --git a/json/tests/test/com/jetbrains/jsonSchema/impl/JsonSchemaReadTest.java b/json/tests/test/com/jetbrains/jsonSchema/impl/JsonSchemaReadTest.java index 93ddc019e0cb..f4e22c406f27 100644 --- a/json/tests/test/com/jetbrains/jsonSchema/impl/JsonSchemaReadTest.java +++ b/json/tests/test/com/jetbrains/jsonSchema/impl/JsonSchemaReadTest.java @@ -1,18 +1,29 @@ package com.jetbrains.jsonSchema.impl; import com.intellij.codeInsight.completion.CompletionTestCase; +import com.intellij.codeInsight.daemon.impl.HighlightInfo; +import com.intellij.json.JsonLanguage; +import com.intellij.lang.LanguageAnnotators; +import com.intellij.lang.annotation.Annotator; +import com.intellij.lang.annotation.HighlightSeverity; +import com.intellij.openapi.Disposable; import com.intellij.openapi.application.ApplicationManager; +import com.intellij.openapi.util.Disposer; import com.intellij.openapi.util.ThrowableComputable; import com.intellij.openapi.vfs.LocalFileSystem; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.testFramework.PlatformTestUtil; import com.intellij.util.concurrency.Semaphore; +import com.jetbrains.jsonSchema.JsonSchemaFileType; +import com.jetbrains.jsonSchema.JsonSchemaTestServiceImpl; +import com.jetbrains.jsonSchema.ide.JsonSchemaAnnotator; import org.junit.Assert; import java.io.File; import java.io.IOException; import java.util.List; import java.util.Map; +import java.util.Set; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicReference; @@ -21,6 +32,11 @@ import java.util.concurrent.atomic.AtomicReference; * @author Irina.Chernushina on 8/29/2015. */ public class JsonSchemaReadTest extends CompletionTestCase { + @Override + protected String getTestDataPath() { + return PlatformTestUtil.getCommunityPath() + "/json/tests/testData/jsonSchema"; + } + public void testReadSchemaItself() throws Exception { final File file = new File(PlatformTestUtil.getCommunityPath(), "json/tests/testData/jsonSchema/schema.json"); final JsonSchemaObject read = getSchemaObject(file); @@ -58,6 +74,35 @@ public class JsonSchemaReadTest extends CompletionTestCase { Assert.assertEquals(0, minValue.intValue()); } + public void testMainSchemaHighlighting() throws Exception { + final Set files = JsonSchemaServiceEx.Impl.getEx(myProject).getSchemaFiles(); + VirtualFile mainSchema = null; + for (VirtualFile file : files) { + if ("schema.json".equals(file.getName())) { + mainSchema = file; + break; + } + } + assertNotNull(mainSchema); + assertTrue(JsonSchemaFileType.INSTANCE.equals(mainSchema.getFileType())); + + final Annotator annotator = new JsonSchemaAnnotator(); + LanguageAnnotators.INSTANCE.addExplicitExtension(JsonLanguage.INSTANCE, annotator); + Disposer.register(getTestRootDisposable(), new Disposable() { + @Override + public void dispose() { + LanguageAnnotators.INSTANCE.removeExplicitExtension(JsonLanguage.INSTANCE, annotator); + JsonSchemaTestServiceImpl.setProvider(null); + } + }); + + configureByExistingFile(mainSchema); + final List infos = doHighlighting(); + for (HighlightInfo info : infos) { + if (!HighlightSeverity.INFORMATION.equals(info.getSeverity())) assertFalse(info.getDescription(), true); + } + } + private JsonSchemaObject getSchemaObject(File file) throws IOException { Assert.assertTrue(file.exists()); final VirtualFile virtualFile = LocalFileSystem.getInstance().refreshAndFindFileByIoFile(file);