@@ -4,18 +4,13 @@ import ai.grazie.utils.WeakHashMap
4
4
import com.intellij.ide.AppLifecycleListener
5
5
import com.intellij.openapi.components.service
6
6
import com.intellij.openapi.diagnostic.Logger
7
- import com.intellij.openapi.extensions.ExtensionPointListener
8
- import com.intellij.openapi.extensions.PluginDescriptor
9
- import com.intellij.openapi.extensions.impl.ExtensionPointImpl
10
7
import com.intellij.openapi.util.io.FileAttributes
11
8
import com.intellij.openapi.vfs.VirtualFile
12
9
import com.intellij.openapi.vfs.VirtualFileManager
13
10
import com.intellij.openapi.vfs.VirtualFileSystem
14
11
import com.intellij.openapi.vfs.impl.local.LocalFileSystemImpl
15
12
import com.intellij.openapi.vfs.newvfs.impl.StubVirtualFile
16
13
import com.intellij.platform.workspace.storage.url.VirtualFileUrl
17
- import com.intellij.util.KeyedLazyInstance
18
- import com.intellij.util.KeyedLazyInstanceEP
19
14
import com.intellij.util.io.URLUtil
20
15
import java.io.*
21
16
import java.util.concurrent.ConcurrentHashMap
@@ -28,7 +23,9 @@ import kotlin.concurrent.withLock
28
23
29
24
class StartupListener : AppLifecycleListener {
30
25
override fun appFrameCreated (commandLineArgs : MutableList <String >) {
31
-
26
+ val point = VirtualFileSystem .EP_NAME .point
27
+ val extension = point.extensionList.find { it.instance is LocalFileSystemImpl && it.instance.javaClass.name.contains(" LocalFileSystemImpl" ) }
28
+ point.unregisterExtension(extension)
32
29
}
33
30
}
34
31
@@ -37,6 +34,10 @@ class FakeVirtualFile(val resPath: String, val vfile: VirtualFile, fs: WslVirtua
37
34
return resPath
38
35
}
39
36
37
+ override fun getLength (): Long {
38
+ return vfile.length
39
+ }
40
+
40
41
override fun getParent (): VirtualFile ? {
41
42
return vfile.parent
42
43
}
@@ -226,25 +227,7 @@ class WslVirtualFileSystem: LocalFileSystemImpl() {
226
227
private var wslSymlinksProviders: MutableMap <String , WslSymlinksProvider > = HashMap ()
227
228
228
229
init {
229
- val classNameToUnregister = LocalFileSystemImpl ::class .java.canonicalName
230
- VirtualFileSystem .EP_NAME .point.addExtensionPointListener(object : ExtensionPointListener <KeyedLazyInstance <VirtualFileSystem >> {
231
- override fun extensionRemoved (
232
- extension : KeyedLazyInstance <VirtualFileSystem >,
233
- pluginDescriptor : PluginDescriptor
234
- ) {
235
- val ext = (extension as ? KeyedLazyInstanceEP )
236
- if (ext != null ) {
237
- pluginDescriptor.isEnabled = false
238
- ext.implementationClass = null
239
- }
240
230
241
- }
242
- }, false , this )
243
- val point: ExtensionPointImpl <Any > = VirtualFileSystem .EP_NAME .point as ExtensionPointImpl <Any >
244
- point.unregisterExtensions({ className, adapter ->
245
- className != " com.intellij.openapi.vfs.impl.VirtualFileManagerImpl\$ VirtualFileSystemBean"
246
- || adapter.createInstance<KeyedLazyInstanceEP <VirtualFileSystem >>(point.componentManager)?.implementationClass != " com.intellij.openapi.vfs.impl.local.LocalFileSystemImpl" },
247
- /* stopAfterFirstMatch = */ true )
248
231
}
249
232
250
233
override fun getProtocol (): String {
@@ -264,26 +247,32 @@ class WslVirtualFileSystem: LocalFileSystemImpl() {
264
247
return symlkinkWsl?.let { virtualFile -> this .resolveSymLink(virtualFile) } ? : file.path
265
248
}
266
249
250
+ fun getFakeVirtualFile (file : VirtualFile ): VirtualFile {
251
+ val filePath = getRealPath(file.parent)
252
+ return FakeVirtualFile (filePath + " /" + file.name, file, this )
253
+ }
254
+
267
255
fun getRealVirtualFile (file : VirtualFile ): VirtualFile {
268
256
val symlkinkWsl = file.parents.find { it.isFromWSL() && this .getWslSymlinksProviders(file).isWslSymlink(it) }
269
257
val relative = symlkinkWsl?.path?.let { file.path.replace(it, " " ) }
270
- val resolved = symlkinkWsl?.let { virtualFile -> this .resolveSymLink(virtualFile)?.let { this .findFileByPath(it) } }
258
+ val resolved =
259
+ symlkinkWsl?.let { virtualFile -> this .resolveSymLink(virtualFile)?.let { this .findFileByPath(it) } }
271
260
val r = relative?.let { resolved?.findFileByRelativePath(it) } ? : file
272
261
return r
273
262
}
274
263
275
264
override fun getInputStream (vfile : VirtualFile ): InputStream {
276
- val file = this .getRealVirtualFile (vfile)
265
+ val file = this .getFakeVirtualFile (vfile)
277
266
return super .getInputStream(file)
278
267
}
279
268
280
269
override fun contentsToByteArray (vfile : VirtualFile ): ByteArray {
281
- val file = this .getRealVirtualFile (vfile)
270
+ val file = this .getFakeVirtualFile (vfile)
282
271
return super .contentsToByteArray(file)
283
272
}
284
273
285
274
override fun getOutputStream (vfile : VirtualFile , requestor : Any? , modStamp : Long , timeStamp : Long ): OutputStream {
286
- val file = this .getRealVirtualFile (vfile)
275
+ val file = this .getFakeVirtualFile (vfile)
287
276
return super .getOutputStream(file, requestor, modStamp, timeStamp)
288
277
}
289
278
0 commit comments