camork / file-expander-plugin Goto Github PK
View Code? Open in Web Editor NEWA IntelliJ plugin that can explore archive-based file in project view
License: GNU General Public License v3.0
A IntelliJ plugin that can explore archive-based file in project view
License: GNU General Public License v3.0
This issue causes a big headache on Windows (Linux environment is fine).
As we all know, on Windows, unlike Linux, you cannot delete file or change it in any way if it is still open somewhere else.
In my build I generate a tarball, which I want to examine with this plugin. It comes very handy. However, after that I cannot rebuild, or remove the file. I cannot even remove it using IntelliJ itself. Closing only the current project window does not help. The only workaround is to close the whole IntelliJ app. Very annoying.
I understand that keeping the file open might be intentional, to optimize access to it, but maybe it is possible to provide some enhancements.
Here is a couple of ideas:
Is your feature request related to a problem? Please describe.
I have trouble trying to figure out the status of a jar file in the VCS, if is modified, added or not yet added to the VCS.
Describe the solution you'd like
It would help if the color of the filename in Project Explorer reflects the status in VCS as like it shows without using the plugin
Hey @Camork, I came across this other plugin on the JetBrains Marketplace that looks like an exact replica of yours:
https://plugins.jetbrains.com/plugin/19799-file-expander2
Nearly identical description, same links to your repo, but a different author/vendor. It raised a red flag to me as someone trying to impersonate your plugin.
Hi! Following a webinar on gradle kotlin dsl I noticed that they were able to browse zip files in Intellij IDEA, which I couldn't. I quickly found your plugin but noticed something odd. When browsing the zip file, there is a folder not showing up (webinar-app/bin/
in my case), which shows up using zipinfo on the terminal.
If I go into my build script and specify a different name like bin2
, I see it:
Am I missing something obvious here, or is this a bug?
Using Intellij IDEA 2020.2 Ultimate and File Expander 4.51.
the inactive archives should be unreferenced and closed.
Describe the bug
This plugin now creates a duplicate toolbar in PyCharm. It seems to be the culprit because the duplicate toolbar disappears if I disable all downloaded plugins and reappears if I re-enable just this one.
https://github.com/Camork/file-expander-plugin/blob/master/build.gradle#L37 defines '173' but plugin declares com.intellij.fileType
EP in way which is available only in 2019.2 and later, see https://plugins.jetbrains.com/docs/intellij/registering-file-type.html#registration
Great support. Works nicely with tar & tar.gz. Would you be willing to also support tgz extension? It would need to do exactly the same as tar.gz does.
Describe the bug
A clear and concise description of what the bug is.
Apparently plugin doesn't work for latest version of IDEA.
Enable/Disable doesn't help as well as Caches invalidation
Will not let me expand .aar files must rename them to .zip or .jar
Hi,
Would it be possible to support Microsoft OOXML files in general, and .epc
files in particular?
These files are regular .zip
files, with various content, and domain specific XML.
Describe the bug
.war files are not being expanded. If renamed to .jar, the file is expanded in the ide.
Describe the bug
(This is not a bug, it's a feature request, I just could not find a way to submit that)
I'm using PyCharm where I'm building .whl (wheel) packages. At the moment .whl is not supported by your plugin even though it's just a .zip file:
$ file my_pkg-0.0.7-py3-none-any.whl
my_pkg-0.0.7-py3-none-any.whl: Zip archive data, at least v2.0 to extract
It would be great if this plugin supports detecting ZIP files by using of a library similar to libmagic
or at least allowed editing a list with custom extensions, like in this case it would be [".whl"]
Thank you!
In IntelliJ 2024, this started appearing:
com.intellij.diagnostic.PluginException: ActionUpdateThread.OLD_EDT
is deprecated and going to be removed soon. 'com.github.camork.action.DecompileJarAction' must override getActionUpdateThread
and chose EDT or BGT. See ActionUpdateThread javadoc. [Plugin: com.github.camork.fileExpander]
at com.intellij.diagnostic.PluginProblemReporterImpl.createPluginExceptionByClass(PluginProblemReporterImpl.java:23)
at com.intellij.diagnostic.PluginException.createByClass(PluginException.java:90)
at com.intellij.diagnostic.PluginException.reportDeprecatedUsage(PluginException.java:125)
at com.intellij.openapi.actionSystem.ActionUpdateThreadAware.getActionUpdateThread(ActionUpdateThreadAware.java:21)
at com.intellij.openapi.actionSystem.AnAction.getActionUpdateThread(AnAction.java:199)
Describe the bug
I don't have the option anymore for expanding .tgz files after upgrading my IntelliJ to 2022.3. I already tried reinstalling the plugin without success.
IntelliJ IDEA 2022.3 (Community Edition)
Build #IC-223.7571.182, built on November 29, 2022
Runtime version: 17.0.5+1-b653.14 x86_64
VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o.
Is your feature request related to a problem? Please describe.
Describe the solution you'd like
It should expand like any other archive
Additional context
I found #13 and it does work if the whl file is not archived but not if it is.
Describe the bug
If I have the plugin enabled, select a file and press CTRL+C and press CTRL+V in a folder to copy it to the desired location nothing appears, the clipboard is empty. The same happens if you use CTRL+X to cut and CTRL+V to paste.
The same behavior can be obtained if you right click a .jar and select "Copy" and "Paste" in a different folder.
Disabling the plugin makes everything work again.
If the gzip file doesn't include the filename in the header (e.g. FNAME metadata flag), then the contents of the gzip file can't be read with this plugin. As an example, you can run the following:
echo "Test compressed data" > test.txt
gzip -c test.txt > test_with_fname.txt.gz
gzip -cn test.txt > test_without_fname.txt.gz
The plugin successfully allows you to view test_with_fname.txt.gz
but not test_without_fname.txt.gz
. This was observed on the version 2.3 using 2023.2.2 for the IDEs on Linux.
Describe the bug
Selecting .7z and .gz file types in solution explorer does nothing.
org.apache.commons.compress.PasswordRequiredException: Cannot read encrypted content from D:\github.com\LinWanCen\show-comment\build\distributions\show-comment-2.11.0.2023.11.17_00.26.7z without a password.
at org.apache.commons.compress.archivers.sevenz.AES256SHA256Decoder$1.init(AES256SHA256Decoder.java:130)
at org.apache.commons.compress.archivers.sevenz.AES256SHA256Decoder$1.read(AES256SHA256Decoder.java:159)
at java.base/java.io.DataInputStream.readUnsignedByte(DataInputStream.java:288)
at org.tukaani.xz.LZMA2InputStream.decodeChunkHeader(Unknown Source)
at org.tukaani.xz.LZMA2InputStream.read(Unknown Source)
at org.apache.commons.compress.utils.BoundedInputStream.read(BoundedInputStream.java:78)
at org.apache.commons.compress.utils.ChecksumVerifyingInputStream.read(ChecksumVerifyingInputStream.java:108)
at org.apache.commons.compress.archivers.sevenz.SevenZFile.read(SevenZFile.java:992)
at org.apache.commons.compress.archivers.sevenz.SevenZFile.read(SevenZFile.java:975)
at org.apache.commons.compress.archivers.sevenz.SevenZFile$read$1.call(Unknown Source)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:47)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:125)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:139)
at com.github.camork.util.ArchiveUtils.getEntryBytes(ArchiveUtils.groovy:48)
at com.github.camork.util.ArchiveUtils$getEntryBytes$0.call(Unknown Source)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:47)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:125)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:148)
at com.github.camork.filesystem.sevenzip.SevenZipFile$_getEntryBytes_closure1.doCall(SevenZipFile.groovy:33)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:568)
at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:107)
at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:323)
at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:274)
at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1035)
at groovy.lang.Closure.call(Closure.java:412)
at groovy.lang.Closure.call(Closure.java:428)
at org.codehaus.groovy.runtime.IOGroovyMethods.withCloseable(IOGroovyMethods.java:1607)
at org.codehaus.groovy.runtime.dgm$966.invoke(Unknown Source)
at org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite$PojoMetaMethodSiteNoUnwrapNoCoerce.invoke(PojoMetaMethodSite.java:247)
at org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite.call(PojoMetaMethodSite.java:56)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:47)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:125)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:139)
at com.github.camork.filesystem.sevenzip.SevenZipFile.getEntryBytes(SevenZipFile.groovy:32)
at com.github.camork.filesystem.IArchiveFile$getEntryBytes.call(Unknown Source)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:47)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:125)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:139)
at com.github.camork.filesystem.ArchiveHandlerBase.contentsToByteArray(ArchiveHandlerBase.groovy:52)
at com.intellij.openapi.vfs.impl.ArchiveHandler.getInputStream(ArchiveHandler.java:287)
at com.intellij.openapi.vfs.newvfs.ArchiveFileSystem.getInputStream(ArchiveFileSystem.java:216)
at com.intellij.openapi.vfs.newvfs.persistent.PersistentFSImpl.getInputStream(PersistentFSImpl.java:720)
at com.intellij.openapi.vfs.newvfs.impl.VirtualFileImpl.getInputStream(VirtualFileImpl.java:108)
at com.intellij.openapi.vfs.newvfs.impl.VirtualFileImpl$getInputStream$0.call(Unknown Source)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:47)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:125)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:130)
at com.github.camork.extensions.ArchiveTreeProvider$_modify_closure1.doCall(ArchiveTreeProvider.groovy:57)
at jdk.internal.reflect.GeneratedMethodAccessor2542.invoke(Unknown Source)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:568)
at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:107)
at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:323)
at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:274)
at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1035)
at groovy.lang.Closure.call(Closure.java:412)
at groovy.lang.Closure.call(Closure.java:428)
at org.codehaus.groovy.runtime.DefaultGroovyMethods.collect(DefaultGroovyMethods.java:3603)
at org.codehaus.groovy.runtime.DefaultGroovyMethods.collect(DefaultGroovyMethods.java:3588)
at org.codehaus.groovy.runtime.DefaultGroovyMethods.collect(DefaultGroovyMethods.java:3688)
at org.codehaus.groovy.runtime.dgm$101.invoke(Unknown Source)
at org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite$PojoMetaMethodSiteNoUnwrapNoCoerce.invoke(PojoMetaMethodSite.java:247)
at org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite.call(PojoMetaMethodSite.java:56)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:139)
at com.github.camork.extensions.ArchiveTreeProvider.modify(ArchiveTreeProvider.groovy:38)
at com.intellij.ide.util.treeView.AbstractTreeStructureBase.getChildElements(AbstractTreeStructureBase.java:49)
at com.intellij.ui.tree.StructureTreeModel.getValidChildren(StructureTreeModel.java:411)
at com.intellij.ui.tree.StructureTreeModel.validateChildren(StructureTreeModel.java:329)
at com.intellij.ui.tree.StructureTreeModel$Node.isModelLeaf(StructureTreeModel.java:584)
at com.intellij.ui.tree.StructureTreeModel.isLeaf(StructureTreeModel.java:365)
at com.intellij.ui.tree.LeafState.get(LeafState.java:62)
at com.intellij.ui.tree.AsyncTreeModel$CmdGetChildren.load(AsyncTreeModel.java:597)
at com.intellij.ui.tree.AsyncTreeModel$CmdGetChildren.getNode(AsyncTreeModel.java:570)
at com.intellij.ui.tree.AsyncTreeModel$Command.get(AsyncTreeModel.java:464)
at com.intellij.ui.tree.AsyncTreeModel$Command.get(AsyncTreeModel.java:430)
at com.intellij.util.concurrency.Invoker$Task.run(Invoker.java:306)
at com.intellij.openapi.application.impl.ApplicationImpl.tryRunReadAction(ApplicationImpl.java:1133)
at com.intellij.openapi.progress.util.ProgressIndicatorUtils.lambda$runInReadActionWithWriteActionPriority$0(ProgressIndicatorUtils.java:76)
at com.intellij.openapi.progress.util.ProgressIndicatorUtilService.runActionAndCancelBeforeWrite(ProgressIndicatorUtilService.java:63)
at com.intellij.openapi.progress.util.ProgressIndicatorUtils.runActionAndCancelBeforeWrite(ProgressIndicatorUtils.java:133)
at com.intellij.openapi.progress.util.ProgressIndicatorUtils.lambda$runWithWriteActionPriority$1(ProgressIndicatorUtils.java:114)
at com.intellij.openapi.progress.ProgressManager.lambda$runProcess$0(ProgressManager.java:71)
at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$runProcess$2(CoreProgressManager.java:186)
at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$executeProcessUnderProgress$13(CoreProgressManager.java:604)
at com.intellij.openapi.progress.impl.CoreProgressManager.registerIndicatorAndRun(CoreProgressManager.java:679)
at com.intellij.openapi.progress.impl.CoreProgressManager.computeUnderProgress(CoreProgressManager.java:635)
at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:603)
at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:61)
at com.intellij.openapi.progress.impl.CoreProgressManager.runProcess(CoreProgressManager.java:173)
at com.intellij.openapi.progress.ProgressManager.runProcess(ProgressManager.java:71)
at com.intellij.openapi.progress.util.ProgressIndicatorUtils.runWithWriteActionPriority(ProgressIndicatorUtils.java:111)
at com.intellij.openapi.progress.util.ProgressIndicatorUtils.runInReadActionWithWriteActionPriority(ProgressIndicatorUtils.java:76)
at com.intellij.util.concurrency.Invoker.invokeSafely(Invoker.java:188)
at com.intellij.util.concurrency.Invoker.lambda$offerSafely$0(Invoker.java:165)
at com.intellij.util.concurrency.Invoker$Background.lambda$offer$0(Invoker.java:433)
at com.intellij.util.concurrency.BoundedTaskExecutor.doRun(BoundedTaskExecutor.java:249)
at com.intellij.util.concurrency.BoundedTaskExecutor.access$200(BoundedTaskExecutor.java:31)
at com.intellij.util.concurrency.BoundedTaskExecutor$1.executeFirstTaskAndHelpQueue(BoundedTaskExecutor.java:227)
at com.intellij.util.ConcurrencyUtil.runUnderThreadName(ConcurrencyUtil.java:218)
at com.intellij.util.concurrency.BoundedTaskExecutor$1.run(BoundedTaskExecutor.java:215)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
at java.base/java.util.concurrent.Executors$PrivilegedThreadFactory$1$1.run(Executors.java:702)
at java.base/java.util.concurrent.Executors$PrivilegedThreadFactory$1$1.run(Executors.java:699)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)
at java.base/java.util.concurrent.Executors$PrivilegedThreadFactory$1.run(Executors.java:699)
at java.base/java.lang.Thread.run(Thread.java:840)
Describe the bug
When the jar package under the build folder is viewed through the File expander, the gradle clean command will fail because the jar package is in the occupied state.
Is your feature request related to a problem? Please describe.
.ear files (at least some file using zip or jar compression) are not expandables
Describe the solution you'd like
Provide the same behaviour as .jar or .zip files
Additional context
Add any other context or screenshots about the feature request here.
https://github.com/Camork/file-expander-plugin/blob/master/build.gradle#L3
update to 1.8.1 and always update to latest release to support building against latest IDE releases
Gradle 7.5.1, also keep current https://github.com/Camork/file-expander-plugin/blob/master/gradle/wrapper/gradle-wrapper.properties#L3
I have IntelliJ 22.3 Ultimate 223.7571.182 GA on Linux. Once I updated the plugin from version 2.0 to 2.1 the IDE would not even start. The Toolbox restart would automatically rollback the plugin to previous version and everything is back to normal.
Is your feature request related to a problem? Please describe.
I would like to have some kind of visual opportunity to determine whether jar or zip is included as a library.
Describe the solution you'd like
One of the solutions could be a custom icon on unconnected files as a library.
Additional context
Is your feature request related to a problem? Please describe.
There are other Java archives which are similar with JARs but have a different extension, such as NiFi Archive (NAR) files, but also others. It would be nice if the plugin would provide the expansion symbol on those too, and would allow the user to click and attempt to expand, like it does for JAR archives. This would improve compatibility with many more file formats which are JAR-related.
Describe the solution you'd like
It would be nice to be able to work with NAR files as if they were JAR files too.
Additional context
Nothing to add.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.