WEB-33404 Add an API to suppress JSON widget for particular files

This commit is contained in:
Anton Lobov
2018-06-18 13:59:42 +02:00
parent ae4237f9b6
commit 21cf39958c
3 changed files with 29 additions and 9 deletions
@@ -0,0 +1,17 @@
// Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package com.jetbrains.jsonSchema.extension;
import com.intellij.openapi.extensions.ExtensionPointName;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.vfs.VirtualFile;
import org.jetbrains.annotations.NotNull;
public interface JsonWidgetSuppressor {
ExtensionPointName<JsonWidgetSuppressor> EXTENSION_POINT_NAME = ExtensionPointName.create("Json.Widget.Suppressor");
/**
* Allows to suppress JSON widget for particular files
* This method can access indexes and PSI
*/
boolean suppressSwitcherWidget(@NotNull VirtualFile file, @NotNull Project project);
}
@@ -18,10 +18,7 @@ import com.intellij.openapi.vfs.impl.http.HttpVirtualFile;
import com.intellij.openapi.vfs.impl.http.RemoteFileInfo;
import com.intellij.openapi.wm.StatusBarWidget;
import com.intellij.openapi.wm.impl.status.EditorBasedStatusBarPopup;
import com.jetbrains.jsonSchema.extension.JsonSchemaEnabler;
import com.jetbrains.jsonSchema.extension.JsonSchemaFileProvider;
import com.jetbrains.jsonSchema.extension.JsonSchemaInfo;
import com.jetbrains.jsonSchema.extension.SchemaType;
import com.jetbrains.jsonSchema.extension.*;
import com.jetbrains.jsonSchema.ide.JsonSchemaService;
import com.jetbrains.jsonSchema.impl.JsonSchemaConflictNotificationProvider;
import com.jetbrains.jsonSchema.impl.JsonSchemaServiceImpl;
@@ -82,8 +79,17 @@ class JsonSchemaStatusWidget extends EditorBasedStatusBarPopup {
return WidgetState.HIDDEN;
}
FileType fileType = file.getFileType();
Language language = fileType instanceof LanguageFileType ? ((LanguageFileType)fileType).getLanguage() : null;
boolean isJsonFile = language instanceof JsonLanguage;
if (!hasAccessToSymbols()) {
return WidgetState.getDumbModeState("JSON schema service", "JSON: ");
return WidgetState.getDumbModeState("JSON schema service", isJsonFile ? JSON_SCHEMA_BAR : JSON_SCHEMA_BAR_OTHER_FILES);
}
JsonWidgetSuppressor[] suppressors = JsonWidgetSuppressor.EXTENSION_POINT_NAME.getExtensions();
if (Arrays.stream(suppressors).anyMatch(s -> s.suppressSwitcherWidget(file, myProject))) {
return WidgetState.HIDDEN;
}
Collection<VirtualFile> schemaFiles = myService.getSchemaFilesForFile(file);
@@ -149,10 +155,6 @@ class JsonSchemaStatusWidget extends EditorBasedStatusBarPopup {
return state;
}
FileType fileType = file.getFileType();
Language language = fileType instanceof LanguageFileType ? ((LanguageFileType)fileType).getLanguage() : null;
boolean isJsonFile = language instanceof JsonLanguage;
String tooltip = isJsonFile ? JSON_SCHEMA_TOOLTIP : JSON_SCHEMA_TOOLTIP_OTHER_FILES;
String bar = isJsonFile ? JSON_SCHEMA_BAR : JSON_SCHEMA_BAR_OTHER_FILES;
@@ -110,6 +110,7 @@
<extensionPoint qualifiedName="JavaScript.JsonSchema.ProviderFactory" interface="com.jetbrains.jsonSchema.extension.JsonSchemaProviderFactory"/>
<extensionPoint qualifiedName="Json.Like.Psi.Walker.Factory" interface="com.jetbrains.jsonSchema.extension.JsonLikePsiWalkerFactory"/>
<extensionPoint qualifiedName="Json.Schema.Enabler" interface="com.jetbrains.jsonSchema.extension.JsonSchemaEnabler"/>
<extensionPoint qualifiedName="Json.Widget.Suppressor" interface="com.jetbrains.jsonSchema.extension.JsonWidgetSuppressor"/>
<extensionPoint qualifiedName="com.intellij.json.jsonLiteralChecker" interface="com.intellij.json.codeinsight.JsonLiteralChecker"/>
<extensionPoint qualifiedName="com.intellij.json.catalog.exclusion" interface="com.jetbrains.jsonSchema.remote.JsonSchemaCatalogExclusion"/>
</extensionPoints>