What is the proper way to IIORegistry.registerServiceProvider

已回答
I want to register a ImageReaderSpi. Here is my code. I must set preload="true". But IDE said I cannot use this outside IntelliJ.

 

 

```xml
<extensions defaultExtensionNs="com.intellij">
    <fileType name="Image" extensions="qoi"/>
    <applicationService serviceImplementation="io.github.xiaozhuai.jetbrains.qoi.QOIMetadataRegistrar" preload="true"/>
</extensions>
```

 

```java
package io.github.xiaozhuai.jetbrains.qoi;

 

import javax.imageio.spi.IIORegistry;
import javax.imageio.spi.ImageReaderSpi;
import javax.imageio.spi.ImageWriterSpi;

 

public class QOIMetadataRegistrar {
    public QOIMetadataRegistrar() {
        ensureQoiRegistered();
    }

 

    public static void ensureQoiRegistered() {
        IIORegistry defaultInstance = IIORegistry.getDefaultInstance();
        defaultInstance.registerServiceProvider(new QOIImageReaderSpi(), ImageReaderSpi.class);
        defaultInstance.registerServiceProvider(new QOIImageWriterSpi(), ImageWriterSpi.class);
    }
}
```
0

Hi,

Please consider delaying loading these classes until the first usage. This is the recommended approach.

If you still want to load it as soon as possible, consider using PreloadingActivity:
https://upsource.jetbrains.com/idea-ce/file/idea-ce-6ed4281aa53e1672d2e5870243c6606bb48afc84/platform/ide-core/src/com/intellij/openapi/application/PreloadingActivity.java

0

Thanks for your suggestion! I succeed using PreloadingActivity with require-restart="true"

0

请先登录再写评论。