Coder Social home page Coder Social logo

ehmkah / imgdiff Goto Github PK

View Code? Open in Web Editor NEW
16.0 16.0 1.0 8.9 MB

ImgDiff is a plugin for IntelliJ which shows the diff between two images in IntelliJ's diff screen

License: Apache License 2.0

Kotlin 100.00%
diff gradle image-analysis intellij-plugin kotlin

imgdiff's Introduction

  • πŸ‘‹ Hi, I’m @ehmkah

  • πŸ‘€ I’m interested in computer keyboards of any kind

  • 🌱 I’m currently learning Typescript and how to grow plants from seeds

  • πŸ’žοΈ I’m looking to collaborate on every issue which bugs me

  • πŸ“« How to reach me - open an issue

<!--- ehmkah/ehmkah is a ✨ special ✨ repository because its README.md (this file) appears on your GitHub profile. You can click the Preview link to take a look at your changes. --β†’

imgdiff's People

Contributors

ehmkah avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

Forkers

grigala

imgdiff's Issues

feature: option to sync scroll and zoom

When comparing images, in almost all situation you want to compare same coordinates on original and second image.
Right now when zooming in original and compare same area in second image its quite hard and same scroll action must be done.
(In general, images have same height and width. If they are different, in our use cases height content is increased to bottom, widht is increased to the right.)

Describe the solution you'd like
An option in IntelliJ, which is enabled by default, which will sync scroll position between original, diff and second image as well as zoom level.

Describe alternatives you've considered
manual scroll/zoom in all 3 image views to have same view

Additional context

  • very often, to spot differences, such as font antialiasing, we need to zoom to understand whats going on

if no diff is detected it should be easier to see

Sometime intellij detects images to be different altough they are not. This happens, if they differ in file-size for example.

Since imgdiff uses bufferedimage for comparing it can see whether there is a real difference. If it detects no difference it should make it easier to show that both images are equal. Simplifies the task if there is only one pixel which is different

Fast forward to first changed image

sometimes git thinks images changed but they have not changed. (both images are identical) a button might be nice which forwards diff to first changed image

Allow swap cursor to easily spot differences

Is your feature request related to a problem? Please describe.
When having to deal with very small differences between images, is difficult to easily spot them when using the white background.
In my case for example I'm tracking differences in charts where circles are drawn with a slightly different technique or with a slightly different radius. The actual difference is just a few bytes but its interesting can be hardly visible on the current implementation.

Describe the solution you'd like
As provided by the rich diff in GitHub, a swipe function to swipe between the two overlapping images can be very helpful to spot such differences easily and compare the two images.

Describe alternatives you've considered
An alternative is to increase the contrast or at least make configurable the diff color used on the "white background" view. This can increase the contrast with the background and easing the visibility of differences

Additional context
One example of differences that are barely visible
Screenshot 2021-01-29 at 10 07 50

This is anyway already a great and very useful plugin! Thank you

Show original OR changed image as background behind the diff

Sometimes it is useful to see the original or modified image behind the diff to spot what has been changed.

The parts which differ should be easily be detected.

Solution:

  • simple: an other button right to show image diff in diff view
  • complicated: an additional button to dialog which shows diff, to switch on/off background image

Plugin is showing "Error: can't show diff"

Describe the bug
When comparing images after screenshot test plugin is showing "Error: can't show diff"

Desktop (please complete the following information):

  • OS: Windows 10
  • JDK: 11.0.9; VM: OpenJDK 64-Bit Server VM; Vendor: JetBrains s.r.o.
  • IntelliJ IDEA 2020.3 Build #IU-203.5981.155
  • ImageDiff 1.7.0

