-
Notifications
You must be signed in to change notification settings - Fork 40
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Set proper File Origins for bundled plugins (#1121)
* Extract plugin class logic to separate function * Introduce a base class for plugin details * Introduce file origin provider: Allows to override file origin resolved by JARs and 'lib' directories * Use private modifier * Reorganize IDE File origin classes. Some origins might be aware about the IDE. Introduce a separate subclass to handle such origins. * Track bundled plugin metadata with origin * Allow fully finding plugin classes in explicit locations * Discover bundled plugin classes with properly set origins * Classes selector can be provided with explicit locations * Introduce default plugin class resolver with support for bundled plugins * Use functional style when mapping dependencies to resolvers * Use same plugin usage filter rules * Use exact origin in comparison
- Loading branch information
Showing
21 changed files
with
314 additions
and
124 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
1 change: 1 addition & 0 deletions
1
intellij-plugin-structure/structure-intellij-classes/build.gradle.kts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,4 +1,5 @@ | ||
dependencies { | ||
api(project(":structure-intellij")) | ||
api(project(":structure-classes")) | ||
api(project(":structure-ide-classes")) | ||
} |
10 changes: 10 additions & 0 deletions
10
...c/main/java/com/jetbrains/plugin/structure/intellij/classes/locator/FileOriginProvider.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
package com.jetbrains.plugin.structure.intellij.classes.locator | ||
|
||
import com.jetbrains.plugin.structure.classes.resolvers.FileOrigin | ||
import com.jetbrains.plugin.structure.intellij.plugin.IdePlugin | ||
import java.nio.file.Path | ||
|
||
fun interface FileOriginProvider { | ||
fun getFileOrigin(idePlugin: IdePlugin, pluginFile: Path): FileOrigin | ||
} | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
40 changes: 40 additions & 0 deletions
40
...java/com/jetbrains/plugin/structure/intellij/classes/plugin/BundledPluginClassesFinder.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,40 @@ | ||
package com.jetbrains.plugin.structure.intellij.classes.plugin | ||
|
||
import com.jetbrains.plugin.structure.classes.resolvers.FileOrigin | ||
import com.jetbrains.plugin.structure.classes.resolvers.Resolver | ||
import com.jetbrains.plugin.structure.ide.classes.IdeFileOrigin | ||
import com.jetbrains.plugin.structure.intellij.classes.locator.FileOriginProvider | ||
import com.jetbrains.plugin.structure.intellij.classes.locator.JarPluginLocator | ||
import com.jetbrains.plugin.structure.intellij.classes.locator.LibDirectoryLocator | ||
import com.jetbrains.plugin.structure.intellij.classes.locator.LocationKey | ||
import com.jetbrains.plugin.structure.intellij.plugin.IdePlugin | ||
import java.nio.file.Path | ||
|
||
class BundledPluginClassesFinder { | ||
companion object { | ||
val LOCATION_KEYS = listOf(BundledPluginJarKey, BundledPluginDirectoryKey) | ||
|
||
fun findPluginClasses( | ||
idePlugin: IdePlugin, | ||
additionalKeys: List<LocationKey> = emptyList() | ||
): IdePluginClassesLocations { | ||
return IdePluginClassesFinder.fullyFindPluginClassesInExplicitLocations(idePlugin, LOCATION_KEYS + additionalKeys) | ||
} | ||
} | ||
|
||
object BundledPluginJarKey : LocationKey { | ||
override val name: String = "Bundled Plugin JAR" | ||
override fun getLocator(readMode: Resolver.ReadMode) = JarPluginLocator(readMode, BundledPluginOriginator) | ||
} | ||
|
||
object BundledPluginDirectoryKey : LocationKey { | ||
override val name: String = "Bundled Plugin Directory" | ||
override fun getLocator(readMode: Resolver.ReadMode) = LibDirectoryLocator(readMode, BundledPluginOriginator) | ||
} | ||
|
||
object BundledPluginOriginator : FileOriginProvider { | ||
override fun getFileOrigin(idePlugin: IdePlugin, pluginFile: Path): FileOrigin { | ||
return IdeFileOrigin.BundledPlugin(pluginFile, idePlugin) | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
17 changes: 17 additions & 0 deletions
17
...c/main/java/com/jetbrains/pluginverifier/resolution/BundledPluginClassResolverProvider.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
package com.jetbrains.pluginverifier.resolution | ||
|
||
import com.jetbrains.plugin.structure.classes.resolvers.CompositeResolver | ||
import com.jetbrains.plugin.structure.classes.resolvers.Resolver | ||
import com.jetbrains.pluginverifier.filtering.ExternalBuildClassesSelector | ||
import com.jetbrains.pluginverifier.filtering.MainClassesSelector | ||
import com.jetbrains.pluginverifier.plugin.PluginDetails | ||
|
||
class BundledPluginClassResolverProvider { | ||
private val bundledClassesSelectors = listOf(MainClassesSelector.forBundledPlugin(), ExternalBuildClassesSelector()) | ||
|
||
fun getResolver(pluginDetails: PluginDetails): Resolver { | ||
val classLocations = pluginDetails.pluginClassesLocations | ||
return bundledClassesSelectors.flatMap { it.getClassLoader(classLocations) } | ||
.let { CompositeResolver.create(it) } | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
10 changes: 6 additions & 4 deletions
10
...er-intellij/src/main/java/com/jetbrains/pluginverifier/usages/SameOriginApiUsageFilter.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,12 +1,14 @@ | ||
package com.jetbrains.pluginverifier.usages | ||
|
||
import com.jetbrains.plugin.structure.classes.resolvers.FileOrigin | ||
import com.jetbrains.pluginverifier.results.location.ClassLocation | ||
|
||
class SameOriginApiUsageFilter : ClassLocationApiUsageFilter() { | ||
object SameOriginApiUsageFilter : ClassLocationApiUsageFilter() { | ||
override fun allow(usageLocation: ClassLocation, apiLocation: ClassLocation): Boolean { | ||
val usageOrigin = usageLocation.classFileOrigin | ||
val apiHostOrigin = apiLocation.classFileOrigin | ||
|
||
return usageOrigin == apiHostOrigin | ||
return invoke(usageOrigin, apiHostOrigin) | ||
} | ||
} | ||
|
||
operator fun invoke(usageOrigin: FileOrigin, apiHostOrigin: FileOrigin): Boolean = usageOrigin == apiHostOrigin | ||
} |
Oops, something went wrong.