package com.redhat.ceylon.eclipse.core.typechecker;
import java.lang.ref.WeakReference;
import java.util.List;
import org.antlr.runtime.CommonToken;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
import com.redhat.ceylon.compiler.typechecker.TypeChecker;
import com.redhat.ceylon.compiler.typechecker.analyzer.ModuleSourceMapper;
import com.redhat.ceylon.compiler.typechecker.context.PhasedUnit;
import com.redhat.ceylon.compiler.typechecker.context.TypecheckerUnit;
import com.redhat.ceylon.compiler.typechecker.io.VirtualFile;
import com.redhat.ceylon.compiler.typechecker.tree.Tree.CompilationUnit;
import com.redhat.ceylon.eclipse.core.model.EditedSourceFile;
import com.redhat.ceylon.model.typechecker.model.Declaration;
import com.redhat.ceylon.model.typechecker.model.Package;
import com.redhat.ceylon.model.typechecker.util.ModuleManager;
public class EditedPhasedUnit extends ModifiablePhasedUnit {
WeakReference<ProjectPhasedUnit> savedPhasedUnitRef;
public EditedPhasedUnit(VirtualFile unitFile, VirtualFile srcDir,
CompilationUnit cu, Package p, ModuleManager moduleManager,
ModuleSourceMapper moduleSourceMapper,
TypeChecker typeChecker, List<CommonToken> tokenStream, ProjectPhasedUnit savedPhasedUnit) {
super(unitFile, srcDir, cu, p, moduleManager, moduleSourceMapper, typeChecker, tokenStream);
savedPhasedUnitRef = new WeakReference<ProjectPhasedUnit>(savedPhasedUnit);
if (savedPhasedUnit!=null) {
savedPhasedUnit.addWorkingCopy(this);
}
}
public EditedPhasedUnit(PhasedUnit other) {
super(other);
}
@Override
public TypecheckerUnit newUnit() {
return new EditedSourceFile(this);
}
@Override
public EditedSourceFile getUnit() {
return (EditedSourceFile) super.getUnit();
}
public ProjectPhasedUnit getOriginalPhasedUnit() {
return savedPhasedUnitRef.get();
}
@Override
public IFile getResourceFile() {
ProjectPhasedUnit originalPhasedUnit =
getOriginalPhasedUnit();
return originalPhasedUnit == null ? null
: originalPhasedUnit.getResourceFile();
}
@Override
public IFolder getResourceRootFolder() {
return getOriginalPhasedUnit() == null ? null
: getOriginalPhasedUnit().getResourceRootFolder();
}
@Override
public IProject getResourceProject() {
return getOriginalPhasedUnit() == null ? null
: getOriginalPhasedUnit().getResourceProject();
}
@Override
public boolean isAllowedToChangeModel(Declaration declaration) {
return !IdePhasedUnit.isCentralModelDeclaration(declaration);
}
}