Additional context
Log from IDEA
java.lang.IllegalStateException: baseFile.parent must not be null
at de.ehmkah.projects.imgdiff.ImgDiffVirtualFile.getParent(ImgDiffVirtualFile.kt:62)
at com.intellij.openapi.roots.impl.RootIndex.getInfoForFile(RootIndex.java:605)
at com.intellij.openapi.roots.impl.DirectoryIndexImpl.getInfoForFile(DirectoryIndexImpl.java:181)
at com.intellij.openapi.roots.impl.FileIndexBase.getInfoForFileOrDirectory(FileIndexBase.java:98)
at com.intellij.openapi.roots.impl.ProjectFileIndexImpl.getInfoForFileOrDirectory(ProjectFileIndexImpl.java:27)
at com.intellij.openapi.roots.impl.ProjectFileIndexImpl.getModuleForFile(ProjectFileIndexImpl.java:100)
at com.intellij.openapi.roots.impl.ProjectFileIndexImpl.getModuleForFile(ProjectFileIndexImpl.java:92)
at com.intellij.openapi.module.ModuleUtilCore.findModuleForFile(ModuleUtilCore.java:72)
at com.android.tools.idea.editors.manifest.ManifestEditorProvider.accept(ManifestEditorProvider.java:33)
at com.intellij.openapi.fileEditor.impl.FileEditorProviderManagerImpl.lambda$getProviders$0(FileEditorProviderManagerImpl.java:48)
at com.intellij.openapi.application.impl.ApplicationImpl.runReadAction(ApplicationImpl.java:885)
at com.intellij.openapi.application.ReadAction.compute(ReadAction.java:61)
at com.intellij.openapi.fileEditor.impl.FileEditorProviderManagerImpl.getProviders(FileEditorProviderManagerImpl.java:44)
at com.intellij.diff.tools.holders.BinaryEditorHolder$BinaryEditorHolderFactory.create(BinaryEditorHolder.java:92)
at com.intellij.diff.tools.holders.BinaryEditorHolder$BinaryEditorHolderFactory.create(BinaryEditorHolder.java:81)
at com.intellij.diff.tools.util.side.ThreesideDiffViewer.createEditorHolders(ThreesideDiffViewer.java:109)
at com.intellij.diff.tools.util.side.ThreesideDiffViewer.(ThreesideDiffViewer.java:63)
at com.intellij.diff.tools.binary.ThreesideBinaryDiffViewer.(ThreesideBinaryDiffViewer.java:42)
at de.ehmkah.projects.imgdiff.ImgDiffBaseBinaryDiffTool.createImgDiffDiffViewer(ImgDiffBaseBinaryDiffTool.kt:59)
at de.ehmkah.projects.imgdiff.ImgDiffBaseBinaryDiffTool.createComponent(ImgDiffBaseBinaryDiffTool.kt:28)
at de.ehmkah.projects.imgdiff.ImgDiffBaseBinaryDiffTool.createComponent(ImgDiffBaseBinaryDiffTool.kt:19)
at com.intellij.diff.impl.DiffRequestProcessor.createState(DiffRequestProcessor.java:273)
at com.intellij.diff.impl.DiffRequestProcessor.lambda$doApplyRequest$4(DiffRequestProcessor.java:348)
at com.intellij.openapi.progress.impl.CoreProgressManager.registerIndicatorAndRun(CoreProgressManager.java:658)
at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:610)
at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:65)
at com.intellij.openapi.progress.impl.CoreProgressManager.executeNonCancelableSection(CoreProgressManager.java:218)
at com.intellij.diff.impl.DiffRequestProcessor.lambda$doApplyRequest$5(DiffRequestProcessor.java:342)
at com.intellij.diff.util.DiffUtil.runPreservingFocus(DiffUtil.java:761)
at com.intellij.diff.impl.DiffRequestProcessor.doApplyRequest(DiffRequestProcessor.java:332)
at com.intellij.diff.impl.DiffRequestProcessor.lambda$applyRequest$3(DiffRequestProcessor.java:314)
at com.intellij.openapi.wm.impl.FocusManagerImpl.lambda$doWhenFocusSettlesDown$3(FocusManagerImpl.java:182)
at com.intellij.util.ui.EdtInvocationManager.invokeLaterIfNeeded(EdtInvocationManager.java:88)
at com.intellij.util.ui.UIUtil.invokeLaterIfNeeded(UIUtil.java:2194)
at com.intellij.ide.IdeEventQueue.ifFocusEventsInTheQueue(IdeEventQueue.java:188)
at com.intellij.ide.IdeEventQueue.executeWhenAllFocusEventsLeftTheQueue(IdeEventQueue.java:140)
at com.intellij.openapi.wm.impl.FocusManagerImpl.doWhenFocusSettlesDown(FocusManagerImpl.java:173)
at com.intellij.openapi.wm.impl.FocusManagerImpl.doWhenFocusSettlesDown(FocusManagerImpl.java:179)
at com.intellij.openapi.wm.impl.FocusManagerImpl.lambda$doWhenFocusSettlesDown$2(FocusManagerImpl.java:187)
at com.intellij.openapi.application.TransactionGuardImpl.runWithWritingAllowed(TransactionGuardImpl.java:216)
at com.intellij.openapi.application.TransactionGuardImpl.access$200(TransactionGuardImpl.java:24)
at com.intellij.openapi.application.TransactionGuardImpl$2.run(TransactionGuardImpl.java:199)
at com.intellij.openapi.application.impl.ApplicationImpl.runIntendedWriteActionOnCurrentThread(ApplicationImpl.java:822)
at com.intellij.openapi.application.impl.ApplicationImpl.lambda$invokeLater$4(ApplicationImpl.java:324)
at com.intellij.openapi.application.impl.FlushQueue.doRun(FlushQueue.java:85)
at com.intellij.openapi.application.impl.FlushQueue.runNextEvent(FlushQueue.java:134)
at com.intellij.openapi.application.impl.FlushQueue.flushNow(FlushQueue.java:47)
at com.intellij.openapi.application.impl.FlushQueue$FlushNow.run(FlushQueue.java:190)
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:976)
at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:843)
at com.intellij.ide.IdeEventQueue.lambda$dispatchEvent$8(IdeEventQueue.java:454)
at com.intellij.openapi.progress.impl.CoreProgressManager.computePrioritized(CoreProgressManager.java:773)
at com.intellij.ide.IdeEventQueue.lambda$dispatchEvent$9(IdeEventQueue.java:453)
at com.intellij.openapi.application.impl.ApplicationImpl.runIntendedWriteActionOnCurrentThread(ApplicationImpl.java:822)
at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:501)
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)

Diff fails with Error: can't show diff - Reload

MicrosoftTeams-image (2)
colleague tries to compare local branch with remote branch - via Project - Git - Compare with Branch ... other attempts also failed ( local with local etc.)

IDE : IntelliJ Ultimate 2020.2.3(Ulitmate Edition) Build #IU-202.7660.26

