Skip to content

Commit

Permalink
changes for 243
Browse files Browse the repository at this point in the history
  • Loading branch information
LeFrosch committed Oct 7, 2024
1 parent c5a1948 commit 47e199f
Show file tree
Hide file tree
Showing 3 changed files with 140 additions and 161 deletions.
2 changes: 1 addition & 1 deletion clwb/sdkcompat/v242/BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,6 @@

filegroup(
name = "v242",
srcs = glob(["**/*.java"]),
srcs = glob(["**/*.java", "**/*.kt"]),
visibility = ["//clwb/sdkcompat:__pkg__"],
)
Original file line number Diff line number Diff line change
Expand Up @@ -13,141 +13,112 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.google.idea.blaze.clwb;

import com.google.idea.blaze.base.lang.buildfile.language.BuildFileType;
import com.google.idea.blaze.base.settings.Blaze;
import com.google.idea.blaze.base.wizard2.BazelImportCurrentProjectAction;
import com.google.idea.blaze.base.wizard2.BazelNotificationProvider;
import com.intellij.openapi.actionSystem.AnAction;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.actionSystem.DataContext;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.ui.EditorNotificationProvider;
import com.jetbrains.cidr.lang.daemon.OCFileScopeProvider;
import com.jetbrains.cidr.project.ui.ProjectStatusHelperKt;
import com.jetbrains.cidr.project.ui.notifications.EditorNotificationWarningProvider;
import com.jetbrains.cidr.project.ui.notifications.ProjectNotification;
import com.jetbrains.cidr.project.ui.popup.ProjectFixesProvider;
import com.jetbrains.cidr.project.ui.widget.*;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

import java.util.List;

import static com.jetbrains.cidr.project.ui.ProjectStatusHelperKt.isProjectAwareFile;

