From 7d73e53787bbda2cde90e55b29d01f6c940018df Mon Sep 17 00:00:00 2001 From: Alexey Kudravtsev Date: Thu, 11 Dec 2014 18:23:48 +0300 Subject: [PATCH] mem leak --- .../jetbrains/python/facet/PythonFacet.java | 58 ++++++++++--------- 1 file changed, 32 insertions(+), 26 deletions(-) diff --git a/python/pluginSrc/com/jetbrains/python/facet/PythonFacet.java b/python/pluginSrc/com/jetbrains/python/facet/PythonFacet.java index 0a72d194385a..12559370b223 100644 --- a/python/pluginSrc/com/jetbrains/python/facet/PythonFacet.java +++ b/python/pluginSrc/com/jetbrains/python/facet/PythonFacet.java @@ -44,40 +44,46 @@ public class PythonFacet extends Facet implements Libr final ModuleRootManager rootManager = ModuleRootManager.getInstance(module); final ModifiableRootModel model = rootManager.getModifiableModel(); boolean modelChanged = false; - // 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; + 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 (libraryName != null && libraryName.endsWith(PYTHON_FACET_LIBRARY_NAME_SUFFIX)) { - model.removeOrderEntry(entry); + } + if (name != null) { + final ModifiableModelsProvider provider = ModifiableModelsProvider.SERVICE.getInstance(); + final LibraryTable.ModifiableModel libraryTableModifiableModel = provider.getLibraryTableModifiableModel(); + Library library = libraryTableModifiableModel.getLibraryByName(name); + if (library == null) { + // we just create new project library + library = PythonSdkTableListener.addLibrary(sdk); + } + if (!librarySeen) { + model.addLibraryEntry(library); modelChanged = true; } } } - if (name != null) { - final ModifiableModelsProvider provider = ModifiableModelsProvider.SERVICE.getInstance(); - final LibraryTable.ModifiableModel libraryTableModifiableModel = provider.getLibraryTableModifiableModel(); - Library library = libraryTableModifiableModel.getLibraryByName(name); - if (library == null) { - // we just create new project library - library = PythonSdkTableListener.addLibrary(sdk); + finally { + if (modelChanged){ + model.commit(); } - if (!librarySeen) { - model.addLibraryEntry(library); - modelChanged = true; + else { + model.dispose(); } } - - if (modelChanged){ - model.commit(); - } } }); }