Code Monkey home page Code Monkey logo

liberty-tools-intellij's Introduction

Liberty Tools for IntelliJ IDEA

Note: Version 24.0.3 requires IntelliJ IDEA 2023.2.* or 2023.3.* and a minimum of Java 17.

This page provides an overview of Liberty Tools for IntelliJ IDEA. For minimum requirements information and detailed instructions on how to use Liberty Tools, check the user-guide.

JetBrains plugins Downloads License

Liberty Tools for IntelliJ IDEA is an IntelliJ IDEA plugin for developing cloud-native Java applications with Open Liberty and WebSphere Liberty. Iterate fast with Liberty dev mode, code with assistance for MicroProfile and Jakarta EE APIs, and easily edit Liberty configuration files.

Liberty Tools Extension


Use Liberty Tools to run your Liberty Maven or Liberty Gradle projects through the Liberty tool window or the IntelliJ "Search Everywhere" window. You can start, stop, or interact with Liberty dev mode on all configured Liberty Maven and Liberty Gradle projects in your workspace. Liberty Tools also helps you quickly and easily edit your application and configuration files by providing language support features for MicroProfile, Jakarta EE, and Liberty configuration and Java files.

For minimum requirements information and detailed instructions on how to use Liberty Tools, check out the Liberty Tools for IntelliJ IDEA user guide page.

Features

  • View Liberty projects in the Liberty tool window.
  • Start/Stop dev mode.
  • Start dev mode with custom parameters.
  • Start dev mode in a container.
  • Start dev mode with the debugger attached.
  • Run tests.
  • View test reports.
  • Code with language assistance in the following configuration and application files:
    • server.xml, server.env, bootstrap.properties Liberty configuration files
    • Jakarta EE 9.x APIs in Java files
    • MicroProfile APIs in microprofile-config.properties and Java files

Feature completion in server.xml files helps you quickly edit your Liberty runtime configuration.

Liberty Config Language Server completion

Hover in bootstrap.properties files provides more detailed descriptions.

Liberty Config Language Server hover

Diagnostics in server.env files helps you quickly spot errors in your Liberty runtime configuration.

Liberty Config Language Server diagnostic

Helpful code snippets are provided in Java files for Jakarta EE APIs such as Jakarta RESTful Web Services.

Eclipse LSP4Jakarta completion

Code completion for microprofile-config.properties files helps you easily set properties for MicroProfile APIs.

Eclipse LSP4MP completion

Editing assistance for configuration and application files is provided through the following language server projects, which this project consumes. For more information, see the documentation for these projects.

Quick start

Projects with the Liberty Maven Plugin or Liberty Gradle Plugin configured will appear in the Liberty tool window on the sidebar. If the tool window is not enabled by default, you can view it by selecting View > Tool Windows > Liberty.

Note: Make sure the JAVA_HOME system environment variable is set to define the JDK for running Liberty dev mode.

For minimum requirements information and detailed instructions on how to use the Liberty actions, check out the Liberty Tools for IntelliJ IDEA user guide page.

Actions

The following actions are available when you select a project in the Liberty Tool Window.

Action Description
Start Start dev mode.
Start… Open the Run Configurations dialog to customize and start dev mode. Supported parameters can be found in the documentation for the dev goal of the Liberty Maven Plugin and the libertyDev task of the Liberty Gradle Plugin.
Start in a container Start dev mode with Liberty running in a container. The liberty-maven-plugin must be version 3.3-M1 or higher. The liberty-gradle-plugin must be version 3.1-M1 or higher.
Stop Stop dev mode. Liberty must be running in dev mode to use this command.
Run tests Run the unit tests and integration tests that are configured for your project. Liberty must be running in dev mode to use this command.
View integration test report (Maven) View the integration test report file if it exists at /target/site/failsafe-report.html.
View unit test report (Maven) View the unit test report file if it exists at /target/site/surefire-report.html.
View test report (Gradle) Open the test report file, if it exists at the build/reports/tests/test/index.html default location. This action command is available only to Gradle projects. Gradle projects have only a single action command for test result reporting.

Technical support