// #api241
public class CLionNotificationProvider implements ProjectFixesProvider, WidgetStatusProvider,
EditorNotificationWarningProvider {

private static Boolean registered = false;

private static void unregisterGenericProvider(Project project) {
final var extensionPoint = EditorNotificationProvider.EP_NAME.getPoint(project);

// Note: We need to remove the default style of showing project status and fixes used in
// Android Studio and IDEA to introduce CLion's PSW style.
for (final var extension : extensionPoint.getExtensions()) {
if (extension instanceof BazelNotificationProvider) {
extensionPoint.unregisterExtension(extension);
}
package com.google.idea.blaze.clwb

import com.google.idea.blaze.base.lang.buildfile.language.BuildFileType
import com.google.idea.blaze.base.settings.Blaze
import com.google.idea.blaze.base.wizard2.BazelImportCurrentProjectAction
import com.google.idea.blaze.base.wizard2.BazelNotificationProvider
import com.intellij.openapi.actionSystem.AnAction
import com.intellij.openapi.actionSystem.AnActionEvent
import com.intellij.openapi.actionSystem.DataContext
import com.intellij.openapi.project.Project
import com.intellij.openapi.vfs.VirtualFile
import com.intellij.ui.EditorNotificationProvider
import com.jetbrains.cidr.lang.daemon.OCFileScopeProvider.Companion.getProjectSourceLocationKind
import com.jetbrains.cidr.project.ui.convertStatus
import com.jetbrains.cidr.project.ui.isProjectAwareFile
import com.jetbrains.cidr.project.ui.notifications.EditorNotificationWarningProvider
import com.jetbrains.cidr.project.ui.notifications.ProjectNotification
import com.jetbrains.cidr.project.ui.popup.ProjectFixesProvider
import com.jetbrains.cidr.project.ui.widget.*

private var providerRegistered: Boolean = false

private fun unregisterGenericProvider(project: Project) {
val extensionPoint = EditorNotificationProvider.EP_NAME.getPoint(project)

// Note: We need to remove the default style of showing project status and fixes used in
// Android Studio and IDEA to introduce CLion's PSW style.
for (extension in extensionPoint.extensions) {
if (extension is BazelNotificationProvider) {
extensionPoint.unregisterExtension(extension)
}
}
}

private static void registerSpecificProvider() {
final var projectFixes = ProjectFixesProvider.Companion.getEP_NAME().getPoint();
projectFixes.registerExtension(new CLionNotificationProvider());
private fun registerSpecificProvider() {
val projectFixes = ProjectFixesProvider.Companion.EP_NAME.point
projectFixes.registerExtension(CLionNotificationProvider())

final var projectNotifications = EditorNotificationWarningProvider.Companion.getEP_NAME().getPoint();
projectNotifications.registerExtension(new CLionNotificationProvider());
val projectNotifications = EditorNotificationWarningProvider.EP_NAME.point
projectNotifications.registerExtension(CLionNotificationProvider())

final var widgetStatus = WidgetStatusProvider.Companion.getEP_NAME().getPoint();
widgetStatus.registerExtension(new CLionNotificationProvider());
}

public static void register(Project project) {
unregisterGenericProvider(project);
val widgetStatus = WidgetStatusProvider.EP_NAME.point
widgetStatus.registerExtension(CLionNotificationProvider())
}

if (!registered) {
registerSpecificProvider();
}
registered = true;
private fun isBazelAwareFile(project: Project, file: VirtualFile): Boolean {
if (Blaze.isBlazeProject(project)) {
return false
}

private static Boolean isBazelAwareFile(Project project, VirtualFile file) {
if (Blaze.isBlazeProject(project)) {
return false;
}
if (!isProjectAwareFile(file, project) && file.fileType !== BuildFileType.INSTANCE) {
return false
}

if (!isProjectAwareFile(file, project) && file.getFileType() != BuildFileType.INSTANCE) {
return false;
}
if (getProjectSourceLocationKind(project, file).isInProject()) {
return false
}

if (OCFileScopeProvider.Companion.getProjectSourceLocationKind(project, file).isInProject()) {
return false;
}
if (!BazelImportCurrentProjectAction.projectCouldBeImported(project)) {
return false
}

if (!BazelImportCurrentProjectAction.projectCouldBeImported(project)) {
return false;
}
return project.basePath != null
}

if (project.getBasePath() == null) {
return false;
// #api241
class CLionNotificationProvider : ProjectFixesProvider, WidgetStatusProvider, EditorNotificationWarningProvider {
companion object {
@JvmStatic
fun register(project: Project) {
unregisterGenericProvider(project)

if (!providerRegistered) {
registerSpecificProvider();
}
providerRegistered = true;
}

return true;
}

@NotNull
@Override
public List<AnAction> collectFixes(@NotNull Project project, @Nullable VirtualFile file, @NotNull DataContext dataContext) {
override fun collectFixes(project: Project, file: VirtualFile?, dataContext: DataContext): List<AnAction> {
if (file == null || !isBazelAwareFile(project, file)) {
return List.of();
}

final var root = project.getBasePath();
if (root == null) {
return List.of();
return emptyList()
}

return List.of(new ImportBazelAction(root));
return listOf(ImportBazelAction(project.basePath ?: return emptyList()))
}

private static class ImportBazelAction extends AnAction {

private final String root;

public ImportBazelAction(String root) {
super("Import Bazel project");
this.root = root;
}

@Override
public void actionPerformed(@NotNull AnActionEvent anActionEvent) {
BazelImportCurrentProjectAction.createAction(root).run();
private class ImportBazelAction(private val root: String) : AnAction("Import Bazel project") {
override fun actionPerformed(anActionEvent: AnActionEvent) {
BazelImportCurrentProjectAction.createAction(root).run()
}
}

@Nullable
@Override
public ProjectNotification getProjectNotification(@NotNull Project project,
@NotNull VirtualFile virtualFile) {
return ProjectStatusHelperKt.convertStatus(getWidgetStatus(project, virtualFile));
override fun getProjectNotification(project: Project, virtualFile: VirtualFile): ProjectNotification? {
return convertStatus(getWidgetStatus(project, virtualFile))
}

@Nullable
@Override
public WidgetStatus getWidgetStatus(@NotNull Project project, @Nullable VirtualFile file) {
override fun getWidgetStatus(project: Project, file: VirtualFile?): WidgetStatus? {
if (Blaze.isBlazeProject(project)) {
return new DefaultWidgetStatus(Status.OK, Scope.Project, "Project is configured");
return DefaultWidgetStatus(Status.OK, Scope.Project, "Project is configured")
}

if (file == null || !isBazelAwareFile(project, file)) {
return null;
return null
}

return new DefaultWidgetStatus(Status.Warning, Scope.Project, "Project is not configured");
return DefaultWidgetStatus(Status.Warning, Scope.Project, "Project is not configured")
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -25,28 +25,75 @@ import com.intellij.openapi.actionSystem.DataContext
import com.intellij.openapi.project.Project
import com.intellij.openapi.vfs.VirtualFile
import com.intellij.ui.EditorNotificationProvider
import com.jetbrains.cidr.lang.daemon.OCFileScopeProvider.Companion.getProjectSourceLocationKind
import com.jetbrains.cidr.project.ui.convertStatus
import com.jetbrains.cidr.project.ui.isProjectAwareFile
import com.jetbrains.cidr.project.ui.notifications.EditorNotificationWarningProvider
import com.jetbrains.cidr.project.ui.notifications.ProjectNotification
import com.jetbrains.cidr.project.ui.popup.ProjectFixesProvider
import com.jetbrains.cidr.project.ui.widget.*

private var providerRegistered: Boolean = false

private fun unregisterGenericProvider(project: Project) {
val extensionPoint = EditorNotificationProvider.EP_NAME.getPoint(project)

// Note: We need to remove the default style of showing project status and fixes used in
// Android Studio and IDEA to introduce CLion's PSW style.
for (extension in extensionPoint.extensions) {
if (extension is BazelNotificationProvider) {
extensionPoint.unregisterExtension(extension)
}
}
}

private fun registerSpecificProvider() {
val projectFixes = ProjectFixesProvider.Companion.EP_NAME.point
projectFixes.registerExtension(CLionNotificationProvider())

val projectNotifications = EditorNotificationWarningProvider.EP_NAME.point
projectNotifications.registerExtension(CLionNotificationProvider())

val widgetStatus = WidgetStatusProvider.EP_NAME.point
widgetStatus.registerExtension(CLionNotificationProvider())
}

private fun isBazelAwareFile(project: Project, file: VirtualFile): Boolean {
if (Blaze.isBlazeProject(project)) {
return false
}

if (!isProjectAwareFile(file, project) && file.fileType !== BuildFileType.INSTANCE) {
return false
}

if (getProjectSourceLocationKind(project, file).isInProject()) {
return false
}

if (!BazelImportCurrentProjectAction.projectCouldBeImported(project)) {
return false
}

return project.basePath != null
}

// #api241
class CLionNotificationProvider : ProjectFixesProvider, WidgetStatusProvider, EditorNotificationWarningProvider {
override suspend fun collectFixes(project: Project, file: VirtualFile?, dataContext: DataContext): List<AnAction> {
if (file == null) {
return emptyList()
}
companion object {
@JvmStatic
fun register(project: Project) {
unregisterGenericProvider(project)

if (Blaze.isBlazeProject(project)) {
return emptyList()
if (!providerRegistered) {
registerSpecificProvider();
}
providerRegistered = true;
}
}

if (!isProjectAwareFile(file, project) && file.fileType != BuildFileType.INSTANCE) {
return emptyList()
}
if (!BazelImportCurrentProjectAction.projectCouldBeImported(project)) {
override suspend fun collectFixes(project: Project, file: VirtualFile?, dataContext: DataContext): List<AnAction> {
if (file == null || !isBazelAwareFile(project, file)) {
return emptyList()
}

Expand All @@ -64,53 +111,14 @@ class CLionNotificationProvider : ProjectFixesProvider, WidgetStatusProvider, Ed
}

override fun getWidgetStatus(project: Project, file: VirtualFile?): WidgetStatus? {
if (Blaze.isBlazeProject(project)) {
return DefaultWidgetStatus(Status.OK, Scope.Project, "Project is configured")
}

if (file == null) {
return null
}

if (!isProjectAwareFile(file, project) && file.getFileType() !== BuildFileType.INSTANCE) {
return null
}
if (!BazelImportCurrentProjectAction.projectCouldBeImported(project)) {
return null
}

if (project.basePath == null) {
return null
}

return DefaultWidgetStatus(Status.Warning, Scope.Project, "Project is not configured")
}

companion object {
private fun unregisterGenericProvider(project: Project) {
val extensionPoint = EditorNotificationProvider.EP_NAME.getPoint(project)

// Note: We need to remove the default style of showing project status and fixes used in
// Android Studio and IDEA to introduce CLion's PSW style.
for (extension in extensionPoint.extensions) {
if (extension is BazelNotificationProvider) {
extensionPoint.unregisterExtension(extension)
}
}
if (Blaze.isBlazeProject(project)) {
return DefaultWidgetStatus(Status.OK, Scope.Project, "Project is configured")
}

@JvmStatic
fun register(project: Project) {
unregisterGenericProvider(project)

val projectFixes = ProjectFixesProvider.Companion.EP_NAME.point
projectFixes.registerExtension(CLionNotificationProvider())

val projectNotifications = EditorNotificationWarningProvider.Companion.EP_NAME.point
projectNotifications.registerExtension(CLionNotificationProvider())

val widgetStatus = WidgetStatusProvider.Companion.EP_NAME.point
widgetStatus.registerExtension(CLionNotificationProvider())
if (file == null || !isBazelAwareFile(project, file)) {
return null
}

return DefaultWidgetStatus(Status.Warning, Scope.Project, "Project is not configured")
}
}

0 comments on commit 47e199f

Please sign in to comment.