<module value="com.intellij.modules.python"/>
<extensions defaultExtensionNs="com.intellij">
+ <library.type implementation="com.jetbrains.python.library.PythonLibraryType"/>
<targetElement implementation="com.jetbrains.python.magicLiteral.PyMagicTargetElementExtensionPoint"/>
<nameSuggestionProvider implementation="com.jetbrains.python.refactoring.PyNameSuggestionProvider"/>
<methodNavigationOffsetProvider implementation="com.jetbrains.python.codeInsight.PyMethodNavigationOffsetProvider"/>
return;
}
final List<String> paths = facet.getConfiguration().getPaths();
- FacetLibraryConfigurator.attachLibrary(module, null, BUILDOUT_LIB_NAME, paths);
+ FacetLibraryConfigurator.attachPythonLibrary(module, null, BUILDOUT_LIB_NAME, paths);
}
public static void detachLibrary(final Module module) {
- FacetLibraryConfigurator.detachLibrary(module, BUILDOUT_LIB_NAME);
+ FacetLibraryConfigurator.detachPythonLibrary(module, BUILDOUT_LIB_NAME);
}
}
import com.intellij.openapi.project.Project;
import com.intellij.openapi.roots.*;
import com.intellij.openapi.roots.impl.OrderEntryUtil;
+import com.intellij.openapi.roots.impl.libraries.LibraryImpl;
+import com.intellij.openapi.roots.impl.libraries.LibraryTableBase;
+import com.intellij.openapi.roots.impl.libraries.ProjectLibraryTable;
import com.intellij.openapi.roots.libraries.Library;
-import com.intellij.openapi.roots.libraries.LibraryTable;
import com.intellij.openapi.vfs.JarFileSystem;
import com.intellij.openapi.vfs.LocalFileSystem;
import com.intellij.openapi.vfs.VirtualFile;
+import com.jetbrains.python.library.PythonLibraryType;
import org.jetbrains.annotations.Nullable;
import java.util.Collections;
private FacetLibraryConfigurator() {
}
- public static void attachLibrary(final Module module, @Nullable final ModifiableRootModel existingModel, final String libraryName, final List<String> paths) {
+ public static void attachPythonLibrary(final Module module,
+ @Nullable final ModifiableRootModel existingModel,
+ final String libraryName,
+ final List<String> paths) {
final ModifiableModelsProvider modelsProvider = ModifiableModelsProvider.SERVICE.getInstance();
ApplicationManager.getApplication().runWriteAction(new Runnable() {
public void run() {
// update existing
Library lib = orderEntry.getLibrary();
if (lib != null) {
+ if (lib instanceof LibraryImpl && ((LibraryImpl)lib).getKind() == null) { // replace old python libraries with python specific ones
+ model.removeOrderEntry(orderEntry);
+ ProjectLibraryTable.getInstance(model.getProject()).removeLibrary(lib);
+ createNewLibrary(model);
+ return;
+ }
fillLibrary(module.getProject(), lib, paths);
if (existingModel == null) {
modelsProvider.commitModuleModifiableModel(model);
}
}
// create new
- final LibraryTable.ModifiableModel projectLibrariesModel = modelsProvider.getLibraryTableModifiableModel(model.getProject());
- Library lib = projectLibrariesModel.createLibrary(libraryName);
+ createNewLibrary(model);
+ }
+
+ private void createNewLibrary(ModifiableRootModel model) {
+ final LibraryTableBase.ModifiableModelEx projectLibrariesModel =
+ (LibraryTableBase.ModifiableModelEx)modelsProvider.getLibraryTableModifiableModel(model.getProject());
+ Library lib = projectLibrariesModel.createLibrary(libraryName, PythonLibraryType.getInstance().getKind());
fillLibrary(module.getProject(), lib, paths);
projectLibrariesModel.commit();
model.addLibraryEntry(lib);
modifiableModel.commit();
}
- public static void detachLibrary(final Module module, final String libraryName) {
+ public static void detachPythonLibrary(final Module module, final String libraryName) {
final ModifiableModelsProvider modelsProvider = ModifiableModelsProvider.SERVICE.getInstance();
ApplicationManager.getApplication().runWriteAction(new Runnable() {
public void run() {
--- /dev/null
+/*
+ * Copyright 2000-2012 JetBrains s.r.o.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.jetbrains.python.library;
+
+import com.intellij.openapi.project.Project;
+import com.intellij.openapi.roots.libraries.DummyLibraryProperties;
+import com.intellij.openapi.roots.libraries.LibraryType;
+import com.intellij.openapi.roots.libraries.NewLibraryConfiguration;
+import com.intellij.openapi.roots.libraries.PersistentLibraryKind;
+import com.intellij.openapi.roots.libraries.ui.LibraryEditorComponent;
+import com.intellij.openapi.roots.libraries.ui.LibraryPropertiesEditor;
+import com.intellij.openapi.vfs.VirtualFile;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+import javax.swing.*;
+
+/**
+ * python library type should be used if library paths to be included in Python Path
+ */
+public class PythonLibraryType extends LibraryType<DummyLibraryProperties> {
+ private static final PersistentLibraryKind<DummyLibraryProperties> LIBRARY_KIND = new PersistentLibraryKind<DummyLibraryProperties>("python") {
+ @NotNull
+ @Override
+ public DummyLibraryProperties createDefaultProperties() {
+ return DummyLibraryProperties.INSTANCE;
+ }
+ };
+
+ protected PythonLibraryType() {
+ super(LIBRARY_KIND);
+ }
+
+ public static PythonLibraryType getInstance() {
+ return EP_NAME.findExtension(PythonLibraryType.class);
+ }
+
+ @Override
+ public String getCreateActionName() {
+ return null;
+ }
+
+ @Nullable
+ @Override
+ public NewLibraryConfiguration createNewLibrary(@NotNull JComponent parentComponent,
+ @Nullable VirtualFile contextDirectory,
+ @NotNull Project project) {
+ return null;
+ }
+
+ @Nullable
+ @Override
+ public LibraryPropertiesEditor createPropertiesEditor(@NotNull LibraryEditorComponent<DummyLibraryProperties> editorComponent) {
+ return null;
+ }
+
+ @Nullable
+ @Override
+ public Icon getIcon() {
+ return null;
+ }
+
+}
import com.intellij.openapi.projectRoots.Sdk;
import com.intellij.openapi.projectRoots.SdkAdditionalData;
import com.intellij.openapi.roots.*;
+import com.intellij.openapi.roots.impl.libraries.LibraryImpl;
+import com.intellij.openapi.roots.libraries.Library;
+import com.intellij.openapi.roots.libraries.PersistentLibraryKind;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.util.registry.Registry;
import com.intellij.openapi.vfs.JarFileSystem;
import com.jetbrains.python.debugger.PyDebuggerOptionsProvider;
import com.jetbrains.python.facet.LibraryContributingFacet;
import com.jetbrains.python.facet.PythonPathContributingFacet;
+import com.jetbrains.python.library.PythonLibraryType;
import com.jetbrains.python.sdk.PySdkUtil;
import com.jetbrains.python.sdk.PythonEnvUtil;
import com.jetbrains.python.sdk.PythonSdkAdditionalData;
}
private static void addLibrariesFromModule(Module module, Collection<String> list) {
- if (PlatformUtils.isPyCharm()) {
- return;
- }
final OrderEntry[] entries = ModuleRootManager.getInstance(module).getOrderEntries();
for (OrderEntry entry : entries) {
if (entry instanceof LibraryOrderEntry) {
continue;
}
for (VirtualFile root : ((LibraryOrderEntry)entry).getRootFiles(OrderRootType.CLASSES)) {
- addToPythonPath(root, list);
+ final Library library = ((LibraryOrderEntry)entry).getLibrary();
+ if (!PlatformUtils.isPyCharm()) {
+ addToPythonPath(root, list);
+ }
+ else if (library instanceof LibraryImpl) {
+ final PersistentLibraryKind<?> kind = ((LibraryImpl)library).getKind();
+ if (kind == PythonLibraryType.getInstance().getKind()) {
+ addToPythonPath(root, list);
+ }
+ }
}
}
}