@Override
 public void apply() throws ConfigurationException {
   myEditor.apply();
   if (myModifiableModel.isChanged()) {
     ApplicationManager.getApplication().runWriteAction(() -> myModifiableModel.commit());
     myEditor.disposeUIResources();
     myTopPanel.remove(myEditor.getComponent());
     createEditor();
   }
 }
 @Override
 public void disposeUIResources() {
   if (myEditor != null) {
     myEditor.disposeUIResources();
     myTopPanel.remove(myEditor.getComponent());
     myEditor = null;
   }
   if (myModifiableModel != null) {
     myModifiableModel.dispose();
     myModifiableModel = null;
   }
 }
 @Override
 public void apply() throws ConfigurationException {
   super.apply();
   for (PyRootTypeProvider provider : myRootTypeProviders) {
     provider.apply(myModule);
   }
 }
  @Override
  public void disposeUIResources() {
    super.disposeUIResources();
    if (myFilePointersDisposable != null) {
      Disposer.dispose(myFilePointersDisposable);
    }

    for (PyRootTypeProvider provider : myRootTypeProviders) {
      provider.disposeUIResources(myModule);
    }
  }
 @Override
 public boolean isModified() {
   return myEditor != null && myEditor.isModified();
 }
 @Override
 public void reset() {
   myEditor.reset();
   // TODO?
 }