java.lang.IllegalStateException: baseFile.parent must not be null at de.ehmkah.projects.imgdiff.ImgDiffVirtualFile.getParent(ImgDiffVirtualFile.kt:62)at com.intellij.facet.impl.FacetFinderImpl.findFacets(FacetFinderImpl.java:116)at com.intellij.facet.impl.FacetFinderImpl.findFacet(FacetFinderImpl.java:101)at com.intellij.javaee.facet.JavaeeFacetUtilImpl.getJavaeeFacet(JavaeeFacetUtilImpl.java:87)at com.intellij.javaee.module.view.AbstractJavaeeFileEditorProvider.getEditedElement(AbstractJavaeeFileEditorProvider.java:54)at com.intellij.javaee.module.view.AbstractJavaeeFileEditorProvider.accept(AbstractJavaeeFileEditorProvider.java:68)at com.intellij.openapi.fileEditor.impl.FileEditorProviderManagerImpl.lambda$getProviders$0(FileEditorProviderManagerImpl.java:48)at com.intellij.openapi.application.impl.ApplicationImpl.runReadAction(ApplicationImpl.java:865)at com.intellij.openapi.application.ReadAction.compute(ReadAction.java:61)at com.intellij.openapi.fileEditor.impl.FileEditorProviderManagerImpl.getProviders(FileEditorProviderManagerImpl.java:44)at com.intellij.diff.tools.holders.BinaryEditorHolder$BinaryEditorHolderFactory.create(BinaryEditorHolder.java:106)at com.intellij.diff.tools.holders.BinaryEditorHolder$BinaryEditorHolderFactory.create(BinaryEditorHolder.java:95)at com.intellij.diff.tools.util.side.ThreesideDiffViewer.createEditorHolders(ThreesideDiffViewer.java:109)at com.intellij.diff.tools.util.side.ThreesideDiffViewer.(ThreesideDiffViewer.java:63)at com.intellij.diff.tools.binary.ThreesideBinaryDiffViewer.(ThreesideBinaryDiffViewer.java:42)at de.ehmkah.projects.imgdiff.ImgDiffBaseBinaryDiffTool.createImgDiffDiffViewer(ImgDiffBaseBinaryDiffTool.kt:59)at de.ehmkah.projects.imgdiff.ImgDiffBaseBinaryDiffTool.createComponent(ImgDiffBaseBinaryDiffTool.kt:28)at de.ehmkah.projects.imgdiff.ImgDiffBaseBinaryDiffTool.createComponent(ImgDiffBaseBinaryDiffTool.kt:19)at com.intellij.diff.impl.DiffRequestProcessor.createState(DiffRequestProcessor.java:276)at com.intellij.diff.impl.DiffRequestProcessor.lambda$doApplyRequest$4(DiffRequestProcessor.java:351)at com.intellij.openapi.progress.impl.CoreProgressManager.registerIndicatorAndRun(CoreProgressManager.java:629)at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:581)at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:60)at com.intellij.openapi.progress.impl.CoreProgressManager.executeNonCancelableSection(CoreProgressManager.java:192)at com.intellij.diff.impl.DiffRequestProcessor.lambda$doApplyRequest$5(DiffRequestProcessor.java:349)at com.intellij.diff.util.DiffUtil.runPreservingFocus(DiffUtil.java:756)at com.intellij.diff.impl.DiffRequestProcessor.doApplyRequest(DiffRequestProcessor.java:335)at com.intellij.diff.impl.DiffRequestProcessor.lambda$applyRequest$3(DiffRequestProcessor.java:317)at com.intellij.openapi.wm.impl.FocusManagerImpl.lambda$doWhenFocusSettlesDown$3(FocusManagerImpl.java:187)at com.intellij.util.ui.UIUtil.invokeLaterIfNeeded(UIUtil.java:2254)at com.intellij.ide.IdeEventQueue.ifFocusEventsInTheQueue(IdeEventQueue.java:188)at com.intellij.ide.IdeEventQueue.executeWhenAllFocusEventsLeftTheQueue(IdeEventQueue.java:140)at com.intellij.openapi.wm.impl.FocusManagerImpl.doWhenFocusSettlesDown(FocusManagerImpl.java:178)at com.intellij.openapi.wm.impl.FocusManagerImpl.doWhenFocusSettlesDown(FocusManagerImpl.java:184)at com.intellij.openapi.wm.impl.IdeFocusManagerImpl.doWhenFocusSettlesDown(IdeFocusManagerImpl.java:41)at com.intellij.diff.impl.DiffRequestProcessor.applyRequest(DiffRequestProcessor.java:325)at com.intellij.diff.impl.DiffRequestProcessor.applyRequest(DiffRequestProcessor.java:304)at com.intellij.diff.impl.CacheDiffRequestProcessor.updateRequest(CacheDiffRequestProcessor.java:106)at com.intellij.diff.impl.CacheDiffRequestProcessor.updateRequest(CacheDiffRequestProcessor.java:89)at com.intellij.diff.impl.DiffRequestProcessor.updateRequest(DiffRequestProcessor.java:187)at com.intellij.diff.impl.DiffRequestProcessor$DiffToolToggleAction.actionPerformed(DiffRequestProcessor.java:654)at com.intellij.openapi.actionSystem.ex.ActionUtil.performActionDumbAware(ActionUtil.java:282)at com.intellij.openapi.actionSystem.ex.ActionUtil.performActionDumbAwareWithCallbacks(ActionUtil.java:276)at com.intellij.ui.popup.ActionPopupStep.performAction(ActionPopupStep.java:224)at com.intellij.ui.popup.ActionPopupStep.performAction(ActionPopupStep.java:214)at com.intellij.ui.popup.ActionPopupStep.lambda$onChosen$2(ActionPopupStep.java:208)at com.intellij.openapi.application.TransactionGuardImpl.performUserActivity(TransactionGuardImpl.java:94)at com.intellij.ui.popup.AbstractPopup.lambda$dispose$16(AbstractPopup.java:1464)at com.intellij.util.ui.UIUtil.invokeLaterIfNeeded(UIUtil.java:2254)at com.intellij.ide.IdeEventQueue.ifFocusEventsInTheQueue(IdeEventQueue.java:188)at com.intellij.ide.IdeEventQueue.executeWhenAllFocusEventsLeftTheQueue(IdeEventQueue.java:140)at com.intellij.openapi.wm.impl.FocusManagerImpl.doWhenFocusSettlesDown(FocusManagerImpl.java:178)at com.intellij.openapi.wm.impl.IdeFocusManagerImpl.doWhenFocusSettlesDown(IdeFocusManagerImpl.java:36)at com.intellij.ui.popup.AbstractPopup.dispose(AbstractPopup.java:1460)at com.intellij.ui.popup.WizardPopup.dispose(WizardPopup.java:158)at com.intellij.ui.popup.list.ListPopupImpl.dispose(ListPopupImpl.java:326)at com.intellij.ui.popup.PopupFactoryImpl$ActionGroupPopup.dispose(PopupFactoryImpl.java:304)at com.intellij.openapi.util.ObjectNode.lambda$execute$0(ObjectNode.java:111)at com.intellij.openapi.util.ObjectTree.executeActionWithRecursiveGuard(ObjectTree.java:193)at com.intellij.openapi.util.ObjectNode.execute(ObjectNode.java:71)at com.intellij.openapi.util.ObjectTree.executeAll(ObjectTree.java:141)at com.intellij.openapi.util.Disposer.dispose(Disposer.java:130)at com.intellij.openapi.util.Disposer.dispose(Disposer.java:120)at com.intellij.ui.popup.WizardPopup.disposeAllParents(WizardPopup.java:261)at com.intellij.ui.popup.list.ListPopupImpl.handleNextStep(ListPopupImpl.java:461)at com.intellij.ui.popup.list.ListPopupImpl._handleSelect(ListPopupImpl.java:415)at com.intellij.ui.popup.list.ListPopupImpl.handleSelect(ListPopupImpl.java:361)at com.intellij.ui.popup.PopupFactoryImpl$ActionGroupPopup.handleSelect(PopupFactoryImpl.java:324)at com.intellij.ui.popup.list.ListPopupImpl$MyMouseListener.mouseReleased(ListPopupImpl.java:526)at java.desktop/java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:298)at java.desktop/java.awt.Component.processMouseEvent(Component.java:6654)at java.desktop/javax.swing.JComponent.processMouseEvent(JComponent.java:3345)at com.intellij.ui.popup.list.ListPopupImpl$MyList.processMouseEvent(ListPopupImpl.java:583)at java.desktop/java.awt.Component.processEvent(Component.java:6419)at java.desktop/java.awt.Container.processEvent(Container.java:2263)at java.desktop/java.awt.Component.dispatchEventImpl(Component.java:5029)at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2321)at java.desktop/java.awt.Component.dispatchEvent(Component.java:4861)at java.desktop/java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4918)at java.desktop/java.awt.LightweightDispatcher.processMouseEvent(Container.java:4547)at java.desktop/java.awt.LightweightDispatcher.dispatchEvent(Container.java:4488)at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2307)at java.desktop/java.awt.Window.dispatchEventImpl(Window.java:2773)at java.desktop/java.awt.Component.dispatchEvent(Component.java:4861)at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:778)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.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:95)at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:751)at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:749)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:748)at com.intellij.ide.IdeEventQueue.defaultDispatchEvent(IdeEventQueue.java:971)at com.intellij.ide.IdeEventQueue.dispatchMouseEvent(IdeEventQueue.java:906)at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:838)at com.intellij.ide.IdeEventQueue.lambda$dispatchEvent$8(IdeEventQueue.java:452)at com.intellij.openapi.progress.impl.CoreProgressManager.computePrioritized(CoreProgressManager.java:744)at com.intellij.ide.IdeEventQueue.lambda$dispatchEvent$9(IdeEventQueue.java:451)at com.intellij.openapi.application.impl.ApplicationImpl.runIntendedWriteActionOnCurrentThread(ApplicationImpl.java:802)at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:505)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)

