protected void performSaveAs(IProgressMonitor progressMonitor) {
    FileEditorInput input = (FileEditorInput) getEditorInput();
    String path = input.getFile().getFullPath().toString();
    ResourceSet resourceSet = getResourceSet();
    URI platformURI = URI.createPlatformResourceURI(path, true);
    Resource oldFile = resourceSet.getResource(platformURI, true);

    super.performSaveAs(progressMonitor);

    // load and resave - input has been changed to new path by super
    FileEditorInput newInput = (FileEditorInput) getEditorInput();
    String newPath = newInput.getFile().getFullPath().toString();
    URI newPlatformURI = URI.createPlatformResourceURI(newPath, true);
    Resource newFile = resourceSet.createResource(newPlatformURI);
    // if the extension is the same, saving was already performed by super by saving
    // the plain text
    if (platformURI.fileExtension().equals(newPlatformURI.fileExtension())) {
      oldFile.unload();
      // save code folding state, is it possible with a new name
      codeFoldingManager.saveCodeFoldingStateFile(getResource().getURI().toString());
    } else {
      newFile.getContents().clear();
      newFile.getContents().addAll(oldFile.getContents());
      try {
        oldFile.unload();
        if (newFile.getErrors().isEmpty()) {
          newFile.save(null);
        }
      } catch (Exception e) {
        e.printStackTrace();
      }
    }
  }
  protected void performSave(boolean overwrite, IProgressMonitor progressMonitor) {

    super.performSave(overwrite, progressMonitor);

    // Save code folding state
    codeFoldingManager.saveCodeFoldingStateFile(getResource().getURI().toString());
  }