If you experience a problem with this plugin you might be asked to collect language server messages to assist in problem determination. Follow these steps:

  1. Click the Language Servers tool window in the IntelliJ IDE to show the LSP Consoles.
  2. Select the language server you need to monitor and then select Trace: verbose.
  3. Perform the actions that demonstrate the issue and messages will appear in the console. Click a message and select all the text in the console, for example, Ctrl-A on Windows or Cmd-A on MacOS. Copy the text and paste it into a message to send to the developer who is assisting you with the issue.

Requirements

Version 24.0.3 requires IntelliJ IDEA 2023.2.* or 2023.3.* and a minimum of Java 17.

For more details, check the user guide.

Contributing

See the DEVELOPING and CONTRIBUTING documents for more details.

Issues

Please report bugs, issues and feature requests by creating a GitHub issue.

liberty-tools-intellij's People

Contributors

abhamayee avatar ajm01 avatar anusreelakshmi934 avatar aparnamichael avatar dessina-devasia avatar dmuelle avatar dshimo avatar eclipse-lsp4jakarta-bot avatar evie-lau avatar fabio-franco avatar javamultiplex avatar kathrynkodama avatar mattbsox avatar mezarin avatar mrglavas avatar rahul-biju avatar trevcraw avatar turkeylurkey avatar vaisakhkannan avatar yeekangc avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

liberty-tools-intellij's Issues

I followed the steps and watched the video without success