Remove old behavior

Since #11 has been implemented, the old behavior (opening diff view clicking alt+F7) can be deleted.

After deleting check wheter #4 can be closed because it should not be required.

diff should be shown between two images

currently the diff will be shown if action is executed. It would be better if the diff would be displayed in the diff view between "old image" and "new image".

That was my first approach but I did not found the place where it needs to be configured.

dont crash if size of images differ

if two images have different sizes the plugin crashes . This should not happen. Instead: red and green pixel should be shown for missing or additional pixels.

Plugin is not functional in IntelliJ IDEA 2021.1

Describe the bug
Can't get the plugin to work in IntelliJ IDEA 2021.1. The diff window doesn't have any ImageDiff controls.

To Reproduce

  • Install the Image Diff plugin
  • Restart IDEA
  • Open the "Commit" panel (Alt+0), select a changed image and press Ctrl+D to view the diff.

Expected behavior
The diff window has the ImageDiff controls (dropdown, middle diff image)

Screenshots

diff

plugins

Desktop (please complete the following information):

Ubuntu Linux 20.04
IntelliJ IDEA 2021.1 (Ultimate Edition)
Build #IU-211.6693.111, built on April 6, 2021
ImageDiff plugin v1.9.0

Shows the diff only for the first file in a merge request

Describe the bug
I am using the plugin to find changes in merge requests. I am opening the diffs from Jetbrains Space integration panel.
When I open the first changed image file, it shows the diff. But not for the following few. There is no diff only the label "Unsupported DiffViewer" and a link "Reload". Reload link does nothing.

