Back to Intellij Community

UnsafeOpenServiceCast

plugins/devkit/devkit-core/resources/inspectionDescriptions/UnsafeOpenServiceCast.html

2025.3-rc-2992 B
Original Source

Reports code that casts a service declared with open="true" to a more specific class than the service interface.

When a service is marked as "open" in its plugin.xml registration, it can be overridden by other plugins with a different implementation. Casting such a service to a specific implementation class is unsafe because the actual instance at runtime may be a different class, leading to ClassCastException.

Example:

<!-- plugin.xml -->
  <extensions defaultExtensionNs="com.intellij">
    <projectService serviceInterface="com.example.MyService"
                    serviceImplementation="com.example.MyServiceImpl"
                    open="true" />
  </extensions>
// Bad: Casting open service to specific implementation
  MyServiceImpl impl = (MyServiceImpl) project.getService(MyService.class);

Instead, use only the declared service interface:

// Good: Using the service interface
  MyService service = project.getService(MyService.class);