Skip to content

EclipseCodeStyleManager not honoring plugin listeners #265

Description

@spacedvoid

What steps will reproduce the issue?

Create an IDE Kotlin script as below:

import com.intellij.openapi.diagnostic.Logger
import com.intellij.openapi.project.Project
import com.intellij.openapi.project.ProjectManager
import com.intellij.psi.PsiFile
import com.intellij.psi.codeStyle.CodeStyleManager

class ReformatListener(private val project: Project) : CodeStyleManager.Listener {
	init {
		LOGGER.info("Listener created for project " + project.name)
	}

	override fun beforeReformatText(file: PsiFile) {
		LOGGER.info("beforeReformatText: " + project.name)
	}

	override fun afterReformatText(file: PsiFile) {
		LOGGER.info("afterReformatText: " + project.name)
	}

	companion object {
		private val LOGGER: Logger = Logger.getInstance(ReformatListener::class.java)
	}
}

var project = ProjectManager.getInstance().openProjects[0] // Or the project instance you know
project.messageBus.connect().subscribe(CodeStyleManager.Listener.TOPIC, ReformatListener(project))

Run the script, and reformat any file.

What is the expected result?

Intellij log file idea.log shows the logs Listener created for project <projectName>, beforeReformatText: <projectName>, and afterReformatText: <projectName>, just like when the default formatter of Intellij is used.

What happens instead?

No logs are printed.

Paste information about IDE and OS (it can be copied from Help | About dialog).

IntelliJ IDEA 2023.3.1 (Community Edition)
Build #IC-233.11799.300, built on December 12, 2023
Runtime version: 17.0.9+7-b1087.7 amd64
VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o.
Windows 11.0
GC: G1 Young Generation, G1 Old Generation
Memory: 2048M
Cores: 16
Registry:
debugger.new.tool.window.layout=true
ide.experimental.ui=true
Non-Bundled Plugins:
DevKit (233.11799.300)
EclipseCodeFormatter (23.3.223.000.0-Eclipse_2023-03)
com.demonwav.minecraft-dev (2023.3-1.6.12)
Kotlin: 233.11799.300-IJ

> Applicable fixes

As used in com.intellij.psi.impl.source.codeStyle.CodeStyleManagerImpl#reformatText(com.intellij.psi.PsiFile, com.intellij.formatting.FormatTextRanges), include the lines

this.original.getProject().getMessageBus().syncPublisher(Listener.TOPIC).beforeReformatText(file);

and

this.original.getProject().getMessageBus().syncPublisher(Listener.TOPIC).afterReformatText(file);

before and after formatting in EclipseCodeStyleManager.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions