mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
json schema widget: show json schema popup on click (WEB-55244)
(cherry picked from commit 28be1e7cc7f67a4283ebc4fa741cc3b1319a5f72) IJ-CR-22521 GitOrigin-RevId: 89ac473476958ee4afc4c464d32d2ea6b0e2fe50
This commit is contained in:
committed by
intellij-monorepo-bot
parent
cd217d438e
commit
2f287c8a52
@@ -65,8 +65,7 @@ class JsonSchemaStatusWidget extends EditorBasedStatusBarPopup {
|
||||
|
||||
private final AtomicReference<Pair<VirtualFile, Boolean>> mySuppressInfoRef = new AtomicReference<>();
|
||||
|
||||
private volatile VirtualFile myLastUpdatedFile;
|
||||
private volatile WidgetState mySchemaWidgetState;
|
||||
private volatile Pair<WidgetState, VirtualFile> myLastWidgetStateAndFilePair;
|
||||
private ProgressIndicator myCurrentProgress;
|
||||
|
||||
JsonSchemaStatusWidget(@NotNull Project project) {
|
||||
@@ -198,14 +197,18 @@ class JsonSchemaStatusWidget extends EditorBasedStatusBarPopup {
|
||||
return WidgetStatus.ENABLED;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
protected WidgetState getWidgetState(@Nullable VirtualFile file) {
|
||||
protected @NotNull WidgetState getWidgetState(@Nullable VirtualFile file) {
|
||||
Pair<WidgetState, VirtualFile> lastStateAndFilePair = myLastWidgetStateAndFilePair;
|
||||
WidgetState widgetState = calcWidgetState(file, Pair.getFirst(lastStateAndFilePair), Pair.getSecond(lastStateAndFilePair));
|
||||
myLastWidgetStateAndFilePair = new Pair<>(widgetState, file);
|
||||
return widgetState;
|
||||
}
|
||||
|
||||
private @NotNull WidgetState calcWidgetState(@Nullable VirtualFile file,
|
||||
@Nullable WidgetState lastWidgetState,
|
||||
@Nullable VirtualFile lastFile) {
|
||||
Pair<VirtualFile, Boolean> suppressInfo = mySuppressInfoRef.getAndSet(null);
|
||||
WidgetState schemaWidgetState = mySchemaWidgetState;
|
||||
mySchemaWidgetState = null;
|
||||
VirtualFile lastUpdatedFile = myLastUpdatedFile;
|
||||
myLastUpdatedFile = file;
|
||||
if (myCurrentProgress != null && !myCurrentProgress.isCanceled()) {
|
||||
myCurrentProgress.cancel();
|
||||
}
|
||||
@@ -232,7 +235,7 @@ class JsonSchemaStatusWidget extends EditorBasedStatusBarPopup {
|
||||
scheduleSuppressCheck(file, myCurrentProgress);
|
||||
|
||||
// show 'loading' only when switching between files and previous state was not hidden, otherwise the widget will "jump"
|
||||
if (!Comparing.equal(lastUpdatedFile, file) && schemaWidgetState != null && schemaWidgetState != WidgetState.HIDDEN) {
|
||||
if (!Comparing.equal(lastFile, file) && lastWidgetState != null && lastWidgetState != WidgetState.HIDDEN) {
|
||||
return new WidgetState(JsonBundle.message("schema.widget.checking.state.tooltip"),
|
||||
JsonBundle.message("schema.widget.checking.state.text",
|
||||
isJsonFile ? JsonBundle.message("schema.widget.prefix.json.files")
|
||||
@@ -248,12 +251,10 @@ class JsonSchemaStatusWidget extends EditorBasedStatusBarPopup {
|
||||
}
|
||||
}
|
||||
|
||||
WidgetState state = doGetWidgetState(file, isJsonFile);
|
||||
mySchemaWidgetState = state;
|
||||
return state;
|
||||
return doGetWidgetState(file, isJsonFile);
|
||||
}
|
||||
|
||||
private WidgetState doGetWidgetState(@NotNull VirtualFile file, boolean isJsonFile) {
|
||||
private @NotNull WidgetState doGetWidgetState(@NotNull VirtualFile file, boolean isJsonFile) {
|
||||
JsonSchemaService service = getService();
|
||||
if (service == null) {
|
||||
return getNoSchemaState();
|
||||
@@ -463,17 +464,19 @@ class JsonSchemaStatusWidget extends EditorBasedStatusBarPopup {
|
||||
@Nullable
|
||||
@Override
|
||||
protected ListPopup createPopup(DataContext context) {
|
||||
final VirtualFile virtualFile = CommonDataKeys.VIRTUAL_FILE.getData(context);
|
||||
if (virtualFile == null) return null;
|
||||
VirtualFile file = CommonDataKeys.VIRTUAL_FILE.getData(context);
|
||||
if (file == null) return null;
|
||||
|
||||
Project project = getProject();
|
||||
WidgetState popupState = mySchemaWidgetState;
|
||||
if (!(popupState instanceof MyWidgetState) || !virtualFile.equals(myLastUpdatedFile)) return null;
|
||||
|
||||
JsonSchemaService service = getService();
|
||||
if (service == null) return null;
|
||||
|
||||
return JsonSchemaStatusPopup.createPopup(service, project, virtualFile, ((MyWidgetState)popupState).isWarning());
|
||||
Pair<WidgetState, VirtualFile> lastWidgetStateAndFilePair = myLastWidgetStateAndFilePair;
|
||||
WidgetState lastWidgetState = Pair.getFirst(lastWidgetStateAndFilePair);
|
||||
if (lastWidgetState instanceof MyWidgetState && file.equals(Pair.getSecond(lastWidgetStateAndFilePair))) {
|
||||
JsonSchemaService service = getService();
|
||||
if (service != null) {
|
||||
return JsonSchemaStatusPopup.createPopup(service, project, file, ((MyWidgetState)lastWidgetState).isWarning());
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user