/*******************************************************************************
* Copyright (c) 2006, 2015 Zend Technologies and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Zend Technologies - initial API and implementation
*******************************************************************************/
package org.eclipse.php.refactoring.core.changes;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.dltk.core.ISourceModule;
import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.IRegion;
import org.eclipse.jface.text.Region;
import org.eclipse.ltk.core.refactoring.TextEditBasedChangeGroup;
import org.eclipse.ltk.core.refactoring.TextFileChange;
import org.eclipse.php.core.ast.nodes.Program;
/**
* A program change is a text file change with augmented AST program
*
* @author Roy, 2007
*/
public class ProgramFileChange extends TextFileChange {
private final Program program;
public ProgramFileChange(String name, IFile file, Program program) {
super(name, file);
this.program = program;
}
public Program getProgram() {
return program;
}
/**
* Adapt to Program
*
* @see org.eclipse.ltk.core.refactoring.Change#getAdapter(java.lang.Class)
*/
@SuppressWarnings("unchecked")
public Object getAdapter(Class adapter) {
if (adapter == Program.class) {
return program;
}
return super.getAdapter(adapter);
}
/**
* Get the content from the begining (for syntax highlighting reasons) to
* the end of the changes
*
* @see org.eclipse.ltk.core.refactoring.TextChange#getCurrentContent(org.eclipse.jface.text.IRegion,
* boolean, int, org.eclipse.core.runtime.IProgressMonitor)
*/
@Override
public String getCurrentContent(IRegion region,
boolean expandRegionToFullLine, int surroundingLines,
IProgressMonitor pm) throws CoreException {
IRegion fixed = new Region(0, region.getOffset() + region.getLength());
return super.getCurrentContent(fixed, expandRegionToFullLine,
surroundingLines, pm);
}
/**
* Get the content from the begining (for syntax highlighting reasons) to
* the end of the changes
*
* @see org.eclipse.ltk.core.refactoring.TextChange#getPreviewContent(org.eclipse.ltk.core.refactoring.TextEditBasedChangeGroup[],
* org.eclipse.jface.text.IRegion, boolean, int,
* org.eclipse.core.runtime.IProgressMonitor)
*/
@Override
public String getPreviewContent(TextEditBasedChangeGroup[] changeGroups,
IRegion region, boolean expandRegionToFullLine,
int surroundingLines, IProgressMonitor pm) throws CoreException {
IRegion fixed = new Region(0, region.getOffset() + region.getLength());
return super.getPreviewContent(changeGroups, fixed,
expandRegionToFullLine, surroundingLines, pm);
}
/*
* (non-Javadoc)
*
* @see
* org.eclipse.ltk.core.refactoring.TextFileChange#acquireDocument(org.eclipse
* .core.runtime.IProgressMonitor)
*/
@Override
protected IDocument acquireDocument(IProgressMonitor pm)
throws CoreException {
// IFile file = getFile();
// if (file instanceof ExternalFileWrapper) {
// documentModel =
// StructuredModelManager.getModelManager().getExistingModelForEdit(file);
// return documentModel.getStructuredDocument();
// }
return super.acquireDocument(pm);
}
/*
* (non-Javadoc)
*
* @see
* org.eclipse.ltk.core.refactoring.TextFileChange#releaseDocument(org.eclipse
* .jface.text.IDocument, org.eclipse.core.runtime.IProgressMonitor)
*/
@Override
protected void releaseDocument(IDocument document, IProgressMonitor pm)
throws CoreException {
// IFile file = getFile();
// if (file instanceof ExternalFileWrapper) {
// documentModel.releaseFromEdit();
// return;
// }
// super.releaseDocument(document, pm);
boolean isModified = isDocumentModified();
super.releaseDocument(document, pm);
ISourceModule sm = program.getSourceModule();
if (isModified && !isDocumentAcquired()) {
if (sm.isWorkingCopy())
sm.reconcile(false /* don't force problem detection */,
null /* use primary owner */, null /*
* no progress monitor
*/);
else
sm.makeConsistent(pm);
}
}
/*
* (non-Javadoc)
*
* @see
* org.eclipse.ltk.core.refactoring.TextFileChange#commit(org.eclipse.jface
* .text.IDocument, org.eclipse.core.runtime.IProgressMonitor)
*/
@Override
protected void commit(IDocument document, IProgressMonitor pm)
throws CoreException {
// if (getFile() instanceof ExternalFileWrapper) {
// try {
// documentModel.save();
// } catch (UnsupportedEncodingException e) {
// } catch (IOException e) {
// }
// return;
// }
super.commit(document, pm);
}
}