When I close the tab entirely, and open it again, it does show the diff for the second file. So that is what I do now for every file, but it is annoying.

To Reproduce

  • have multiple changed image files in a merge request on Jetbrains Space.
  • use JetBrains Space integration tab. (maybe other diffs are also broken, I don't know)
  • double click on the first changed image file (the diff should appear eventually)
  • then on the second (no diff)

Expected behavior
A diff should be available for all files without reopening the tab.

Desktop (please complete the following information):

  • Which jetbrains product did you use - Webstorm
  • Which version of the product did you use
WebStorm 2023.2.5
Build #WS-232.10227.9, built on November 11, 2023
Licensed to Mikhail Turkeev
You have a perpetual fallback license for this version.
Subscription is active until September 23, 2024.
Runtime version: 17.0.9+7-b1000.46 amd64
VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o.
Linux 6.2.0-37-generic
GC: G1 Young Generation, G1 Old Generation
Memory: 2048M
Cores: 32
Registry:
    ide.experimental.ui=true

Non-Bundled Plugins:
    OpenGL-Plugin (1.0.72)
    de.ehmkah.projects.imgdiff (1.11.0)

Current Desktop: ubuntu:GNOME

Support darkula mode

Plugin should look dark in darkula-mode.

  • window must be viewable
  • image for clicking must be darker

endless loading when using in git commit diff

Describe the bug
A clear and concise description of what the bug is.
When using imgdiff for comparing local changes in git, the comparision itself works, but intellij pops up permanently a loading bar (screenshot) so that Intellij is almost unusable.

To Reproduce
Open an image with local changes in the diff editor

Expected behavior
It should just load once and then display the changes.

Screenshots
Sorry for the splitted screenshot. I don't want to expose the actual content.
grafik
grafik

Desktop (please complete the following information):

  • Which jetbrains product did you use: Ultimate Edition
  • Which version of the product did you use: Build #IU-222.4167.29, built on September 13, 2022
  • running on ubuntu 22.04

Additional context
Stacktrace from the IntelliJ console:

``` java.lang.Throwable: AWT events are prohibited inside MyChangeDiffToolAction#update@DiffToolbar (com.intellij.diff.impl.DiffRequestProcessor$MyChangeDiffToolAction); got java.awt.event.InvocationEvent[INVOCATION_DEFAULT,runnable=javax.swing.RepaintManager$ProcessingRunnable@51cf846b,notifier=null,catchExceptions=false,when=1665578179683] on sun.awt.X11.XToolkit@2f89df35 at com.intellij.openapi.diagnostic.Logger.error(Logger.java:184) at com.intellij.ide.ProhibitAWTEvents.dispatch(ProhibitAWTEvents.java:41) at com.intellij.ide.IdeEventQueue.runCustomProcessors(IdeEventQueue.java:512) at com.intellij.ide.IdeEventQueue.lambda$dispatchEvent$8(IdeEventQueue.java:470) at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:488) at com.intellij.ide.IdeEventQueue.pumpEventsForHierarchy(IdeEventQueue.java:965) at com.intellij.openapi.progress.util.ProgressWindow.lambda$startBlocking$4(ProgressWindow.java:211) at com.intellij.openapi.application.impl.ApplicationImpl.runUnlockingIntendedWrite(ApplicationImpl.java:907) at com.intellij.openapi.progress.util.ProgressWindow.startBlocking(ProgressWindow.java:206) at com.intellij.openapi.progress.impl.ProgressRunner.lambda$execFromEDT$6(ProgressRunner.java:329) at java.base/java.util.concurrent.CompletableFuture.uniAcceptNow(CompletableFuture.java:757) at java.base/java.util.concurrent.CompletableFuture.uniAcceptStage(CompletableFuture.java:735) at java.base/java.util.concurrent.CompletableFuture.thenAccept(CompletableFuture.java:2182) at com.intellij.openapi.progress.impl.ProgressRunner.execFromEDT(ProgressRunner.java:326) at com.intellij.openapi.progress.impl.ProgressRunner.submit(ProgressRunner.java:267) at com.intellij.openapi.progress.impl.ProgressRunner.submitAndGet(ProgressRunner.java:193) at com.intellij.openapi.application.impl.ApplicationImpl.runProcessWithProgressSynchronously(ApplicationImpl.java:479) at com.intellij.openapi.progress.impl.CoreProgressManager.runProcessWithProgressSynchronously(CoreProgressManager.java:537) at com.intellij.openapi.progress.impl.ProgressManagerImpl.runProcessWithProgressSynchronously(ProgressManagerImpl.java:85) at com.intellij.openapi.progress.impl.CoreProgressManager.runProcessWithProgressSynchronously(CoreProgressManager.java:266) at git4idea.index.vfs.GitIndexVirtualFile.contentsToByteArray(GitIndexVirtualFile.kt:91) at git4idea.index.vfs.GitIndexVirtualFile.getInputStream(GitIndexVirtualFile.kt:84) at de.ehmkah.projects.imgdiff.ImgDiffBaseBinaryDiffToolKt.isValidImage(ImgDiffBaseBinaryDiffTool.kt:95) at de.ehmkah.projects.imgdiff.ImgDiffBaseBinaryDiffTool.canShow(ImgDiffBaseBinaryDiffTool.kt:81) at com.intellij.diff.impl.DiffRequestProcessor.filterFittedTools(DiffRequestProcessor.java:275) at com.intellij.diff.impl.DiffRequestProcessor.getAvailableFittedTools(DiffRequestProcessor.java:266) at com.intellij.diff.impl.DiffRequestProcessor$MyChangeDiffToolAction.update(DiffRequestProcessor.java:800) at com.intellij.openapi.actionSystem.ex.ActionUtil.lambda$performDumbAwareUpdate$0(ActionUtil.java:150) at com.intellij.openapi.actionSystem.ex.ActionUtil.performDumbAwareUpdate(ActionUtil.java:173) at com.intellij.openapi.actionSystem.impl.ActionUpdater.doUpdate(ActionUpdater.java:660) at com.intellij.openapi.actionSystem.impl.ActionUpdater.lambda$updateActionReal$4(ActionUpdater.java:128) at com.intellij.openapi.actionSystem.impl.ActionUpdater.lambda$computeOnEdt$6(ActionUpdater.java:211) at com.intellij.openapi.progress.ProgressManager.lambda$runProcess$0(ProgressManager.java:66) at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$runProcess$2(CoreProgressManager.java:188) at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$executeProcessUnderProgress$12(CoreProgressManager.java:608) at com.intellij.openapi.progress.impl.CoreProgressManager.registerIndicatorAndRun(CoreProgressManager.java:683) at com.intellij.openapi.progress.impl.CoreProgressManager.computeUnderProgress(CoreProgressManager.java:639) at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:607) at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:60) at com.intellij.openapi.progress.impl.CoreProgressManager.runProcess(CoreProgressManager.java:175) at com.intellij.openapi.progress.ProgressManager.runProcess(ProgressManager.java:66) at com.intellij.openapi.actionSystem.impl.ActionUpdater.lambda$computeOnEdt$7(ActionUpdater.java:207) at com.intellij.openapi.actionSystem.impl.ActionUpdateEdtExecutor.lambda$computeOnEdt$0(ActionUpdateEdtExecutor.java:45) at com.intellij.openapi.application.TransactionGuardImpl$1.run(TransactionGuardImpl.java:194) at com.intellij.openapi.application.impl.ApplicationImpl.runIntendedWriteActionOnCurrentThread(ApplicationImpl.java:881) at com.intellij.openapi.application.impl.ApplicationImpl$3.run(ApplicationImpl.java:513) at com.intellij.openapi.application.impl.FlushQueue.doRun(FlushQueue.java:75) at com.intellij.openapi.application.impl.FlushQueue.runNextEvent(FlushQueue.java:118) at com.intellij.openapi.application.impl.FlushQueue.flushNow(FlushQueue.java:42) at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:318) at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:779) at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:730) at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:724) at java.base/java.security.AccessController.doPrivileged(AccessController.java:399) at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86) at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:749) at com.intellij.ide.IdeEventQueue.defaultDispatchEvent(IdeEventQueue.java:918) at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:766) at com.intellij.ide.IdeEventQueue.lambda$dispatchEvent$6(IdeEventQueue.java:450) at com.intellij.openapi.progress.impl.CoreProgressManager.computePrioritized(CoreProgressManager.java:791) at com.intellij.ide.IdeEventQueue.lambda$dispatchEvent$7(IdeEventQueue.java:449) at com.intellij.openapi.application.TransactionGuardImpl.performActivity(TransactionGuardImpl.java:105) at com.intellij.ide.IdeEventQueue.performActivity(IdeEventQueue.java:624) at com.intellij.ide.IdeEventQueue.lambda$dispatchEvent$8(IdeEventQueue.java:447) at com.intellij.openapi.application.impl.ApplicationImpl.runIntendedWriteActionOnCurrentThread(ApplicationImpl.java:881) at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:493) at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:207) at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128) at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117) at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113) at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105) at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:92) ```

Better error detection if one file is not an image

If one of the two compared images is corrupt a strange error.

Reproduce:

  • create an image
  • copy image
  • open image with hexeditor (and change something make the image corrupt)
  • compare both images with plugin (it crashes)

Solution:

  • nicer error information should be shown

nice image for plugin

show a nice icon for the plugin in the marketplace so developers that this plugin is fresh and give it a try.

IntelliJ 2021.2 and blinking mode

Hey,

a) seems like with version 2021.2 its not working any longer.
b) also it would be awesome, if blinking mode is not the default mode selected, because it causes a lot of performance issues for our employees, as it freezes ui for around 20 seconds. ( on windows and linux)

