From 46bfcf25ac2226216fdaee53fdce6ff06d88414f Mon Sep 17 00:00:00 2001 From: Anton Lobov Date: Mon, 7 May 2018 18:37:25 +0200 Subject: [PATCH] WEB-32698 JSON Schema selection menu should work for JSON fragm. editor --- .../JsonSchemaMappingsProjectConfiguration.java | 2 +- .../jsonSchema/JsonSchemaPatternComparator.java | 10 ++++++++-- .../jsonSchema/UserDefinedJsonSchemaConfiguration.java | 2 +- .../jsonSchema/widget/JsonSchemaInfoPopupStep.java | 9 +++++++-- 4 files changed, 17 insertions(+), 6 deletions(-) diff --git a/json/src/com/jetbrains/jsonSchema/JsonSchemaMappingsProjectConfiguration.java b/json/src/com/jetbrains/jsonSchema/JsonSchemaMappingsProjectConfiguration.java index 60efb5ca6d9f..42e00ae3e05d 100644 --- a/json/src/com/jetbrains/jsonSchema/JsonSchemaMappingsProjectConfiguration.java +++ b/json/src/com/jetbrains/jsonSchema/JsonSchemaMappingsProjectConfiguration.java @@ -43,7 +43,7 @@ public class JsonSchemaMappingsProjectConfiguration implements PersistentStateCo if (pattern.pattern || pattern.directory) continue; String path = pattern.path.replace('\\', '/'); VirtualFile relativeFile = VfsUtil.findRelativeFile(projectBaseDir, StringUtil.split(path, "/").toArray(ArrayUtil.EMPTY_STRING_ARRAY)); - if (Objects.equals(relativeFile, file)) { + if (Objects.equals(relativeFile, file) || file.getUrl().equals(path)) { return configuration; } } diff --git a/json/src/com/jetbrains/jsonSchema/JsonSchemaPatternComparator.java b/json/src/com/jetbrains/jsonSchema/JsonSchemaPatternComparator.java index 455fcd4074c1..0b0b2869cede 100644 --- a/json/src/com/jetbrains/jsonSchema/JsonSchemaPatternComparator.java +++ b/json/src/com/jetbrains/jsonSchema/JsonSchemaPatternComparator.java @@ -45,8 +45,14 @@ public class JsonSchemaPatternComparator { } private ThreeState comparePaths(UserDefinedJsonSchemaConfiguration.Item left, UserDefinedJsonSchemaConfiguration.Item right) { - final File leftFile = new File(myProject.getBasePath(), left.getPath()); - final File rightFile = new File(myProject.getBasePath(), right.getPath()); + String leftPath = left.getPath(); + String rightPath = right.getPath(); + + if (leftPath.startsWith("mock:///") || rightPath.startsWith("mock:///")) { + return leftPath.equals(rightPath) ? ThreeState.YES : ThreeState.NO; + } + final File leftFile = new File(myProject.getBasePath(), leftPath); + final File rightFile = new File(myProject.getBasePath(), rightPath); if (left.isDirectory()) { if (FileUtil.isAncestor(leftFile, rightFile, true)) return ThreeState.YES; diff --git a/json/src/com/jetbrains/jsonSchema/UserDefinedJsonSchemaConfiguration.java b/json/src/com/jetbrains/jsonSchema/UserDefinedJsonSchemaConfiguration.java index 003ee15262f9..f0d014c54737 100644 --- a/json/src/com/jetbrains/jsonSchema/UserDefinedJsonSchemaConfiguration.java +++ b/json/src/com/jetbrains/jsonSchema/UserDefinedJsonSchemaConfiguration.java @@ -152,7 +152,7 @@ public class UserDefinedJsonSchemaConfiguration { }); } else { - result.add((project, vfile) -> vfile.equals(getRelativeFile(project, patternText))); + result.add((project, vfile) -> vfile.equals(getRelativeFile(project, patternText)) || vfile.getUrl().equals(patternText.path)); } } return result; diff --git a/json/src/com/jetbrains/jsonSchema/widget/JsonSchemaInfoPopupStep.java b/json/src/com/jetbrains/jsonSchema/widget/JsonSchemaInfoPopupStep.java index d2a54a94e71a..51f4eba89d20 100644 --- a/json/src/com/jetbrains/jsonSchema/widget/JsonSchemaInfoPopupStep.java +++ b/json/src/com/jetbrains/jsonSchema/widget/JsonSchemaInfoPopupStep.java @@ -106,8 +106,9 @@ class JsonSchemaInfoPopupStep extends BaseListPopupStep { UserDefinedJsonSchemaConfiguration mappingForFile = mappingsConf.findMappingForFile(myVirtualFile); if (mappingForFile == null) { UserDefinedJsonSchemaConfiguration configuration = configurable.addProjectSchema(); + String relativePath = VfsUtilCore.getRelativePath(myVirtualFile, myProject.getBaseDir()); configuration.patterns.add(new UserDefinedJsonSchemaConfiguration.Item( - VfsUtilCore.getRelativePath(myVirtualFile, myProject.getBaseDir()), false, false)); + relativePath == null ? myVirtualFile.getUrl() : relativePath, false, false)); mappingForFile = configuration; } @@ -128,7 +129,8 @@ class JsonSchemaInfoPopupStep extends BaseListPopupStep { UserDefinedJsonSchemaConfiguration mappingForFile = configuration.findMappingForFile(virtualFile); if (mappingForFile != null) { for (UserDefinedJsonSchemaConfiguration.Item pattern : mappingForFile.patterns) { - if (Objects.equals(VfsUtil.findRelativeFile(projectBaseDir, pattern.path), virtualFile)) { + if (Objects.equals(VfsUtil.findRelativeFile(projectBaseDir, pattern.path), virtualFile) + || virtualFile.getUrl().equals(pattern.path)) { mappingForFile.patterns.remove(pattern); if (mappingForFile.patterns.size() == 0) { configuration.removeConfiguration(mappingForFile); @@ -144,6 +146,9 @@ class JsonSchemaInfoPopupStep extends BaseListPopupStep { if (selectedValue == null) return; String path = VfsUtilCore.getRelativePath(virtualFile, projectBaseDir); + if (path == null) { + path = virtualFile.getUrl(); + } UserDefinedJsonSchemaConfiguration existing = configuration.findMappingBySchemaInfo(selectedValue); UserDefinedJsonSchemaConfiguration.Item item = new UserDefinedJsonSchemaConfiguration.Item(path, false, false);