the quality information to set up open Libety server with INtelliJ simply does not exist, at least I havent found it after long hours of googling. I watched your 5:20 min video (https://www.youtube.com/watch?v=GIIhtdXwJ9A) and that did not help either. I followed the steps at https://openliberty.io/blog/2020/09/03/open-liberty-tools-intellij.html with same result.

I am on MacOS Big Sur, using IntelliJ Ultimate 2021

  1. First, intalling the liberty-maven-plugin 3.3.4 plugin did not add plugin to my project pom.xml.
  2. Second even after adding it, I was getting the very same error
    [ERROR] Failed to execute goal io.openliberty.tools:liberty-maven-plugin:3.3.4:dev (default-cli) on project springboot-backend: CWWKM2173E: Failed to install application from project io.learning:springboot-backend:jar:0.0.1-SNAPSHOT. The project packaging type is not supported. -> [Help 1]
  3. Finally, I see nowhere even mentioning how and where is server.xml file that needs to be updated

Running dev mode without Liberty plugin defined in build file

If a user does not have the Liberty Maven plugin or Liberty Gradle plugin defined in their build file, Open Liberty Tools for IntelliJ could provide an option to start dev mode on the project regardless.

Alternatively the IntelliJ plugin could add the appropriate plugin to the build file.

Use selected profiles from the Maven tab when starting server

I have some special options in a "local" profile which are not activated in the CI/CD pipelines but are required for running the development server locally (copying secrets, keystores, etc. from a non git location to target/liberty/wlp/...).

Currently the plugin does't give me an option to define "default" options (then I could put "-Plocal" there) bit I think it would be a great addition if the plugin would use the activated profile(s) defined in the Maven tab.

Start command does not always work on new terminal

When a terminal session does not exist and the user selects "Start", a new terminal session will be created but the start command is not always executed right away. The user must select "Start" again in order to start dev mode.

The user should only have to select "Start" once to create a terminal session and start dev mode.

File changes are not always detected immediately

When changing a file, the mechanism doesn't always update, sometimes only when the focus is moved away from IntelliJ and back. The first time I change a file the plugin picks it up immediately, if I change things back and forth, I have to force the update by either hitting Ctrl+S or switching the focus away from IntelliJ and back.

This is likely connected how IJ managed the source file changes, however, there might be an option as plugin to reliably detect that.

Note: This was the case with using Liberty Dev from CLI as well, but before I had to switch to my terminal (a different window) so it always did detect changes.

Unable to use the plugin (Start dev mode doesn't work) ...

IntelliJ IDEA 2021.3.1 (Ultimate Edition)
Build #IU-213.6461.79, built on December 28, 2021

2022-01-19 09:01:08,842 [ 10078] INFO - tools.intellij.LibertyExplorer - Liberty Maven Project: XmlFile:pom.xml
2022-01-19 09:01:08,858 [ 10094] WARN - nSystem.impl.ActionToolbarImpl - Please do not use ActionPlaces.UNKNOWN or the empty place. Any string unique enough to deduce the toolbar location will do.
java.lang.Throwable: toolbar creation trace
at com.intellij.openapi.actionSystem.impl.ActionToolbarImpl.(ActionToolbarImpl.java:115)
at com.intellij.openapi.actionSystem.impl.ActionManagerImpl.createActionToolbar(ActionManagerImpl.java:425)
at com.intellij.openapi.actionSystem.impl.ActionManagerImpl.createActionToolbar(ActionManagerImpl.java:420)
at io.openliberty.tools.intellij.LibertyExplorer.buildActionToolbar(LibertyExplorer.java:65)
at io.openliberty.tools.intellij.LibertyExplorer.(LibertyExplorer.java:56)
at io.openliberty.tools.intellij.LibertyDevToolWindowFactory.createToolWindowContent(LibertyDevToolWindowFactory.java:15)
at com.intellij.openapi.wm.impl.ToolWindowImpl.createContentIfNeeded$intellij_platform_ide_impl(ToolWindowImpl.kt:542)
at com.intellij.openapi.wm.impl.ToolWindowImpl.scheduleContentInitializationIfNeeded$intellij_platform_ide_impl(ToolWindowImpl.kt:521)
at com.intellij.openapi.wm.impl.ToolWindowManagerImpl.doShowWindow(ToolWindowManagerImpl.kt:1033)
at com.intellij.openapi.wm.impl.ToolWindowManagerImpl.showToolWindowImpl(ToolWindowManagerImpl.kt:979)
at com.intellij.openapi.wm.impl.ToolWindowManagerImpl.showToolWindowImpl$default(ToolWindowManagerImpl.kt:968)
at com.intellij.openapi.wm.impl.ToolWindowManagerImpl.doRegisterToolWindow(ToolWindowManagerImpl.kt:1110)
at com.intellij.openapi.wm.impl.ToolWindowManagerImpl.initToolWindows(ToolWindowManagerImpl.kt:532)
at com.intellij.openapi.wm.impl.ToolWindowManagerImpl.access$initToolWindows(ToolWindowManagerImpl.kt:86)
at com.intellij.openapi.wm.impl.ToolWindowManagerImpl$beforeProjectOpenedTask$1.run(ToolWindowManagerImpl.kt:448)
at com.intellij.openapi.application.TransactionGuardImpl.runWithWritingAllowed(TransactionGuardImpl.java:214)
at com.intellij.openapi.application.TransactionGuardImpl.access$200(TransactionGuardImpl.java:21)
at com.intellij.openapi.application.TransactionGuardImpl$2.run(TransactionGuardImpl.java:196)
at com.intellij.openapi.application.impl.ApplicationImpl.runIntendedWriteActionOnCurrentThread(ApplicationImpl.java:805)
at com.intellij.openapi.application.impl.ApplicationImpl.lambda$invokeLater$4(ApplicationImpl.java:348)
at com.intellij.openapi.application.impl.FlushQueue.doRun(FlushQueue.java:82)
at com.intellij.openapi.application.impl.FlushQueue.runNextEvent(FlushQueue.java:131)
at com.intellij.openapi.application.impl.FlushQueue.flushNow(FlushQueue.java:47)
at com.intellij.openapi.application.impl.FlushQueue$FlushNow.run(FlushQueue.java:187)
at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:313)
at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:776)

Set up globalization framework

Setup framework and, if time, externalize existing strings (otherwise, open separate issue for externalizing strings)

Create an Open Liberty Setting to configure a specific Java version

Currently users can configure a JAVA_HOME environment variable in the settings of the IntelliJ Terminal. Add a configurable Open Liberty Tools settings section to the Preferences pane where users can set a specific java version.

See the Maven and Gradle plugins below:
image
image

Allow for projects to be manually added/removed to/from the Liberty tool window from IntelliJ Project window

  • right-click on project in IntelliJ project window that has not been automatically detected and added to the Liberty tool window
  • "add to Liberty tool window" & "remove from Liberty tool window" options should be provided in the pop up menu
  • when user selects "add to Liberty tool window", the project should be added to the Liberty tool window
  • when user selects "remove from Liberty tool window", the project should be removed the Liberty tool window

Also add an option to add Liberty projects through the "shift shift" window. Issue to address this: #128

Persist any projects that are manually added/removed. Only manually added/removed should persist between IntelliJ sessions. Issue to address this: #129

Automated integration testing for dev mode capabilities

Depends on #69

