diff --git a/plugins/lombok/src/main/java/de/plushnikov/intellij/plugin/activity/LombokBuildManagerListener.java b/plugins/lombok/src/main/java/de/plushnikov/intellij/plugin/activity/LombokBuildManagerListener.java index 7e3388cbb727..1a329193b222 100644 --- a/plugins/lombok/src/main/java/de/plushnikov/intellij/plugin/activity/LombokBuildManagerListener.java +++ b/plugins/lombok/src/main/java/de/plushnikov/intellij/plugin/activity/LombokBuildManagerListener.java @@ -3,13 +3,23 @@ package de.plushnikov.intellij.plugin.activity; import com.intellij.compiler.CompilerConfiguration; import com.intellij.compiler.CompilerConfigurationImpl; import com.intellij.compiler.server.BuildManagerListener; +import com.intellij.notification.*; import com.intellij.openapi.application.ReadAction; import com.intellij.openapi.project.Project; +import com.intellij.openapi.ui.MessageType; +import com.intellij.openapi.ui.popup.Balloon; +import com.intellij.openapi.ui.popup.JBPopupFactory; +import com.intellij.openapi.wm.StatusBar; +import com.intellij.openapi.wm.WindowManager; +import com.intellij.ui.awt.RelativePoint; import com.intellij.util.containers.ContainerUtil; +import de.plushnikov.intellij.plugin.LombokBundle; +import de.plushnikov.intellij.plugin.Version; import de.plushnikov.intellij.plugin.util.LombokLibraryUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.jps.model.java.compiler.AnnotationProcessingConfiguration; +import javax.swing.event.HyperlinkEvent; import java.util.UUID; public class LombokBuildManagerListener implements BuildManagerListener { @@ -19,7 +29,7 @@ public class LombokBuildManagerListener implements BuildManagerListener { @NotNull UUID sessionId) { if (!hasAnnotationProcessorsEnabled(project) && ReadAction.nonBlocking(() -> LombokLibraryUtil.hasLombokLibrary(project)).executeSynchronously()) { - enableAnnotationProcessors(project); + suggestEnableAnnotations(project); } } @@ -37,5 +47,32 @@ public class LombokBuildManagerListener implements BuildManagerListener { CompilerConfigurationImpl compilerConfiguration = getCompilerConfiguration(project); compilerConfiguration.getDefaultProcessorProfile().setEnabled(true); compilerConfiguration.getModuleProcessorProfiles().forEach(pp -> pp.setEnabled(true)); + + StatusBar statusBar = WindowManager.getInstance().getStatusBar(project); + JBPopupFactory.getInstance() + .createHtmlTextBalloonBuilder( + LombokBundle.message("popup.content.java.annotation.processing.has.been.enabled"), + MessageType.INFO, + null + ) + .setFadeoutTime(3000) + .createBalloon() + .show(RelativePoint.getNorthEastOf(statusBar.getComponent()), Balloon.Position.atRight); + } + + private static void suggestEnableAnnotations(Project project) { + NotificationGroup notificationGroup = NotificationGroupManager.getInstance().getNotificationGroup(Version.PLUGIN_NAME); + Notification notification = + notificationGroup.createNotification(LombokBundle.message("config.warn.annotation-processing.disabled.title"), + LombokBundle.message("config.warn.annotation-processing.disabled.message"), + NotificationType.ERROR); + notification.setListener((not, e) -> { + if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED) { + enableAnnotationProcessors(project); + not.expire(); + } + }); + + Notifications.Bus.notify(notification, project); } } diff --git a/plugins/lombok/src/main/resources/messages/LombokBundle.properties b/plugins/lombok/src/main/resources/messages/LombokBundle.properties index 7e80ceafbc19..b38113fc95f1 100644 --- a/plugins/lombok/src/main/resources/messages/LombokBundle.properties +++ b/plugins/lombok/src/main/resources/messages/LombokBundle.properties @@ -4,6 +4,9 @@ config.warn.dependency.outdated.message=
\ Project "{0}" and Module "{1}" seem to have outdated lombok dependency added.
\ Configured version "{2}", but there is at least version "{3}" already released
\ Maybe you want to update?
+config.warn.annotation-processing.disabled.title=Lombok requires enabled annotation processing +config.warn.annotation-processing.disabled.message=
\ + Do you want to enable annotation processors? Enable
replace.with.annotations.lombok=Replace with annotations (Lombok) replace.0.with.explicit.type.lombok=Replace ''{0}'' with explicit type (Lombok) replace.explicit.type.with.0.lombok=Replace explicit type with ''{0}'' (Lombok) @@ -169,3 +172,4 @@ inspection.lombok.group.name.lombok=Lombok inspection.lombok.group.name.redundant.modifiers=Redundant modifiers inspection.lombok.group.name.redundant.definitions=Redundant definitions intention.category.lombok=Java/Lombok +popup.content.java.annotation.processing.has.been.enabled=Java annotation processing has been enabled