diff --git a/json/src/com/jetbrains/jsonSchema/extension/JsonWidgetSuppressor.java b/json/src/com/jetbrains/jsonSchema/extension/JsonWidgetSuppressor.java new file mode 100644 index 000000000000..e21331f7aee1 --- /dev/null +++ b/json/src/com/jetbrains/jsonSchema/extension/JsonWidgetSuppressor.java @@ -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 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); +} diff --git a/json/src/com/jetbrains/jsonSchema/widget/JsonSchemaStatusWidget.java b/json/src/com/jetbrains/jsonSchema/widget/JsonSchemaStatusWidget.java index 477090170fc3..343d109069a2 100644 --- a/json/src/com/jetbrains/jsonSchema/widget/JsonSchemaStatusWidget.java +++ b/json/src/com/jetbrains/jsonSchema/widget/JsonSchemaStatusWidget.java @@ -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 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; diff --git a/platform/platform-resources/src/META-INF/JsonPlugin.xml b/platform/platform-resources/src/META-INF/JsonPlugin.xml index 15ec3415c901..e0dc004a44e1 100644 --- a/platform/platform-resources/src/META-INF/JsonPlugin.xml +++ b/platform/platform-resources/src/META-INF/JsonPlugin.xml @@ -110,6 +110,7 @@ +