mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-04-17 20:11:25 +07:00
Fix disappearing of Python repository from settings after Clion restart (CPP-7743)
Python plugin stored the interpreter setting as a module sdk, which was wiped out with it's order entries by Clion. The fix is to store the interpreter setting in a facet and reinitialize it after Clion model clearing.
This commit is contained in:
@@ -3,7 +3,7 @@
|
||||
both Community and Professional versions. -->
|
||||
<extensions defaultExtensionNs="com.intellij">
|
||||
<moduleType id="PYTHON_MODULE" implementationClass="com.jetbrains.python.module.PythonModuleType"/>
|
||||
<facetType implementation="com.jetbrains.python.facet.PythonFacetType"/>
|
||||
|
||||
<framework.detector implementation="com.jetbrains.python.facet.PythonFacetType$PythonFrameworkDetector"/>
|
||||
<frameworkSupport implementation="com.jetbrains.python.facet.PythonFrameworkSupportProvider"/>
|
||||
<projectStructureDetector implementation="com.jetbrains.python.module.PyProjectStructureDetector"/>
|
||||
@@ -20,10 +20,4 @@
|
||||
<pySuperMethodsSearch implementation="com.jetbrains.python.psi.impl.PyJavaSuperMethodsSearchExecutor"/>
|
||||
<importCandidateProvider implementation="com.jetbrains.python.psi.impl.PyJavaImportCandidateProvider"/>
|
||||
</extensions>
|
||||
|
||||
<application-components>
|
||||
<component>
|
||||
<implementation-class>com.jetbrains.python.facet.PythonSdkTableListener</implementation-class>
|
||||
</component>
|
||||
</application-components>
|
||||
</idea-plugin>
|
||||
@@ -18,12 +18,7 @@ package com.jetbrains.python.facet;
|
||||
import com.intellij.facet.Facet;
|
||||
import com.intellij.facet.FacetType;
|
||||
import com.intellij.facet.FacetTypeId;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.module.Module;
|
||||
import com.intellij.openapi.projectRoots.Sdk;
|
||||
import com.intellij.openapi.roots.*;
|
||||
import com.intellij.openapi.roots.libraries.Library;
|
||||
import com.intellij.openapi.roots.libraries.LibraryTable;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
/**
|
||||
@@ -32,81 +27,20 @@ import org.jetbrains.annotations.NotNull;
|
||||
public class PythonFacet extends LibraryContributingFacet<PythonFacetConfiguration> {
|
||||
public static final FacetTypeId<PythonFacet> ID = new FacetTypeId<>("python");
|
||||
|
||||
public PythonFacet(@NotNull final FacetType facetType, @NotNull final Module module, final @NotNull String name, @NotNull final PythonFacetConfiguration configuration,
|
||||
public PythonFacet(@NotNull final FacetType facetType,
|
||||
@NotNull final Module module,
|
||||
final @NotNull String name,
|
||||
@NotNull final PythonFacetConfiguration configuration,
|
||||
Facet underlyingFacet) {
|
||||
super(facetType, module, name, configuration, underlyingFacet);
|
||||
}
|
||||
|
||||
public void updateLibrary() {
|
||||
ApplicationManager.getApplication().runWriteAction(() -> {
|
||||
final Module module = getModule();
|
||||
final ModuleRootManager rootManager = ModuleRootManager.getInstance(module);
|
||||
final ModifiableRootModel model = rootManager.getModifiableModel();
|
||||
boolean modelChanged = false;
|
||||
try {
|
||||
// Just remove all old facet libraries except one, that is necessary
|
||||
final Sdk sdk = getConfiguration().getSdk();
|
||||
final String name = (sdk != null) ? getFacetLibraryName(sdk.getName()) : null;
|
||||
boolean librarySeen = false;
|
||||
for (OrderEntry entry : model.getOrderEntries()) {
|
||||
if (entry instanceof LibraryOrderEntry) {
|
||||
final String libraryName = ((LibraryOrderEntry)entry).getLibraryName();
|
||||
if (name != null && name.equals(libraryName)) {
|
||||
librarySeen = true;
|
||||
continue;
|
||||
}
|
||||
if (libraryName != null && libraryName.endsWith(PYTHON_FACET_LIBRARY_NAME_SUFFIX)) {
|
||||
model.removeOrderEntry(entry);
|
||||
modelChanged = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (name != null) {
|
||||
final ModifiableModelsProvider provider = ModifiableModelsProvider.SERVICE.getInstance();
|
||||
final LibraryTable.ModifiableModel libraryTableModifiableModel = provider.getLibraryTableModifiableModel();
|
||||
Library library = libraryTableModifiableModel.getLibraryByName(name);
|
||||
provider.disposeLibraryTableModifiableModel(libraryTableModifiableModel);
|
||||
if (library == null) {
|
||||
// we just create new project library
|
||||
library = PythonSdkTableListener.addLibrary(sdk);
|
||||
}
|
||||
if (!librarySeen) {
|
||||
model.addLibraryEntry(library);
|
||||
modelChanged = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
finally {
|
||||
if (modelChanged){
|
||||
model.commit();
|
||||
}
|
||||
else {
|
||||
model.dispose();
|
||||
}
|
||||
}
|
||||
});
|
||||
PythonFacetUtil.updateLibrary(getModule(), getConfiguration());
|
||||
}
|
||||
|
||||
public void removeLibrary() {
|
||||
ApplicationManager.getApplication().runWriteAction(() -> {
|
||||
final Module module = getModule();
|
||||
final ModuleRootManager rootManager = ModuleRootManager.getInstance(module);
|
||||
final ModifiableRootModel model = rootManager.getModifiableModel();
|
||||
// Just remove all old facet libraries
|
||||
for (OrderEntry entry : model.getOrderEntries()) {
|
||||
if (entry instanceof LibraryOrderEntry) {
|
||||
final Library library = ((LibraryOrderEntry)entry).getLibrary();
|
||||
if (library != null) {
|
||||
final String libraryName = library.getName();
|
||||
if (libraryName!=null && libraryName.endsWith(PYTHON_FACET_LIBRARY_NAME_SUFFIX)) {
|
||||
model.removeOrderEntry(entry);
|
||||
//PyBuiltinCache.clearInstanceCache();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
model.commit();
|
||||
});
|
||||
PythonFacetUtil.removeLibrary(getModule());
|
||||
}
|
||||
|
||||
public static String getFacetLibraryName(final String sdkName) {
|
||||
|
||||
@@ -15,5 +15,6 @@
|
||||
<orderEntry type="module" module-name="java-psi-api" />
|
||||
<orderEntry type="module" module-name="java-indexing-api" />
|
||||
<orderEntry type="module" module-name="idea-ui" />
|
||||
<orderEntry type="module" module-name="python-community-plugin-core" />
|
||||
</component>
|
||||
</module>
|
||||
Reference in New Issue
Block a user