Skip to content

Commit 092344b

Browse files
[eel] IJPL-217770: Decouple EelDescriptor and EelMachine through EelMachineProvider
GitOrigin-RevId: 407055c63d852a064a689679f49a0beb06b8d205
1 parent f344e3f commit 092344b

88 files changed

Lines changed: 565 additions & 357 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

java/compiler/impl/src/com/intellij/compiler/server/BuildManager.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -901,7 +901,7 @@ private void stopProcess(String projectPath, UUID sessionId, OSProcessHandler pr
901901
else {
902902
var optionsPath = PathManager.getOptionsDir().toString();
903903
if (canUseEel() && !EelPathUtils.isProjectLocal(project)) {
904-
optionsPath = asEelPath(OptionsDirectoryProcessor.transferOptionsToRemote(PathManager.getOptionsDir(), eelDescriptor)).toString();
904+
optionsPath = asEelPath(OptionsDirectoryProcessor.transferOptionsToRemote(PathManager.getOptionsDir(), project)).toString();
905905
}
906906
else {
907907
optionsPath = pathMapper.apply(optionsPath);

java/compiler/impl/src/com/intellij/compiler/server/OptionsDirectoryProcessor.kt

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,11 @@
44

55
package com.intellij.compiler.server
66

7+
import com.intellij.openapi.project.Project
78
import com.intellij.openapi.util.registry.Registry
8-
import com.intellij.platform.eel.EelDescriptor
9-
import com.intellij.platform.eel.provider.EelProvider.Companion.EP_NAME
9+
import com.intellij.platform.eel.provider.LocalEelMachine
10+
import com.intellij.platform.eel.provider.getEelDescriptor
11+
import com.intellij.platform.eel.provider.getEelMachine
1012
import com.intellij.platform.eel.provider.utils.EelPathUtils
1113
import com.intellij.platform.eel.provider.utils.EelPathUtils.transferLocalContentToRemote
1214
import java.nio.file.Files
@@ -15,15 +17,15 @@ import kotlin.io.path.*
1517

1618
private val ENVIRONMENT_ASSOCIATED_FILENAMES = setOf("jdk.table.xml", "applicationLibraries.xml")
1719

18-
internal fun transferOptionsToRemote(optionsDir: Path, eelDescriptor: EelDescriptor): Path {
20+
internal fun transferOptionsToRemote(optionsDir: Path, project: Project): Path {
21+
val eelDescriptor = project.getEelDescriptor()
22+
val machine = project.getEelMachine()
23+
1924
if (!Registry.`is`("ide.workspace.model.per.environment.model.separation", true)) {
2025
return transferLocalContentToRemote(optionsDir, EelPathUtils.TransferTarget.Temporary(eelDescriptor))
2126
}
22-
val machine = eelDescriptor.machine
23-
val internalName = EP_NAME.extensionList.firstNotNullOfOrNull { provider ->
24-
provider.getInternalName(machine)
25-
}
26-
if (internalName == null) {
27+
val internalName = machine.internalName
28+
if (internalName == LocalEelMachine.internalName) {
2729
return transferLocalContentToRemote(optionsDir, EelPathUtils.TransferTarget.Temporary(eelDescriptor))
2830
}
2931
val parentForProcessedOptionsDir = Files.createTempDirectory(internalName)

java/idea-ui/src/com/intellij/ide/projectWizard/ProjectWizardJdkComboBox.kt

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,11 @@ import com.intellij.openapi.util.registry.Registry
4242
import com.intellij.platform.eel.EelApi
4343
import com.intellij.platform.eel.EelDescriptor
4444
import com.intellij.platform.eel.provider.LocalEelDescriptor
45+
import com.intellij.platform.eel.provider.LocalEelMachine
4546
import com.intellij.platform.eel.provider.getEelDescriptor
47+
import com.intellij.platform.eel.provider.getResolvedEelMachine
4648
import com.intellij.platform.eel.provider.localEel
49+
import com.intellij.platform.eel.provider.toEelApi
4750
import com.intellij.platform.eel.provider.utils.EelPathUtils
4851
import com.intellij.platform.util.coroutines.childScope
4952
import com.intellij.pom.java.LanguageLevel
@@ -182,10 +185,9 @@ private fun ValidationInfoBuilder.validateJdkAndProjectCompatibility(intent: Any
182185
else -> null
183186
} ?: return null
184187

185-
val jdkRelatedMachine = Path.of(path).getEelDescriptor().machine
186-
val projectRelatedMachine = eelDescriptor.machine
187-
if (jdkRelatedMachine != projectRelatedMachine) {
188-
return error(JavaUiBundle.message("jdk.incompatible.location.error", jdkRelatedMachine.name, projectRelatedMachine.name))
188+
val projectRelatedMachine = eelDescriptor.getResolvedEelMachine() ?: LocalEelMachine
189+
if (!projectRelatedMachine.ownsPath(Path.of(path))) {
190+
return error(JavaUiBundle.message("jdk.incompatible.location.error", Path.of(path).getEelDescriptor().name, eelDescriptor.name))
189191
}
190192

191193
return null
@@ -513,7 +515,7 @@ private fun computeRegisteredSdks(key: EelDescriptor?): List<ExistingJdk> {
513515
.filter { jdk ->
514516
jdk.sdkType is JavaSdkType &&
515517
jdk.sdkType !is DependentSdkType &&
516-
(key == null || ProjectSdksModel.sdkMatchesEel(key, jdk))
518+
(key == null || ProjectSdksModel.sdkMatchesEel(key.getResolvedEelMachine() ?: LocalEelMachine, jdk))
517519
}
518520
.map { ExistingJdk(it) }
519521
}

java/idea-ui/src/com/intellij/jarRepository/JarRepositoryManager.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -672,7 +672,7 @@ static List<OrderRoot> copyAndRefreshFiles(@NotNull Project project, @NotNull Co
672672
final List<OrderRoot> result = new ArrayList<>();
673673
final VirtualFileManager manager = VirtualFileManager.getInstance();
674674
String repositoryPath = getJPSLocalMavenRepositoryForIdeaProject(project).toString();
675-
final EelMachine targetRepositoryMachine = EelProviderUtil.getEelDescriptor(Path.of(repositoryPath)).getMachine();
675+
final EelMachine targetRepositoryMachine = EelProviderUtil.getEelMachine(project);
676676
for (Artifact each : artifacts) {
677677
long ms = System.currentTimeMillis();
678678
try {
@@ -684,7 +684,7 @@ static List<OrderRoot> copyAndRefreshFiles(@NotNull Project project, @NotNull Co
684684
FileUtil.copy(repoFile, toFile);
685685
}
686686
}
687-
else if (!targetRepositoryMachine.equals(EelProviderUtil.getEelDescriptor(Path.of(each.getFile().getPath())).getMachine())) {
687+
else if (!targetRepositoryMachine.ownsPath(Path.of(each.getFile().getPath()))) {
688688
// if .m2 is located remotely, then we need to copy the files to the remote location
689689
String suffix = repoFile.getAbsolutePath().substring(repositoryPath.length());
690690
String actualPath = repositoryPath + suffix;

java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/EelSdkFilter.kt

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,19 +6,17 @@ package com.intellij.openapi.roots.ui.configuration
66
import com.intellij.openapi.project.Project
77
import com.intellij.openapi.projectRoots.Sdk
88
import com.intellij.openapi.roots.ui.configuration.projectRoot.ProjectSdksModel
9-
import com.intellij.platform.eel.provider.getEelDescriptor
9+
import com.intellij.platform.eel.provider.getEelMachine
1010
import java.util.function.Predicate
1111

1212
internal fun filterSdkByEel(project: Project): Predicate<Sdk> {
13-
val eelDescriptor = project.getEelDescriptor()
1413
return Predicate { sdk ->
15-
ProjectSdksModel.sdkMatchesEel(eelDescriptor, sdk)
14+
ProjectSdksModel.sdkMatchesEel(project.getEelMachine(), sdk)
1615
}
1716
}
1817

1918
internal fun filterSdkSuggestionByEel(project: Project): Predicate<SdkListItem.SuggestedItem> {
20-
val eelDescriptor = project.getEelDescriptor()
2119
return Predicate { item ->
22-
ProjectSdksModel.sdkMatchesEel(eelDescriptor, item.homePath)
20+
ProjectSdksModel.sdkMatchesEel(project.getEelMachine(), item.homePath)
2321
}
2422
}

java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/projectRoot/ModuleStructureConfigurable.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@
4949
import com.intellij.openapi.vfs.LocalFileSystem;
5050
import com.intellij.openapi.vfs.VirtualFile;
5151
import com.intellij.openapi.vfs.pointers.VirtualFilePointerManager;
52-
import com.intellij.platform.eel.EelDescriptor;
52+
import com.intellij.platform.eel.EelMachine;
5353
import com.intellij.platform.eel.provider.EelProviderUtil;
5454
import com.intellij.ui.navigation.Place;
5555
import com.intellij.util.PlatformIcons;
@@ -548,9 +548,9 @@ private void addModule(boolean anImport, boolean detectModuleBase) {
548548
modules = myContext.myModulesConfigurator.addNewModule(basePath);
549549
}
550550
if (modules != null && !modules.isEmpty()) {
551-
EelDescriptor eelDescriptor = Registry.is("java.home.finder.use.eel") ? EelProviderUtil.getEelDescriptor(myProject) : null;
551+
EelMachine eelMachine = Registry.is("java.home.finder.use.eel") ? EelProviderUtil.getEelMachine(myProject) : null;
552552
//new module wizard may add yet another SDK to the project
553-
myProjectStructureConfigurable.getProjectJdksModel().syncSdks(eelDescriptor);
553+
myProjectStructureConfigurable.getProjectJdksModel().syncSdks(eelMachine);
554554
for (Module module : modules) {
555555
addModuleNode(module);
556556
}

java/java-impl/src/com/intellij/openapi/projectRoots/impl/JavaSdkImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -516,7 +516,7 @@ public boolean isOfVersionOrHigher(@NotNull Sdk sdk, @NotNull JavaSdkVersion ver
516516
throw new IllegalArgumentException(jdkHomePath.toAbsolutePath() + " doesn't exist");
517517
}
518518

519-
Sdk jdk = SdkUtils.createSdkForEnvironment(ProjectJdkTable.getInstance(), jdkName, this, home);
519+
Sdk jdk = SdkUtils.createSdkForEnvironment(ProjectJdkTable.getInstance(), null, jdkName, this, home);
520520
SdkModificator sdkModificator = jdk.getSdkModificator();
521521

522522
sdkModificator.setHomePath(FileUtil.toSystemIndependentName(home));

platform/configuration-store-impl/src/ProjectStoreImpl.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ import com.intellij.openapi.util.registry.Registry
1919
import com.intellij.openapi.vfs.ReadonlyStatusHandler
2020
import com.intellij.openapi.vfs.VfsUtilCore
2121
import com.intellij.openapi.vfs.VirtualFile
22-
import com.intellij.platform.eel.provider.LocalEelMachine
22+
import com.intellij.platform.eel.provider.LocalEelDescriptor
2323
import com.intellij.platform.eel.provider.asEelPath
2424
import com.intellij.platform.settings.SettingsController
2525
import com.intellij.serviceContainer.ComponentManagerImpl
@@ -293,10 +293,10 @@ open class ProjectStoreImpl(final override val project: Project) : ComponentStor
293293
private fun getMachineWorkspacePath(storeDescriptor: ProjectStoreDescriptor): Path? {
294294
val projectPath = storeDescriptor.historicalProjectBasePath
295295
if (projectPath.fileSystem != FileSystems.getDefault()) return null
296-
val machine = projectPath.asEelPath().descriptor.machine
297-
if (machine is LocalEelMachine) return null
296+
val descriptor = projectPath.asEelPath().descriptor
297+
if (descriptor === LocalEelDescriptor) return null
298298
val pathHash = FileUtilRt.pathHashCode(projectBasePath.invariantSeparatorsPathString)
299-
return PathManager.getOriginalConfigDir().resolve("$CONFIG_WORKSPACE_DIR/${sanitizeFileName(machine.name)}.${pathHash.toHexString()}.xml")
299+
return PathManager.getOriginalConfigDir().resolve("$CONFIG_WORKSPACE_DIR/${sanitizeFileName(descriptor.name)}.${pathHash.toHexString()}.xml")
300300
}
301301
}
302302

platform/core-api/resources/META-INF/Core.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,8 @@
6363
<!--We need to define an extension point for Eel Provider here because it is used in GeneralCommandLine.
6464
If something unfortunate happens to GeneralCommandLine, we would need to remove this definition -->
6565
<extensionPoint name="eelProvider" interface="com.intellij.platform.eel.provider.EelProvider" dynamic="true"/>
66+
<extensionPoint name="eelMachineProvider"
67+
interface="com.intellij.platform.eel.provider.EelMachineProvider" dynamic="true"/>
6668
<extensionPoint name="iconProvider" interface="com.intellij.ide.IconProvider" dynamic="true"/>
6769
<extensionPoint name="inspection.basicVisitor" beanClass="com.intellij.psi.BasicInspectionVisitorBean" dynamic="true">
6870
<with attribute="class" implements="com.intellij.psi.PsiElementVisitor"/>

platform/eel-impl/src/com/intellij/platform/eel/impl/fs/EelFilesAccessorImpl.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import com.intellij.platform.eel.fs.readFile
99
import com.intellij.platform.eel.provider.LocalEelDescriptor
1010
import com.intellij.platform.eel.provider.asEelPath
1111
import com.intellij.platform.eel.provider.getEelDescriptor
12+
import com.intellij.platform.eel.provider.toEelApi
1213
import com.intellij.platform.eel.provider.utils.getOrThrowFileSystemException
1314
import com.intellij.util.io.toByteArray
1415
import kotlinx.coroutines.runBlocking

0 commit comments

Comments
 (0)