package mmrnmhrm.core.engine;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import melnorme.lang.ide.core.tests.CommonCoreTest;
import melnorme.utilbox.misc.IByteSequence;
import melnorme.utilbox.misc.StreamUtil;
import org.eclipse.core.resources.IContainer;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.Path;
import dtool.engine.ModuleParseCache_Test;
/**
* Module resolver helper for the {@link CoreResolverSourceTests} fixture
*/
public class TestsProjectFileOverlay {
protected final IFile overlayedFile;
protected final IByteSequence overlayedFilePreviousContents;
public TestsProjectFileOverlay(IProject project, String moduleName, String source)
throws IOException, CoreException {
Path filePath = new Path(moduleName.replaceAll("\\.", "/") + ".d");
IContainer srcFolder = project.getFolder("src-dtool");
if(!srcFolder.exists()) {
srcFolder = project;
}
overlayedFile = srcFolder.getFile(filePath);
if(overlayedFile.exists()) {
overlayedFilePreviousContents = StreamUtil.readAllBytesFromStream(overlayedFile.getContents());
} else {
overlayedFilePreviousContents = null;
}
ModuleParseCache_Test.writeToFileAndUpdateMTime(CommonCoreTest.path(overlayedFile.getLocation()), source);
overlayedFile.refreshLocal(0, null);
}
public void cleanupChanges() {
try {
doCleanupChanges();
} catch(CoreException e) {
throw melnorme.utilbox.core.ExceptionAdapter.unchecked(e);
}
}
public void doCleanupChanges() throws CoreException {
if(overlayedFile != null) {
if(overlayedFilePreviousContents == null) {
overlayedFile.delete(false, null);
} else {
ByteArrayInputStream is = new ByteArrayInputStream(overlayedFilePreviousContents.toByteArray());
overlayedFile.setContents(is, IResource.NONE, null);
}
}
}
}