This is an automated email from the ASF dual-hosted git repository.

lukaszlenart pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/struts-intellij-plugin.git


The following commit(s) were added to refs/heads/main by this push:
     new ac06907  build: declare JavaScript/JSP/CSS v2 content modules for 
2026.2 (#103) (#116)
ac06907 is described below

commit ac069074160a74ecdd1e77abca3eb0e264c9a865
Author: Lukasz Lenart <[email protected]>
AuthorDate: Sat Jul 25 13:01:22 2026 +0200

    build: declare JavaScript/JSP/CSS v2 content modules for 2026.2 (#103) 
(#116)
    
    * docs: add JavaScript v2 modules implementation plan
    
    Task-by-task plan for #103: declare parser/backend modules, verify with
    build/verifier/tests/runIde, escalate only with classloader evidence.
    
    Co-authored-by: Cursor <[email protected]>
    
    * docs: add JavaScript v2 modules design for #103
    
    Capture the agreed minimal fix: declare parser/backend content modules
    on top of the existing JavaScript plugin dependency, escalate only with
    classloader evidence, and verify with build/verifier/tests plus runIde 
smoke.
    
    Co-authored-by: Cursor <[email protected]>
    
    * build: declare JavaScript v2 content modules for 2026.2
    
    Add intellij.javascript.parser and intellij.javascript.backend so
    Struts taglib JS injectors can load under the fully v2 JavaScript plugin.
    
    Co-authored-by: Cursor <[email protected]>
    
    * build: declare intellij.javaee.jsp.shared for 2026.2 JSP APIs
    
    NewJspFileType/JspxFileType live in the JSP shared content module;
    plugin id com.intellij.jsp alone is insufficient under the v2 model.
    
    Co-authored-by: Cursor <[email protected]>
    
    * build: declare CSS v2 content modules for taglib references
    
    CssFileType and CssInHtmlClassOrIdReferenceProvider require intellij.css
    and intellij.css.backend under the 2026.2 v2 plugin model.
    
    Co-authored-by: Cursor <[email protected]>
    
    * docs: record JavaScript v2 content modules in changelog
    
    Document the 2026.2 JavaScript modular dependency fix for #103.
    
    Co-authored-by: Cursor <[email protected]>
    
    ---------
    
    Co-authored-by: Cursor <[email protected]>
---
 CHANGELOG.md                                       |   1 +
 build.gradle.kts                                   |   5 +
 .../plans/2026-07-25-javascript-v2-modules.md      | 313 +++++++++++++++++++++
 .../2026-07-25-javascript-v2-modules-design.md     | 138 +++++++++
 src/main/resources/META-INF/plugin.xml             |   5 +
 5 files changed, 462 insertions(+)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index de229e9..2818269 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -12,6 +12,7 @@
 - Dependencies - upgrade `org.jetbrains.intellij.platform` to `2.18.1`
 - Dependencies - upgrade `org.jetbrains.kotlin.jvm` to `2.3.0`
 - Dependencies - upgrade Qodana linter image to 
`jetbrains/qodana-jvm:2026.2-eap`
+- Dependencies - declare IntelliJ Platform 2026.2 v2 content modules 
`intellij.javascript.parser`, `intellij.javascript.backend`, 
`intellij.javaee.jsp.shared`, `intellij.css`, and `intellij.css.backend` 
([#103](https://github.com/apache/struts-intellij-plugin/issues/103))
 
 ## [261.19027.1] - 2026-07-13
 
diff --git a/build.gradle.kts b/build.gradle.kts
index fdfb387..a3cc4aa 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -56,13 +56,18 @@ dependencies {
         bundledPlugin("com.intellij.javaee")
         bundledPlugin("com.intellij.javaee.web")
         bundledPlugin("com.intellij.jsp")
+        bundledModule("intellij.javaee.jsp.shared")
         bundledPlugin("com.intellij.spring")
         bundledPlugin("com.intellij.java-i18n")
         bundledPlugin("com.intellij.freemarker")
         bundledPlugin("com.intellij.velocity")
         bundledPlugin("org.intellij.groovy")
         bundledPlugin("JavaScript")
+        bundledModule("intellij.javascript.parser")
+        bundledModule("intellij.javascript.backend")
         bundledPlugin("com.intellij.css")
+        bundledModule("intellij.css")
+        bundledModule("intellij.css.backend")
         bundledPlugin("intellij.structureView.plugin")
         bundledPlugin("com.intellij.modules.json")
         bundledModule("intellij.xml.structureView")
diff --git a/docs/superpowers/plans/2026-07-25-javascript-v2-modules.md 
b/docs/superpowers/plans/2026-07-25-javascript-v2-modules.md
new file mode 100644
index 0000000..777c316
--- /dev/null
+++ b/docs/superpowers/plans/2026-07-25-javascript-v2-modules.md
@@ -0,0 +1,313 @@
+# JavaScript v2 Content Modules Implementation Plan
+
+> **For agentic workers:** REQUIRED SUB-SKILL: Use 
superpowers:subagent-driven-development (recommended) or 
superpowers:executing-plans to implement this plan task-by-task. Steps use 
checkbox (`- [ ]`) syntax for tracking.
+
+**Goal:** Declare IntelliJ Platform 2026.2 JavaScript v2 content modules so 
Struts JSP/FreeMarker JS injectors load without classloader errors.
+
+**Architecture:** Minimal declarative fix on top of the existing `JavaScript` 
plugin dependency. Add `intellij.javascript.parser` and 
`intellij.javascript.backend` in `plugin.xml` and matching `bundledModule(...)` 
entries in Gradle. Escalate to `intellij.javascript.common` (then broader 
modules) only if build, plugin verifier, or `runIde` shows a real classloader 
gap. No injector logic changes.
+
+**Tech Stack:** IntelliJ Platform Gradle Plugin 2.x, IntelliJ IDEA 2026.2 
(`262.*`), Java 25, JetBrains Plugin Verifier.
+
+**Spec:** `docs/superpowers/specs/2026-07-25-javascript-v2-modules-design.md`  
+**Issue:** [#103](https://github.com/apache/struts-intellij-plugin/issues/103)
+
+## Global Constraints
+
+- Keep `<plugin id="JavaScript"/>` and `bundledPlugin("JavaScript")` — v2 
`<module>` entries are **additional**.
+- Start with exactly `intellij.javascript.parser` and 
`intellij.javascript.backend`.
+- Add `intellij.javascript.common` only after a real `NoClassDefFoundError` / 
`ClassNotFoundException` for `com.intellij.lang.javascript.*`.
+- Broader modules (`psi.impl`, `analysis.impl`) only after `common` still 
fails.
+- Do **not** change `TaglibJavaScriptInjector` or 
`FreeMarkerJavaScriptInjector`.
+- Do **not** make JavaScript optional.
+- Do **not** add new automated JS injector tests.
+- Do **not** run prepare/publish release workflows.
+- Platform target is already 2026.2 / Java 25 (from #115); do not re-bump 
platform versions unless verification forces it.
+- Prefer public APIs; fix Marketplace-blocking verifier issues before merging.
+
+---
+
+## File Structure
+
+| File | Action | Responsibility |
+|---|---|---|
+| `src/main/resources/META-INF/plugin.xml` | Modify | Declare JS v2 content 
modules next to existing `JavaScript` plugin dependency |
+| `build.gradle.kts` | Modify | Declare matching `bundledModule(...)` entries 
for compile/runtime classpath |
+| `CHANGELOG.md` | Modify | Record JavaScript v2 content module dependencies 
under Unreleased |
+| `docs/superpowers/specs/2026-07-25-javascript-v2-modules-design.md` | 
Reference only | Approved design decisions |
+| Injector sources under `src/main/java/.../jsp/` and `.../freemarker/` | Do 
not modify | Already use the classes hosted by the modules above |
+
+No new modules, extension points, or feature code.
+
+---
+
+### Task 1: Declare JavaScript v2 content modules
+
+**Files:**
+- Modify: `src/main/resources/META-INF/plugin.xml` (around the 
`<dependencies>` block containing `JavaScript`)
+- Modify: `build.gradle.kts` (around `bundledPlugin("JavaScript")`)
+
+**Interfaces:**
+- Consumes: existing required dependency on plugin id `JavaScript`
+- Produces: runtime/classpath access to `JavaScriptSupportLoader` 
(`intellij.javascript.parser`) and `JSInXmlLanguagesInjector` 
(`intellij.javascript.backend`)
+
+- [ ] **Step 1: Confirm current dependency wiring**
+
+Run:
+
+```bash
+rg -n 'JavaScript|javascript\.(parser|backend|common)|bundledModule' \
+  src/main/resources/META-INF/plugin.xml build.gradle.kts
+```
+
+Expected: `plugin.xml` has `<plugin id="JavaScript"/>` and no JS module 
entries yet; `build.gradle.kts` has `bundledPlugin("JavaScript")` and existing 
`bundledModule("intellij.xml.structureView*")` only.
+
+- [ ] **Step 2: Add modules to `plugin.xml`**
+
+In `src/main/resources/META-INF/plugin.xml`, change the JavaScript dependency 
lines from:
+
+```xml
+        <plugin id="JavaScript"/>
+        <plugin id="com.intellij.css"/>
+```
+
+to:
+
+```xml
+        <plugin id="JavaScript"/>
+        <module name="intellij.javascript.parser"/>
+        <module name="intellij.javascript.backend"/>
+        <plugin id="com.intellij.css"/>
+```
+
+Keep every other dependency unchanged.
+
+- [ ] **Step 3: Add matching Gradle `bundledModule` entries**
+
+In `build.gradle.kts`, inside `intellijPlatform { ... }`, change:
+
+```kotlin
+        bundledPlugin("JavaScript")
+        bundledPlugin("com.intellij.css")
+        bundledPlugin("intellij.structureView.plugin")
+        bundledPlugin("com.intellij.modules.json")
+        bundledModule("intellij.xml.structureView")
+        bundledModule("intellij.xml.structureView.impl")
+```
+
+to:
+
+```kotlin
+        bundledPlugin("JavaScript")
+        bundledModule("intellij.javascript.parser")
+        bundledModule("intellij.javascript.backend")
+        bundledPlugin("com.intellij.css")
+        bundledPlugin("intellij.structureView.plugin")
+        bundledPlugin("com.intellij.modules.json")
+        bundledModule("intellij.xml.structureView")
+        bundledModule("intellij.xml.structureView.impl")
+```
+
+- [ ] **Step 4: Resolve and compile to confirm modules exist on 2026.2**
+
+Run:
+
+```bash
+./gradlew compileJava --no-daemon
+```
+
+Expected: BUILD SUCCESSFUL. If Gradle fails with an unknown/`bundledModule` 
resolution error for either JS module name, stop and re-check JetBrains docs / 
the 2026.2 distribution module list before inventing alternate names.
+
+- [ ] **Step 5: Commit**
+
+```bash
+git add src/main/resources/META-INF/plugin.xml build.gradle.kts
+git commit -m "$(cat <<'EOF'
+build: declare JavaScript v2 content modules for 2026.2
+
+Add intellij.javascript.parser and intellij.javascript.backend so
+Struts taglib JS injectors can load under the fully v2 JavaScript plugin.
+EOF
+)"
+```
+
+---
+
+### Task 2: Verify build, plugin verifier, tests, and runIde smoke
+
+**Files:**
+- Modify only if escalation is required:
+  - `src/main/resources/META-INF/plugin.xml`
+  - `build.gradle.kts`
+
+**Interfaces:**
+- Consumes: Task 1 module declarations
+- Produces: evidence that the declared set is sufficient (or an escalated set 
that is)
+
+- [ ] **Step 1: Full build**
+
+Run:
+
+```bash
+./gradlew build --no-daemon
+```
+
+Expected: BUILD SUCCESSFUL.
+
+- [ ] **Step 2: Plugin verifier against 2026.2**
+
+Run:
+
+```bash
+./gradlew runPluginVerifier --no-daemon
+```
+
+Expected: completes without Marketplace-blocking incompatibilities for the 262 
target. Warnings about unrelated internal APIs may already exist; do not expand 
scope to clean those unless they block merge.
+
+- [ ] **Step 3: Enabled unit tests**
+
+Run:
+
+```bash
+./gradlew test -x rat --no-daemon
+```
+
+Expected: BUILD SUCCESSFUL for the currently enabled suite. Do not re-enable 
underscore-prefixed / historically disabled tests.
+
+- [ ] **Step 4: Manual `runIde` smoke for JSP JS injection**
+
+Run:
+
+```bash
+./gradlew runIde --no-daemon
+```
+
+In the launched IDE:
+
+1. Open or create a JSP that uses Struts UI / jQuery taglib attributes such as 
`onclick` / `onComplete` (any `on*` attribute covered by 
`TaglibJavaScriptInjector`).
+2. Confirm the attribute value gets JavaScript language injection 
(highlighting / language host present).
+3. Check Help → Show Log in Finder/Explorer (or the idea.log) for 
`NoClassDefFoundError` / `ClassNotFoundException` mentioning 
`com.intellij.lang.javascript`.
+
+Expected: injection works; no JS classloader errors.
+
+- [ ] **Step 5: Manual FreeMarker smoke (if FreeMarker plugin is available in 
the sandbox)**
+
+In the same `runIde` session, open a FreeMarker file using Struts taglib 
macros with `on*` / `doubleOn*` attributes (not ending in `Topics`). Confirm 
injection via `FreeMarkerJavaScriptInjector` and re-check the log.
+
+If FreeMarker is unavailable in the sandbox, note that in the PR and rely on 
the JSP smoke plus compile-time module resolution (injector still compiles 
against `JavaScriptSupportLoader`).
+
+- [ ] **Step 6: Escalate only if classloader errors remain**
+
+If Steps 4–5 (or earlier steps) show residual `com.intellij.lang.javascript.*` 
classloader failures, add `intellij.javascript.common` in both places:
+
+`plugin.xml` (after the two existing JS modules):
+
+```xml
+        <module name="intellij.javascript.common"/>
+```
+
+`build.gradle.kts` (after the two existing JS `bundledModule` lines):
+
+```kotlin
+        bundledModule("intellij.javascript.common")
+```
+
+Then re-run Steps 1–5. Only if `common` is still insufficient, add broader 
modules named in the failure (`psi.impl` / `analysis.impl` equivalents as 
documented by JetBrains for the missing class), never a speculative full JS 
module dump.
+
+If escalation changes files, commit before continuing:
+
+```bash
+git add src/main/resources/META-INF/plugin.xml build.gradle.kts
+git commit -m "$(cat <<'EOF'
+build: add intellij.javascript.common for residual JS classloader gaps
+
+Required after runIde/verifier showed missing com.intellij.lang.javascript 
classes
+beyond parser and backend modules.
+EOF
+)"
+```
+
+Adjust the commit message to name whatever module(s) were actually added.
+
+- [ ] **Step 7: No-op commit checkpoint if no escalation**
+
+If no escalation was needed, do not create an empty commit. Proceed to Task 3.
+
+---
+
+### Task 3: Changelog and handoff
+
+**Files:**
+- Modify: `CHANGELOG.md`
+
+**Interfaces:**
+- Consumes: final module set from Tasks 1–2
+- Produces: Unreleased changelog entry matching what was actually declared
+
+- [ ] **Step 1: Update `CHANGELOG.md`**
+
+Under `## [Unreleased]` → `### Changed`, add a bullet after the existing 
2026.2 / dependency entries. If only the two planned modules were declared:
+
+```markdown
+- Dependencies - declare JavaScript v2 content modules 
`intellij.javascript.parser` and `intellij.javascript.backend` for IntelliJ 
Platform 2026.2 
([#103](https://github.com/apache/struts-intellij-plugin/issues/103))
+```
+
+If escalation added more modules, list every module that landed, for example:
+
+```markdown
+- Dependencies - declare JavaScript v2 content modules 
`intellij.javascript.parser`, `intellij.javascript.backend`, and 
`intellij.javascript.common` for IntelliJ Platform 2026.2 
([#103](https://github.com/apache/struts-intellij-plugin/issues/103))
+```
+
+Do not invent a Marketplace release section; keep under Unreleased.
+
+- [ ] **Step 2: Confirm descriptor/Gradle still match**
+
+Run:
+
+```bash
+rg -n 'intellij\.javascript\.(parser|backend|common)' \
+  src/main/resources/META-INF/plugin.xml build.gradle.kts CHANGELOG.md
+```
+
+Expected: every JS module named in `plugin.xml` also appears in 
`build.gradle.kts` and is mentioned in `CHANGELOG.md`.
+
+- [ ] **Step 3: Commit**
+
+```bash
+git add CHANGELOG.md
+git commit -m "$(cat <<'EOF'
+docs: record JavaScript v2 content modules in changelog
+
+Document the 2026.2 JavaScript modular dependency fix for #103.
+EOF
+)"
+```
+
+- [ ] **Step 4: Final status check**
+
+Run:
+
+```bash
+git status -sb
+git log --oneline main..HEAD
+```
+
+Expected: clean working tree; commits covering module wiring, optional 
escalation, and changelog. Ready for PR that closes #103.
+
+---
+
+## Spec coverage checklist
+
+| Spec requirement | Task |
+|---|---|
+| Declare `intellij.javascript.parser` + `intellij.javascript.backend` in 
`plugin.xml` | Task 1 |
+| Matching Gradle `bundledModule(...)` | Task 1 |
+| Keep existing `JavaScript` plugin dependency | Task 1 (explicit non-removal) 
|
+| Escalate to `common` / broader only with evidence | Task 2 Step 6 |
+| `./gradlew build` | Task 2 Step 1 |
+| `./gradlew runPluginVerifier` | Task 2 Step 2 |
+| `./gradlew test -x rat` | Task 2 Step 3 |
+| Manual `runIde` JSP + FreeMarker smoke | Task 2 Steps 4–5 |
+| No injector code changes | Global Constraints + File Structure |
+| No new automated JS injector tests | Global Constraints |
+| `CHANGELOG.md` updated | Task 3 |
+| No Marketplace release in this work | Global Constraints |
diff --git a/docs/superpowers/specs/2026-07-25-javascript-v2-modules-design.md 
b/docs/superpowers/specs/2026-07-25-javascript-v2-modules-design.md
new file mode 100644
index 0000000..ea44db3
--- /dev/null
+++ b/docs/superpowers/specs/2026-07-25-javascript-v2-modules-design.md
@@ -0,0 +1,138 @@
+# JavaScript v2 Content Modules for IntelliJ Platform 2026.2
+
+**Issue:** [#103](https://github.com/apache/struts-intellij-plugin/issues/103) 
 
+**Date:** 2026-07-25  
+**Status:** Approved for implementation planning
+
+## Problem
+
+In IntelliJ Platform **2026.2**, the JavaScript plugin migrated to the **v2 
plugin model**. Functionality is split into content modules; a plain dependency 
on the `JavaScript` plugin may no longer expose required classes at runtime.
+
+Typical linkage errors:
+
+```
+java.lang.NoClassDefFoundError: com/intellij/lang/javascript/JSElementTypes
+java.lang.ClassNotFoundException: com.intellij.lang.javascript.JSElementTypes
+```
+
+This plugin depends on JavaScript for language injection in Struts taglib 
attributes (JSP and FreeMarker). The platform target is already **2026.2** 
(`262.*`) via 
[#115](https://github.com/apache/struts-intellij-plugin/pull/115); what remains 
is declaring the v2 content modules that host the classes we use.
+
+## Goals
+
+1. Declare the JavaScript v2 content modules required for our injectors at 
runtime.
+2. Keep the existing `<plugin id="JavaScript"/>` / 
`bundledPlugin("JavaScript")` dependency — v2 `<module>` entries are additional.
+3. Match Gradle `bundledModule(...)` entries to `plugin.xml`.
+4. Expand the module set only when build, plugin verifier, or `runIde` shows a 
real classloader gap.
+5. Confirm JSP and FreeMarker Struts taglib JS injection works under 2026.2 
without classloader errors.
+6. Document the change in `CHANGELOG.md`.
+
+## Non-Goals
+
+- Making the JavaScript dependency optional.
+- Changing injector logic or removing `com.intellij.lang.javascript.*` usage.
+- Marketplace release / prepare-publish as part of this work.
+- Adding new automated tests for JS injection (manual `runIde` smoke is the 
functional bar).
+- Re-enabling historically disabled tests.
+- Broader platform upgrades (already completed in #115).
+
+## Decisions
+
+| Question | Decision |
+|---|---|
+| Approach | Minimal declarative fix — declare modules, keep injectors 
unchanged |
+| Initial modules | `intellij.javascript.parser` + 
`intellij.javascript.backend` |
+| Escalation | Add `intellij.javascript.common` only if residual classloader 
errors appear; then broader sets (`psi.impl`, `analysis.impl`) if still needed |
+| Keep `JavaScript` plugin dependency? | Yes — modules are additional, not a 
replacement |
+| Verification bar | `build` + `runPluginVerifier` + `test -x rat` + manual 
`runIde` smoke |
+| New automated JS injector tests? | No |
+
+## Scope of JavaScript API usage
+
+Only two production files import `com.intellij.lang.javascript.*`:
+
+| File | Classes used |
+|------|--------------|
+| `src/main/java/com/intellij/struts2/jsp/TaglibJavaScriptInjector.java` | 
`JavaScriptSupportLoader`, `JSInXmlLanguagesInjector` |
+| 
`src/main/java/com/intellij/struts2/freemarker/FreeMarkerJavaScriptInjector.java`
 | `JavaScriptSupportLoader` |
+
+No direct usage of `JSElementTypes`, `JSLanguage`, `JSReferenceExpression`, or 
JS lexers/parsers.
+
+## Architecture / components
+
+No production code changes. Wiring only, same pattern as existing 
`intellij.xml.structureView*` modules.
+
+| Unit | Role |
+|------|------|
+| `src/main/resources/META-INF/plugin.xml` | Keep `<plugin id="JavaScript"/>`; 
add `<module name="intellij.javascript.parser"/>` and `<module 
name="intellij.javascript.backend"/>` |
+| `build.gradle.kts` | Keep `bundledPlugin("JavaScript")`; add matching 
`bundledModule(...)` entries |
+| `TaglibJavaScriptInjector` | Unchanged |
+| `FreeMarkerJavaScriptInjector` | Unchanged (still loaded via optional 
`struts2-freemarker.xml`) |
+| `CHANGELOG.md` | Record JavaScript v2 content module dependencies |
+
+### Class → module mapping (initial)
+
+| Class | v2 module |
+|-------|-----------|
+| `JavaScriptSupportLoader` | `intellij.javascript.parser` |
+| `JSInXmlLanguagesInjector` | `intellij.javascript.backend` |
+
+### Descriptor sketch
+
+```xml
+<dependencies>
+    ...
+    <plugin id="JavaScript"/>
+    <module name="intellij.javascript.parser"/>
+    <module name="intellij.javascript.backend"/>
+    ...
+</dependencies>
+```
+
+### Gradle sketch
+
+```kotlin
+bundledPlugin("JavaScript")
+bundledModule("intellij.javascript.parser")
+bundledModule("intellij.javascript.backend")
+```
+
+## Verification and escalation
+
+Execute in this order:
+
+1. Apply the two module declarations in `plugin.xml` and `build.gradle.kts`.
+2. `./gradlew build`
+3. `./gradlew runPluginVerifier` against 2026.2
+4. `./gradlew test -x rat`
+5. Manual `./gradlew runIde` smoke: open a JSP (and FreeMarker if available) 
with Struts UI/jQuery `on*` attributes; confirm JS injection works and the IDE 
log has no `com.intellij.lang.javascript.*` classloader errors.
+6. Update `CHANGELOG.md`.
+
+### Escalation on classloader failure
+
+If `NoClassDefFoundError` / `ClassNotFoundException` for 
`com.intellij.lang.javascript.*` remains after the two modules:
+
+1. Add `intellij.javascript.common` in both descriptor and Gradle; re-verify.
+2. Only then consider broader modules (`psi.impl`, `analysis.impl`).
+3. Record whatever was actually required in `CHANGELOG.md`.
+
+## Delivery
+
+- Short-lived branch → PR closing #103.
+- Do **not** run prepare/publish release workflows as part of this work.
+- After merge, Marketplace impact depends on the next normal 262.x release.
+
+## Success criteria
+
+- [ ] `plugin.xml` declares `intellij.javascript.parser` and 
`intellij.javascript.backend` (plus any evidence-driven extras)
+- [ ] Gradle declares matching `bundledModule(...)` entries
+- [ ] `./gradlew build` and `./gradlew runPluginVerifier` pass against 2026.2
+- [ ] `./gradlew test -x rat` passes for the enabled suite
+- [ ] `./gradlew runIde` — JSP and FreeMarker Struts taglib JS injection works 
(no classloader errors)
+- [ ] `CHANGELOG.md` updated
+
+## References
+
+- [Plugin Dependencies — modular 
plugins](https://plugins.jetbrains.com/docs/intellij/plugin-dependencies.html)
+- [IntelliJ Platform Gradle Plugin — 
`bundledModule()`](https://plugins.jetbrains.com/docs/intellij/tools-intellij-platform-gradle-plugin-dependencies-extension.html)
+- JetBrains intellij-plugins commit WEB-77676: JavaScript plugin converted to 
fully-v2 modules
+- Prior platform bump: 
[#115](https://github.com/apache/struts-intellij-plugin/pull/115) / 
`docs/superpowers/specs/2026-07-24-intellij-2026-2-compatibility-design.md`
diff --git a/src/main/resources/META-INF/plugin.xml 
b/src/main/resources/META-INF/plugin.xml
index 89a55f2..27afd7d 100644
--- a/src/main/resources/META-INF/plugin.xml
+++ b/src/main/resources/META-INF/plugin.xml
@@ -26,8 +26,13 @@
         <plugin id="com.intellij.javaee"/>
         <plugin id="com.intellij.javaee.web"/>
         <plugin id="com.intellij.jsp"/>
+        <module name="intellij.javaee.jsp.shared"/>
         <plugin id="JavaScript"/>
+        <module name="intellij.javascript.parser"/>
+        <module name="intellij.javascript.backend"/>
         <plugin id="com.intellij.css"/>
+        <module name="intellij.css"/>
+        <module name="intellij.css.backend"/>
         <plugin id="intellij.structureView.plugin"/>
         <plugin id="com.intellij.java-i18n"/>
     </dependencies>

Reply via email to