image

Cannot show diff with IntelliJ IDEA 2021.2.3

Describe the bug

Unable to view image differences with Original background or White background. Got 'Error: Cannot show diff' in the editor.

Additional context

In idea logs, the exceptions below is raised:

2021-10-21 09:54:47,906 [ 223297]  ERROR - diff.impl.DiffRequestProcessor - baseFile.parent must not be null 
java.lang.IllegalStateException: baseFile.parent must not be null
	at de.ehmkah.projects.imgdiff.ImgDiffVirtualFile.getParent(ImgDiffVirtualFile.kt:62)
	at com.intellij.openapi.roots.impl.RootIndex.getInfoForFile(RootIndex.java:627)
	at com.intellij.openapi.roots.impl.DirectoryIndexImpl.getInfoForFile(DirectoryIndexImpl.java:186)
	at com.intellij.openapi.roots.impl.FileIndexBase.getInfoForFileOrDirectory(FileIndexBase.java:96)
	at com.intellij.openapi.roots.impl.ProjectFileIndexImpl.getInfoForFileOrDirectory(ProjectFileIndexImpl.java:27)
	at com.intellij.openapi.roots.impl.ProjectFileIndexImpl.getModuleForFile(ProjectFileIndexImpl.java:100)
	at com.intellij.openapi.roots.impl.ProjectFileIndexImpl.getModuleForFile(ProjectFileIndexImpl.java:92)
	at com.intellij.openapi.module.ModuleUtilCore.findModuleForFile(ModuleUtilCore.java:72)
	at com.android.tools.idea.editors.manifest.ManifestEditorProvider.accept(ManifestEditorProvider.java:33)
	at com.intellij.openapi.fileEditor.impl.FileEditorProviderManagerImpl.lambda$getProviders$0(FileEditorProviderManagerImpl.java:51)
	at com.intellij.openapi.application.impl.ApplicationImpl.runReadAction(ApplicationImpl.java:854)
	at com.intellij.openapi.application.ReadAction.compute(ReadAction.java:61)
	at com.intellij.openapi.fileEditor.impl.FileEditorProviderManagerImpl.lambda$getProviders$1(FileEditorProviderManagerImpl.java:47)
	at com.intellij.util.SlowOperations.allowSlowOperations(SlowOperations.java:146)
	at com.intellij.openapi.fileEditor.impl.FileEditorProviderManagerImpl.getProviders(FileEditorProviderManagerImpl.java:47)
	at com.intellij.diff.tools.holders.BinaryEditorHolder$BinaryEditorHolderFactory.create(BinaryEditorHolder.java:93)
	at com.intellij.diff.tools.holders.BinaryEditorHolder$BinaryEditorHolderFactory.create(BinaryEditorHolder.java:82)
	at com.intellij.diff.tools.util.side.ThreesideDiffViewer.createEditorHolders(ThreesideDiffViewer.java:109)
	at com.intellij.diff.tools.util.side.ThreesideDiffViewer.<init>(ThreesideDiffViewer.java:63)
	at com.intellij.diff.tools.binary.ThreesideBinaryDiffViewer.<init>(ThreesideBinaryDiffViewer.java:29)
	at de.ehmkah.projects.imgdiff.ImgDiffBaseBinaryDiffTool.createImgDiffDiffViewer(ImgDiffBaseBinaryDiffTool.kt:59)
	at de.ehmkah.projects.imgdiff.ImgDiffBaseBinaryDiffTool.createComponent(ImgDiffBaseBinaryDiffTool.kt:28)
	at de.ehmkah.projects.imgdiff.ImgDiffBaseBinaryDiffTool.createComponent(ImgDiffBaseBinaryDiffTool.kt:19)
	at com.intellij.diff.impl.DiffRequestProcessor.createState(DiffRequestProcessor.java:269)
	at com.intellij.diff.impl.DiffRequestProcessor.lambda$doApplyRequest$4(DiffRequestProcessor.java:344)
	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.executeNonCancelableSection(CoreProgressManager.java:223)
	at com.intellij.diff.impl.DiffRequestProcessor.lambda$doApplyRequest$5(DiffRequestProcessor.java:338)
	at com.intellij.diff.util.DiffUtil.runPreservingFocus(DiffUtil.java:757)
	at com.intellij.diff.impl.DiffRequestProcessor.doApplyRequest(DiffRequestProcessor.java:328)
	at com.intellij.diff.impl.DiffRequestProcessor.lambda$applyRequest$3(DiffRequestProcessor.java:310)
	at com.intellij.openapi.wm.impl.FocusManagerImpl.lambda$doWhenFocusSettlesDown$3(FocusManagerImpl.java:184)
	at com.intellij.util.ui.EdtInvocationManager.invokeLaterIfNeeded(EdtInvocationManager.java:101)
	at com.intellij.ide.IdeEventQueue.ifFocusEventsInTheQueue(IdeEventQueue.java:186)
	at com.intellij.ide.IdeEventQueue.executeWhenAllFocusEventsLeftTheQueue(IdeEventQueue.java:140)
	at com.intellij.openapi.wm.impl.FocusManagerImpl.doWhenFocusSettlesDown(FocusManagerImpl.java:175)
	at com.intellij.openapi.wm.impl.FocusManagerImpl.doWhenFocusSettlesDown(FocusManagerImpl.java:181)
	at com.intellij.openapi.wm.impl.IdeFocusManagerImpl.doWhenFocusSettlesDown(IdeFocusManagerImpl.java:41)
	at com.intellij.diff.impl.DiffRequestProcessor.applyRequest(DiffRequestProcessor.java:318)
	at com.intellij.diff.impl.DiffRequestProcessor.applyRequest(DiffRequestProcessor.java:297)
	at com.intellij.diff.impl.CacheDiffRequestProcessor.updateRequest(CacheDiffRequestProcessor.java:108)
	at com.intellij.diff.impl.CacheDiffRequestProcessor.updateRequest(CacheDiffRequestProcessor.java:91)
	at com.intellij.diff.impl.DiffRequestProcessor.updateRequest(DiffRequestProcessor.java:180)
	at com.intellij.diff.impl.DiffRequestProcessor$DiffToolToggleAction.actionPerformed(DiffRequestProcessor.java:683)
	at com.intellij.openapi.actionSystem.ex.ActionUtil.lambda$performActionDumbAwareWithCallbacks$4(ActionUtil.java:240)
	at com.intellij.openapi.actionSystem.ex.ActionUtil.performDumbAwareWithCallbacks(ActionUtil.java:261)
	at com.intellij.openapi.actionSystem.ex.ActionUtil.performActionDumbAwareWithCallbacks(ActionUtil.java:240)
	at com.intellij.ui.popup.ActionPopupStep.performAction(ActionPopupStep.java:252)
	at com.intellij.ui.popup.ActionPopupStep.performAction(ActionPopupStep.java:242)
	at com.intellij.ui.popup.ActionPopupStep.lambda$onChosen$2(ActionPopupStep.java:228)
	at com.intellij.openapi.application.TransactionGuardImpl.performUserActivity(TransactionGuardImpl.java:94)
	at com.intellij.ui.popup.AbstractPopup.lambda$dispose$18(AbstractPopup.java:1503)
	at com.intellij.util.ui.EdtInvocationManager.invokeLaterIfNeeded(EdtInvocationManager.java:101)
	at com.intellij.ide.IdeEventQueue.ifFocusEventsInTheQueue(IdeEventQueue.java:186)
	at com.intellij.ide.IdeEventQueue.executeWhenAllFocusEventsLeftTheQueue(IdeEventQueue.java:140)
	at com.intellij.openapi.wm.impl.FocusManagerImpl.doWhenFocusSettlesDown(FocusManagerImpl.java:175)
	at com.intellij.openapi.wm.impl.IdeFocusManagerImpl.doWhenFocusSettlesDown(IdeFocusManagerImpl.java:36)
	at com.intellij.ui.popup.AbstractPopup.dispose(AbstractPopup.java:1500)
	at com.intellij.ui.popup.WizardPopup.dispose(WizardPopup.java:163)
	at com.intellij.ui.popup.list.ListPopupImpl.dispose(ListPopupImpl.java:337)
	at com.intellij.ui.popup.PopupFactoryImpl$ActionGroupPopup.dispose(PopupFactoryImpl.java:287)
	at com.intellij.openapi.util.ObjectTree.runWithTrace(ObjectTree.java:136)
	at com.intellij.openapi.util.ObjectTree.executeAll(ObjectTree.java:166)
	at com.intellij.openapi.util.Disposer.dispose(Disposer.java:155)
	at com.intellij.openapi.util.Disposer.dispose(Disposer.java:143)
	at com.intellij.ui.popup.WizardPopup.disposeAllParents(WizardPopup.java:266)
	at com.intellij.ui.popup.list.ListPopupImpl.handleNextStep(ListPopupImpl.java:444)
	at com.intellij.ui.popup.list.ListPopupImpl._handleSelect(ListPopupImpl.java:416)
	at com.intellij.ui.popup.list.ListPopupImpl.handleSelect(ListPopupImpl.java:372)
	at com.intellij.ui.popup.PopupFactoryImpl$ActionGroupPopup.handleSelect(PopupFactoryImpl.java:304)
	at com.intellij.ui.popup.list.ListPopupImpl$MyMouseListener.mouseReleased(ListPopupImpl.java:629)
	at java.desktop/java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:298)
	at java.desktop/java.awt.Component.processMouseEvent(Component.java:6652)
	at java.desktop/javax.swing.JComponent.processMouseEvent(JComponent.java:3345)
	at com.intellij.ui.popup.list.ListPopupImpl$MyList.processMouseEvent(ListPopupImpl.java:706)
	at java.desktop/java.awt.Component.processEvent(Component.java:6417)
	at java.desktop/java.awt.Container.processEvent(Container.java:2263)
	at java.desktop/java.awt.Component.dispatchEventImpl(Component.java:5027)
	at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2321)
	at java.desktop/java.awt.Component.dispatchEvent(Component.java:4859)
	at java.desktop/java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4918)
	at java.desktop/java.awt.LightweightDispatcher.processMouseEvent(Container.java:4547)
	at java.desktop/java.awt.LightweightDispatcher.dispatchEvent(Container.java:4488)
	at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2307)
	at java.desktop/java.awt.Window.dispatchEventImpl(Window.java:2784)
	at java.desktop/java.awt.Component.dispatchEvent(Component.java:4859)
	at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:778)
	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.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:95)
	at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:751)
	at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:749)
	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:748)
	at com.intellij.ide.IdeEventQueue.defaultDispatchEvent(IdeEventQueue.java:885)
	at com.intellij.ide.IdeEventQueue.dispatchMouseEvent(IdeEventQueue.java:814)
	at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:751)
	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:492)
	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)
2021-10-21 09:54:47,907 [ 223298]  ERROR - diff.impl.DiffRequestProcessor - IntelliJ IDEA 2021.2.3  Build #IU-212.5457.46 
2021-10-21 09:54:47,907 [ 223298]  ERROR - diff.impl.DiffRequestProcessor - JDK: 11.0.12; VM: OpenJDK 64-Bit Server VM; Vendor: JetBrains s.r.o. 
2021-10-21 09:54:47,907 [ 223298]  ERROR - diff.impl.DiffRequestProcessor - OS: Linux 
2021-10-21 09:54:47,908 [ 223299]  ERROR - diff.impl.DiffRequestProcessor - Plugin to blame: Image Diff version: 1.7.0 
2021-10-21 09:54:49,130 [ 224521]   WARN - ctionSystem.impl.ActionUpdater - Slow (292 ms) `com.intellij.diff.impl.DiffRequestProcessor$MyChangeDiffToolAction#update`. Consider speeding it up and/or implementing UpdateInBackground. 

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.