Java tutorial
/* * Copyright 2016 The Bazel Authors. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.google.idea.blaze.base.scope.scopes; import com.google.idea.blaze.base.scope.BlazeContext; import com.google.idea.blaze.base.scope.BlazeScope; import com.google.idea.blaze.base.settings.Blaze; import com.intellij.openapi.project.Project; import com.intellij.openapi.project.ProjectManager; import com.intellij.openapi.project.ProjectManagerListener; import com.intellij.openapi.ui.Messages; import org.jetbrains.annotations.NotNull; /** Prevents the user from closing the project while the scope is open. */ public class ProjectCloseScope implements ProjectManagerListener, BlazeScope { @NotNull private final Project project; private boolean isApplicationExitingOrProjectClosing; public ProjectCloseScope(@NotNull Project project) { this.project = project; } @Override public void onScopeBegin(@NotNull BlazeContext context) { ProjectManager projectManager = ProjectManager.getInstance(); projectManager.addProjectManagerListener(project, this); } @Override public void onScopeEnd(@NotNull BlazeContext context) { ProjectManager projectManager = ProjectManager.getInstance(); projectManager.removeProjectManagerListener(project, this); } @Override public void projectOpened(Project project) { } @Override public boolean canCloseProject(Project project) { if (!project.equals(this.project)) { return true; } if (shouldPromptUser()) { askUserToWait(); return false; } return false; } @Override public void projectClosed(Project project) { } @Override public void projectClosing(Project project) { if (project.equals(this.project)) { isApplicationExitingOrProjectClosing = true; } } private boolean shouldPromptUser() { return !isApplicationExitingOrProjectClosing; } private void askUserToWait() { String buildSystem = Blaze.buildSystemName(project); Messages.showMessageDialog(project, String.format("Please wait until %s command execution finishes", buildSystem), buildSystem + " Running", null); } }