Project detection:

  • detect project with src/main/liberty/config/server.xml file only
  • detect project with LMP config in build file only
  • detect project with LGP config in build file only - apply plugin & plugins block methods (plugins block will fail until #299 or #26 is addressed)
  • Add project manually through Search Everywhere (shift+shift) menu (confirm project can be run after)
  • Remove project manually through Search Everywhere (shift+shift) menu

Liberty actions through Liberty Tool Window drop down menu:

  • Start
  • Stop
  • Start in container (Linux only)
  • Start... with custom params
  • Start... history (run/debug config saved)
  • Run tests
  • View test reports (browser cannot be opened in UI. External browser removes focus from the Intellij UI)

Liberty actions through Liberty Tool Window right-click pop up menu:

  • Start
  • Stop
  • Start in container
  • Start... with custom params
  • Start... history (run/debug config saved)
  • Run tests
  • View test reports (browser cannot be opened in UI. External browser removes focus from the Intellij UI)
  • View effective POM / gradle config

Liberty actions through Liberty Tool Window play (run) button:

  • Start
  • Stop
  • Start in container
  • Start... with custom params
  • Start... history (run/debug config saved)
  • Run tests
  • View test reports (browser cannot be opened in UI. External browser removes focus from the Intellij UI)

Liberty actions through Search Everywhere (shift+shift) menu:

  • Start
  • Stop
  • Start in container
  • Start... with custom params
  • Start... history (run/debug config saved)
  • Run tests
  • View test reports (browser cannot be opened in UI. External browser removes focus from the Intellij UI)

Liberty actions through Run/Debug configurations

  • Custom start through Configuration toolbar play (run) button
  • Custom start through Configuration toolbar debug button
  • Selection of various Liberty Configuration through Configuration toolbar drop down menu (create multiple Liberty configurations and check to see that we can load each and they have the correct name, project and parameters)
  • Custom start "Run" through Configuration toolbar drop down menu
  • Custom start "Debug" through Configuration toolbar drop down menu
  • Addition of Liberty configuration
  • Editing of Liberty configuration (create a new Liberty configuration - reopen the configuration and edit it - close and then reopen to confirm the edits are saved correctly - ie. name, project, params)
  • Run drop down menu for Run and Debug?
  • Run drop down menu for Run... and Debug... ?

Maven preferences

  • Local Maven
  • Maven wrapper

Gradle preferences

  • Local Gradle
  • Gradle wrapper

Liberty Dev Dashboard (liberty-maven-plugin) does not allow modifying / managring Liberty server settings

I should be able to create new instance of Liberty server or to do any modifications I wish to that instance of Liberty server from within the IDE/Liberty Dev Dashboard. Currently, this is not possible to do therefore requiring another tool like Eclipse to create and/or modify an Liberty server instance.

If this functionality exists, it is not clear how to do that but from what I can see, it does not exist.

Steps
After adding liberty maven plugin to my project, I still see no way to manage my instances of locally installed Liberty server.
It is also not clear where the server settings are located

  1. Add plugin
io.openliberty.tools liberty-maven-plugin 3.3.4
  1. open Liberty Dev Dashboard
    open liberty dashboard intelliJ

Actual result
I can start or stop server but that is pretty much it.

Expected result

  1. I should be able to create new instance of Liberty server local installation on my system by giving server name, pointing to Liberty installation "wlp" directory of installation I can pick and choose (if I have multiple versions of Liberty installed locally. e.g. C:/users/uname/devenv/OpenLiberty 21.0.0.4/wlp, C:/users/uname/devenv/OpenLiberty 20.0.0.2/wlp or C:/users/uname/devenv/WasLiberty 20.0.0.4/wlp ...)
  2. I should also be able to open and modify server.xml, server.env etc from within the IDE
  3. I should also be able to add / remove new server features from within the IDE
  4. I should be able to do any necessary modifications to my server like I can do from Eclipse > Servers tab below; however, none of this functionality exist
    4 In Eclipse, I can create new instance of Liberty server and manage it from Servers tab

Connect running dev mode process to IntelliJ debugger

Add a new "Debug" action that starts dev mode, then configures and connects the IntelliJ debugger. If dev mode is already running, the action would just configure and connect to the running process.

Alternatively, the start action could do this behaviour by default.

Improve parsing of the build.gradle file

There are multiple ways to specify the liberty-gradle-plugin in the build.gradle

  • Dependency block:
dependencies {
        classpath 'io.openliberty.tools:liberty-gradle-plugin:3.1-M2'
    }
    dependencies {
        classpath group: 'io.openliberty.tools', name: 'liberty-gradle-plugin', version: '3.1-M2'
    }

Currently we use regular expressions to validate if the plugin is in the build.gradle. Determine if we should expand the regular expressions to include all of the above cases or define the structure of a build.gradle using ANTLR. See https://github.com/antlr/antlr4

Investigate JAVA_HOME environment variable

Investigate whether IntelliJ supports a custom JAVA_HOME environment variable and whether the plugin needs to be modified to honour the custom JAVA_HOME environment variable.

Remove use of deprecated APIs

Version 0.0.6:

Build of the IDE: IU-221.5787.20
Result: Compatible. 8 usages of deprecated API

Also investigate the use of IntelliJ internal APIs. We should avoid using those if possible.

DefaultTreeExpander "Parameter specified as non-null is null" IDE Error

When viewing and navigating a project, sporadically IntelliJ will show a balloon saying an IDE Error has occurred.

I have the Open Liberty Tools (0.0.5) plugin installed and enabled. The opened IntelliJ project doesn't have any OpenLiberty stuff in it (Gradle plugin not applied, no server selected in run configurations, etc), so I'm not sure if the plugin is assuming something should be there that isn't. We have a number of Java and Kotlin projects that don't use OpenLiberty, so ideally the plugin shouldn't cause IDE Errors in this case.

The info shown by IntelliJ about the error:

update failed for AnAction(io.openliberty.tools.intellij.actions.RunLibertyDevTask, id=io.openliberty.tools.intellij.actions.RunLibertyDevTask) with text=Run Liberty action

java.lang.NullPointerException: Parameter specified as non-null is null: method com.intellij.ide.DefaultTreeExpander.<init>, parameter tree
	at com.intellij.ide.DefaultTreeExpander.<init>(DefaultTreeExpander.kt)
	at io.openliberty.tools.intellij.actions.LibertyToolbarActionGroup.<init>(LibertyToolbarActionGroup.java:21)
	at io.openliberty.tools.intellij.LibertyExplorer.buildActionToolbar(LibertyExplorer.java:64)
	at io.openliberty.tools.intellij.LibertyExplorer.<init>(LibertyExplorer.java:57)
	at io.openliberty.tools.intellij.LibertyDevToolWindowFactory.createToolWindowContent(LibertyDevToolWindowFactory.java:15)
	at com.intellij.openapi.wm.impl.ToolWindowImpl.createContentIfNeeded$intellij_platform_ide_impl(ToolWindowImpl.kt:524)
	at com.intellij.openapi.wm.impl.ToolWindowImpl.getContentManager(ToolWindowImpl.kt:385)
	at io.openliberty.tools.intellij.actions.RunLibertyDevTask.update(RunLibertyDevTask.java:29)
	at com.intellij.openapi.actionSystem.ex.ActionUtil.lambda$performDumbAwareUpdate$0(ActionUtil.java:130)
	at com.intellij.openapi.actionSystem.ex.ActionUtil.performDumbAwareUpdate(ActionUtil.java:144)
	at com.intellij.openapi.actionSystem.impl.ActionUpdater.doUpdate(ActionUpdater.java:592)
	at com.intellij.openapi.actionSystem.impl.ActionUpdater.lambda$updateActionReal$7(ActionUpdater.java:132)
	at com.intellij.openapi.actionSystem.impl.ActionUpdater.lambda$callAction$9(ActionUpdater.java:187)
	at com.intellij.openapi.progress.ProgressManager.lambda$runProcess$0(ProgressManager.java:57)
	at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$runProcess$2(CoreProgressManager.java:183)
	at com.intellij.openapi.progress.impl.CoreProgressManager.registerIndicatorAndRun(CoreProgressManager.java:705)
	at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:647)
	at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:63)
	at com.intellij.openapi.progress.impl.CoreProgressManager.runProcess(CoreProgressManager.java:170)
	at com.intellij.openapi.progress.ProgressManager.runProcess(ProgressManager.java:57)
	at com.intellij.openapi.actionSystem.impl.ActionUpdater.lambda$callAction$10(ActionUpdater.java:185)
	at com.intellij.openapi.actionSystem.impl.ActionUpdateEdtExecutor.lambda$computeOnEdt$0(ActionUpdateEdtExecutor.java:45)
	at com.intellij.openapi.application.TransactionGuardImpl$2.run(TransactionGuardImpl.java:199)
	at com.intellij.openapi.application.impl.ApplicationImpl.runIntendedWriteActionOnCurrentThread(ApplicationImpl.java:794)
	at com.intellij.openapi.application.impl.ApplicationImpl.lambda$invokeLater$4(ApplicationImpl.java:350)
	at com.intellij.openapi.application.impl.FlushQueue.doRun(FlushQueue.java:84)
	at com.intellij.openapi.application.impl.FlushQueue.runNextEvent(FlushQueue.java:133)
	at com.intellij.openapi.application.impl.FlushQueue.flushNow(FlushQueue.java:46)
	at com.intellij.openapi.application.impl.FlushQueue$FlushNow.run(FlushQueue.java:189)
	at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:313)
	at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:776)
	at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:727)
	at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)
	at java.base/java.security.AccessController.doPrivileged(Native Method)
	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
	at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:746)
	at com.intellij.ide.IdeEventQueue.defaultDispatchEvent(IdeEventQueue.java:885)
	at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:754)
	at com.intellij.ide.IdeEventQueue.lambda$dispatchEvent$6(IdeEventQueue.java:441)
	at com.intellij.openapi.progress.impl.CoreProgressManager.computePrioritized(CoreProgressManager.java:825)
	at com.intellij.ide.IdeEventQueue.lambda$dispatchEvent$7(IdeEventQueue.java:440)
	at com.intellij.openapi.application.impl.ApplicationImpl.runIntendedWriteActionOnCurrentThread(ApplicationImpl.java:794)
	at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:486)
	at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
	at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
	at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
	at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)

