| /* |
| * 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.settings; |
| |
| import com.google.idea.blaze.base.bazel.BuildSystemProvider; |
| import com.intellij.ide.DataManager; |
| import com.intellij.openapi.project.Project; |
| import com.intellij.openapi.project.ProjectManager; |
| import javax.annotation.Nullable; |
| import javax.swing.SwingUtilities; |
| |
| /** Blaze project utilities. */ |
| public class Blaze { |
| |
| /** Build system enum */ |
| public enum BuildSystem { |
| Blaze, |
| Bazel; |
| |
| /** The build system name, capitalized. */ |
| public String getName() { |
| return name(); |
| } |
| |
| /** The build system name, capitalized. */ |
| public String getLowerCaseName() { |
| return name().toLowerCase(); |
| } |
| } |
| |
| private Blaze() {} |
| |
| public static boolean isBlazeProjectOpen() { |
| for (Project project : ProjectManager.getInstance().getOpenProjects()) { |
| if (isBlazeProject(project)) { |
| return true; |
| } |
| } |
| return false; |
| } |
| |
| /** Returns whether this project was imported from blaze. */ |
| public static boolean isBlazeProject(Project project) { |
| return BlazeImportSettingsManager.getInstance(project).getImportSettings() != null; |
| } |
| |
| /** |
| * Returns the build system associated with this project, or falls back to the default blaze build |
| * system if the project is null or not a blaze project. |
| */ |
| public static BuildSystem getBuildSystem(@Nullable Project project) { |
| BlazeImportSettings importSettings = |
| project == null |
| ? null |
| : BlazeImportSettingsManager.getInstance(project).getImportSettings(); |
| if (importSettings == null) { |
| return BuildSystemProvider.defaultBuildSystem().buildSystem(); |
| } |
| return importSettings.getBuildSystem(); |
| } |
| |
| /** |
| * Returns the build system provider associated with this project, or falls back to the default |
| * blaze build system if the project is null or not a blaze project. |
| */ |
| public static BuildSystemProvider getBuildSystemProvider(@Nullable Project project) { |
| BuildSystemProvider provider = |
| BuildSystemProvider.getBuildSystemProvider(getBuildSystem(project)); |
| return provider != null ? provider : BuildSystemProvider.defaultBuildSystem(); |
| } |
| |
| /** |
| * The name of the build system associated with the given project, or falls back to the default |
| * blaze build system if the project is null or not a blaze project. |
| */ |
| public static String buildSystemName(@Nullable Project project) { |
| return getBuildSystem(project).getName(); |
| } |
| |
| /** The default build system */ |
| public static BuildSystem defaultBuildSystem() { |
| return BuildSystemProvider.defaultBuildSystem().buildSystem(); |
| } |
| |
| /** |
| * The name of the application-wide build system default. This should only be used in situations |
| * where it doesn't make sense to use the build system associated with the current project (e.g. |
| * the import project action). |
| */ |
| public static String defaultBuildSystemName() { |
| return BuildSystemProvider.defaultBuildSystem().buildSystem().getName(); |
| } |
| |
| /** |
| * Tries to guess the current project, and uses that to determine the build system name.<br> |
| * Should only be used in situations where the current project is not accessible. |
| */ |
| public static String guessBuildSystemName() { |
| Project project = guessCurrentProject(); |
| return buildSystemName(project); |
| } |
| |
| private static Project guessCurrentProject() { |
| Project[] openProjects = ProjectManager.getInstance().getOpenProjects(); |
| if (openProjects.length == 1) { |
| return openProjects[0]; |
| } |
| if (SwingUtilities.isEventDispatchThread()) { |
| return (Project) DataManager.getInstance().getDataContext().getData("project"); |
| } |
| return null; |
| } |
| } |