IDEA-271874 Devkit: add main plugin as implicit dependency for module.xml

GitOrigin-RevId: 5d65e4b51aa6564b6a90fe5baed203022196800b
This commit is contained in:
Yann Cébron
2021-06-22 15:53:15 +00:00
committed by intellij-monorepo-bot
parent 3a23300bba
commit bedab246b8
5 changed files with 60 additions and 11 deletions
@@ -34,6 +34,9 @@ public final class PluginIdDependenciesIndex extends PluginXmlIndexBase<String,
@NonNls
private static final String PLUGIN_ID_KEY_PREFIX = "___PLUGIN_ID___";
@NonNls
private static final String CONTENT_KEY_PREFIX = "___CONTENT_ID___";
@NotNull
@Override
public KeyDescriptor<String> getKeyDescriptor() {
@@ -72,7 +75,7 @@ public final class PluginIdDependenciesIndex extends PluginXmlIndexBase<String,
}
}
// new model
// new model: dependencies
final DependencyDescriptor dependencyDescriptor = plugin.getDependencies();
for (DependencyDescriptor.PluginDescriptor pluginDescriptor : dependencyDescriptor.getPlugin()) {
ContainerUtil.addIfNotNull(ids, pluginDescriptor.getId().getStringValue());
@@ -81,12 +84,20 @@ public final class PluginIdDependenciesIndex extends PluginXmlIndexBase<String,
ContainerUtil.addIfNotNull(ids, moduleDescriptor.getName().getStringValue());
}
// new model: content
for (ContentDescriptor.ModuleDescriptor descriptor : plugin.getContent().getModuleEntry()) {
final String value = descriptor.getName().getStringValue();
if (StringUtil.isNotEmpty(value)) {
ids.add(getContentIndexingKey(value));
}
}
return ContainerUtil.newHashMap(ids, Collections.nCopies(ids.size(), null));
}
@Override
public int getVersion() {
return 3;
return 4;
}
public static Set<String> getPluginAndDependsIds(Project project, Set<VirtualFile> files) {
@@ -117,11 +128,24 @@ public final class PluginIdDependenciesIndex extends PluginXmlIndexBase<String,
}
public static Collection<VirtualFile> findDependsTo(Project project, VirtualFile file) {
return FileBasedIndex.getInstance().getContainingFiles(NAME, getDependsIndexingKey(file.getName()),
GlobalSearchScopesCore.projectProductionScope(project));
final Collection<VirtualFile> dependsFiles =
FileBasedIndex.getInstance().getContainingFiles(NAME, getDependsIndexingKey(file.getName()),
GlobalSearchScopesCore.projectProductionScope(project));
final Collection<VirtualFile> contentFiles =
FileBasedIndex.getInstance().getContainingFiles(NAME, getContentIndexingKey(file.getNameWithoutExtension()),
GlobalSearchScopesCore.projectProductionScope(project));
Collection<VirtualFile> allFiles = new ArrayList<>(dependsFiles);
allFiles.addAll(contentFiles);
return allFiles;
}
private static String getDependsIndexingKey(@NotNull String filename) {
return FILENAME_KEY_PREFIX + filename;
}
private static String getContentIndexingKey(@NotNull String value) {
return CONTENT_KEY_PREFIX + value;
}
}
@@ -0,0 +1,8 @@
<idea-plugin>
<extensions defaultExtensionNs="com.intellij">
<!-- defined in ExtensionsDependencies.xml "main" plugin -->
<myPlugin.mainPlugin
implementation="java.lang.Integer"/>
</extensions>
</idea-plugin>
@@ -1,5 +1,4 @@
<idea-plugin>
<module value="com.intellij.myPlugin.module.dependency"/>
<extensionPoints>
<extensionPoint qualifiedName="com.intellij.myPlugin.module.dependency.fromModule"/>
</extensionPoints>
@@ -3,6 +3,10 @@
<vendor>JetBrains</vendor>
<version>1.0</version>
<content>
<module name="ExtensionsDependencies-content"/>
</content>
<dependencies>
<!-- ExtensionsDependencies-plugin.xml -->
<plugin id="com.intellij.myPlugin.plugin.dependency"/>
@@ -11,6 +15,10 @@
<module name="ExtensionsDependencies-module"/>
</dependencies>
<extensionPoints>
<extensionPoint name="mainPlugin" interface="java.lang.Number"/>
</extensionPoints>
<!-- ExtensionsDependencies-plugin.xml -->
<extensions defaultExtensionNs="com.intellij.myPlugin.plugin.dependency">
<fromPlugin/>
@@ -29,6 +29,7 @@ import com.intellij.psi.ElementDescriptionUtil
import com.intellij.psi.PsiElement
import com.intellij.psi.PsiField
import com.intellij.psi.PsiReference
import com.intellij.testFramework.IdeaTestUtil
import com.intellij.testFramework.PsiTestUtil
import com.intellij.testFramework.TestDataPath
import com.intellij.testFramework.builders.JavaModuleFixtureBuilder
@@ -196,15 +197,24 @@ class PluginXmlFunctionalTest extends JavaCodeInsightFixtureTestCase {
}
void testExtensionsDependencies() {
String moduleName = "ExtensionsDependencies-module"
String moduleDescriptorFilename = "ExtensionsDependencies-module.xml"
VirtualFile moduleRoot = myFixture.tempDirFixture.findOrCreateDir(moduleName)
myFixture.copyFileToProject(moduleDescriptorFilename, "/"+ moduleName+ "/" + moduleDescriptorFilename)
Module dependencyModule = PsiTestUtil.addModule(getProject(), StdModuleTypes.JAVA, moduleName, moduleRoot);
ModuleRootModificationUtil.addDependency(getModule(), dependencyModule);
addExtensionsModule("ExtensionsDependencies-module")
VirtualFile contentFile = addExtensionsModule("ExtensionsDependencies-content")
doHighlightingTest("ExtensionsDependencies.xml",
"ExtensionsDependencies-plugin.xml")
myFixture.configureFromExistingVirtualFile(contentFile)
doHighlightingTest()
}
private VirtualFile addExtensionsModule(String name) {
String moduleDescriptorFilename = name+ ".xml"
VirtualFile moduleRoot = myFixture.tempDirFixture.findOrCreateDir(name)
VirtualFile file = myFixture.copyFileToProject(moduleDescriptorFilename, "/" + name + "/" + moduleDescriptorFilename)
Module dependencyModule = PsiTestUtil.addModule(getProject(), StdModuleTypes.JAVA, name, moduleRoot);
ModuleRootModificationUtil.setModuleSdk(dependencyModule, IdeaTestUtil.getMockJdk17());
ModuleRootModificationUtil.addDependency(getModule(), dependencyModule);
return file
}
void testDependsHighlighting() {