IntelliJ info:

IntelliJ IDEA 2021.2.3 (Ultimate Edition)
Build #IU-212.5457.46, built on October 12, 2021
Runtime version: 11.0.12+7-b1504.40 amd64
VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o.
Linux 5.15.12-zen1-1-zen
GC: G1 Young Generation, G1 Old Generation
Memory: 3548M
Cores: 24
Non-Bundled Plugins: open-liberty.intellij (0.0.5), GrepConsole (12.0.211.6086.4), org.jetbrains.kotlin (212-1.6.10-release-923-IJ5457.46)
Kotlin: 212-1.6.10-release-923-IJ5457.46
Current Desktop: XFCE

Hotkey integration for Liberty actions

Add hotkey integration for starting dev mode and running Liberty tests, potentially with a popup to display test results. Other potential hotkey shortcuts for switching view to the tool window/active terminal instance, stopping dev mode, viewing test reports, etc.

This issue also includes determining the context of the actions when a hotkey is selected. ie. If the "start dev mode" hotkey is selected while on a Java file, determine the build file that is associated and start dev mode on that project.

Automated tests for Liberty language server client capabilities

Depends on #69 and #68

server.xml features (targeting April 14 or 21)

  • hover on feature element
  • hover on non-feature element
  • completion on feature element
  • completion on non-feature element
  • diagnostic on feature element
  • diagnostic on non-feature element
  • quick fix on config element
  • quick fix on "include" element (missing file)

