Loading a specific resource from a module must use class from module #5008
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Image following scenario:
A tool (e.g. IntelliJ plugin) uses
detekt-tooling
to run detekt.The tool does not include the detekt jars by default (no
implementation("detekt-core")
usage) but loads them dynamically.For example the user can specify the detekt version and plugin jars. The tool downloads
cli-all.jar
and the plugin jars, loads them via aURLClassLoader
, gets aDetektProvider.get(): Detekt
instance and runs detekt.Notice that the tool must use the
detekt-tooling
api which is not inside theURLClassLoader
(!).ExtensionSpec
was loaded via the AppClassLoader (ClassLoader which wants to load detekt dynamically where detekt-tooling is known).ExtensionSpec.javaClass.getResource
won't find thedefault-detekt-config.yml
file.Conclusion: when loading detekt core and all plugins dynamically detekt's modules are not allowed to use the
ClassLoader
fromdetekt-tooling
ordetekt-api
.