server.env features (targeting April 7)

  • hover on property key
  • hover on property value
  • completion on property key
  • completion on property value
  • diagnostic on property value

bootstrap.properties features (targeting April 7)

  • hover on property key
  • hover on property value
  • completion on property key
  • completion on property value
  • diagnostic on property value

Improve starter documentation

Create step-by-step documentation around how to configure your Liberty project and make use of the different actions offered by Open Liberty Tools for IntelliJ

  • How to add the Liberty Maven plugin or Liberty Gradle plugin to a pom.xml and configure a server.xml
  • Outline of the different actions available through the Liberty dashboard (starting and stopping dev mode)
  • Links to dev mode documentation and which project types are supported by dev mode

Keyboard usage in Liberty Dev Dashboard

The Liberty Dev Dashboard isn't fully usable by keyboard, the project can't be expanded nor collapsed by cursor arrows, the actions can be selected by cursors (Up / Down), but hitting Enter has no effect.

NullPointerException: Parameter specified as non-null is null

I'm seeing a NullPointerException when opening (or invalidating the cache) in the guide-gradle-intro project in IntelliJ:

Cannot init toolwindow io.openliberty.tools.intellij.LibertyDevToolWindowFactory@5acee0b3

java.lang.NullPointerException: Parameter specified as non-null is null: method com.intellij.ide.DefaultTreeExpander.<init>, parameter tree
	at com.intellij.ide.DefaultTreeExpander.<init>(DefaultTreeExpander.kt)
	at io.openliberty.tools.intellij.actions.LibertyToolbarActionGroup.<init>(LibertyToolbarActionGroup.java:21)
	at io.openliberty.tools.intellij.LibertyExplorer.buildActionToolbar(LibertyExplorer.java:64)
	at io.openliberty.tools.intellij.LibertyExplorer.<init>(LibertyExplorer.java:57)
	at io.openliberty.tools.intellij.LibertyDevToolWindowFactory.createToolWindowContent(LibertyDevToolWindowFactory.java:15)
	at com.intellij.openapi.wm.impl.ToolWindowImpl.createContentIfNeeded$intellij_platform_ide_impl(ToolWindowImpl.kt:525)
	at com.intellij.openapi.wm.impl.ToolWindowImpl.scheduleContentInitializationIfNeeded$intellij_platform_ide_impl(ToolWindowImpl.kt:504)
	at com.intellij.openapi.wm.impl.ToolWindowManagerImpl.doShowWindow(ToolWindowManagerImpl.kt:1022)
	at com.intellij.openapi.wm.impl.ToolWindowManagerImpl.showToolWindowImpl(ToolWindowManagerImpl.kt:968)
	at com.intellij.openapi.wm.impl.ToolWindowManagerImpl.showToolWindowImpl$default(ToolWindowManagerImpl.kt:957)
	at com.intellij.openapi.wm.impl.ToolWindowManagerImpl.doRegisterToolWindow(ToolWindowManagerImpl.kt:1098)
	at com.intellij.openapi.wm.impl.ToolWindowManagerImpl.initToolWindows(ToolWindowManagerImpl.kt:519)
	at com.intellij.openapi.wm.impl.ToolWindowManagerImpl.access$initToolWindows(ToolWindowManagerImpl.kt:94)
	at com.intellij.openapi.wm.impl.ToolWindowManagerImpl$beforeProjectOpenedTask$1.run(ToolWindowManagerImpl.kt:436)
	at com.intellij.openapi.application.TransactionGuardImpl.runWithWritingAllowed(TransactionGuardImpl.java:218)
	at com.intellij.openapi.application.TransactionGuardImpl.access$200(TransactionGuardImpl.java:21)
	at com.intellij.openapi.application.TransactionGuardImpl$2.run(TransactionGuardImpl.java:200)
	at com.intellij.openapi.application.impl.ApplicationImpl.runIntendedWriteActionOnCurrentThread(ApplicationImpl.java:781)
	at com.intellij.openapi.application.impl.ApplicationImpl.lambda$invokeLater$4(ApplicationImpl.java:319)
	at com.intellij.openapi.application.impl.FlushQueue.doRun(FlushQueue.java:84)
	at com.intellij.openapi.application.impl.FlushQueue.runNextEvent(FlushQueue.java:133)
	at com.intellij.openapi.application.impl.FlushQueue.flushNow(FlushQueue.java:46)
	at com.intellij.openapi.application.impl.FlushQueue$FlushNow.run(FlushQueue.java:189)
	at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:313)
	at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:776)
	at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:727)
	at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)
	at java.base/java.security.AccessController.doPrivileged(Native Method)
	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
	at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:746)
	at com.intellij.ide.IdeEventQueue.defaultDispatchEvent(IdeEventQueue.java:969)
	at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:839)
	at com.intellij.ide.IdeEventQueue.lambda$dispatchEvent$8(IdeEventQueue.java:449)
	at com.intellij.openapi.progress.impl.CoreProgressManager.computePrioritized(CoreProgressManager.java:808)
	at com.intellij.ide.IdeEventQueue.lambda$dispatchEvent$9(IdeEventQueue.java:448)
	at com.intellij.openapi.application.impl.ApplicationImpl.runIntendedWriteActionOnCurrentThread(ApplicationImpl.java:781)
	at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:496)
	at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
	at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
	at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
	at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.