package org.eclipse.dltk.internal.core; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IStorage; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.dltk.core.CompletionRequestor; import org.eclipse.dltk.core.DLTKContentTypeManager; import org.eclipse.dltk.core.DLTKLanguageManager; import org.eclipse.dltk.core.IDLTKLanguageToolkit; import org.eclipse.dltk.core.IExternalSourceModule; import org.eclipse.dltk.core.IModelElement; import org.eclipse.dltk.core.IModelStatus; import org.eclipse.dltk.core.IModelStatusConstants; import org.eclipse.dltk.core.IProblemRequestor; import org.eclipse.dltk.core.ISourceModule; import org.eclipse.dltk.core.ModelException; import org.eclipse.dltk.core.WorkingCopyOwner; /** * Base class for all external source module representations. */ public abstract class AbstractExternalSourceModule extends AbstractSourceModule implements IExternalSourceModule { protected AbstractExternalSourceModule(ModelElement parent, String name, WorkingCopyOwner owner) { super(parent, name, owner); } @Override public boolean isReadOnly() { return true; } /* * @see * org.eclipse.dltk.core.ISourceModule#becomeWorkingCopy(org.eclipse.dltk * .core.IProblemRequestor, org.eclipse.core.runtime.IProgressMonitor) */ public void becomeWorkingCopy(IProblemRequestor problemRequestor, IProgressMonitor monitor) { // external, do nothing } /* * @see org.eclipse.dltk.core.ICodeAssist#codeComplete(int, * org.eclipse.dltk.core.CompletionRequestor) */ public void codeComplete(int offset, CompletionRequestor requestor) { // external, do nothing } /* * @see org.eclipse.dltk.core.ICodeAssist#codeComplete(int, * org.eclipse.dltk.core.CompletionRequestor, * org.eclipse.dltk.core.WorkingCopyOwner) */ public void codeComplete(int offset, CompletionRequestor requestor, WorkingCopyOwner owner) { // external, do nothing } /* * @see org.eclipse.dltk.core.ISourceModule#commitWorkingCopy(boolean, * org.eclipse.core.runtime.IProgressMonitor) */ public void commitWorkingCopy(boolean force, IProgressMonitor monitor) throws ModelException { throw new ModelException(new ModelStatus( IModelStatusConstants.INVALID_ELEMENT_TYPES, this)); } /* * @see org.eclipse.dltk.core.ISourceManipulation#delete(boolean, * org.eclipse.core.runtime.IProgressMonitor) */ public void delete(boolean force, IProgressMonitor monitor) { // external, do nothing } /* * @see org.eclipse.dltk.core.ISourceModule#discardWorkingCopy() */ public void discardWorkingCopy() { // external, do nothing } /* * @see org.eclipse.core.runtime.PlatformObject#getAdapter(java.lang.Class) */ public Object getAdapter(Class adapter) { if (adapter == IStorage.class) { return this; } return super.getAdapter(adapter); } /* * @see org.eclipse.dltk.core.IModelElement#getResource() */ public IResource getResource() { return null; } /* * @see * org.eclipse.dltk.core.ISourceModule#getWorkingCopy(org.eclipse.dltk.core * .WorkingCopyOwner, org.eclipse.dltk.core.IProblemRequestor, * org.eclipse.core.runtime.IProgressMonitor) */ public ISourceModule getWorkingCopy(WorkingCopyOwner workingCopyOwner, IProblemRequestor problemRequestor, IProgressMonitor monitor) { return this; } /* * @see org.eclipse.dltk.core.ISourceModule#isWorkingCopy() */ public boolean isWorkingCopy() { return true; } /* * (non-Javadoc) * * @see org.eclipse.dltk.internal.core.AbstractSourceModule#hasBuffer() */ protected boolean hasBuffer() { return false; } /* * @see * org.eclipse.dltk.internal.core.Openable#makeConsistent(org.eclipse.core * .runtime.IProgressMonitor) */ public void makeConsistent(IProgressMonitor monitor) throws ModelException { // makeConsistent(false/*don't create AST*/, 0, monitor); openWhenClosed(createElementInfo(), monitor); } /* * @see * org.eclipse.dltk.core.ISourceManipulation#move(org.eclipse.dltk.core. * IModelElement, org.eclipse.dltk.core.IModelElement, java.lang.String, * boolean, org.eclipse.core.runtime.IProgressMonitor) */ public void move(IModelElement container, IModelElement sibling, String rename, boolean replace, IProgressMonitor monitor) throws ModelException { // this may be slightly misleading to the user... copy(container, sibling, rename, replace, monitor); } /* * @see org.eclipse.dltk.core.ISourceModule#reconcile(boolean, * org.eclipse.dltk.core.WorkingCopyOwner, * org.eclipse.core.runtime.IProgressMonitor) */ public void reconcile(boolean forceProblemDetection, WorkingCopyOwner workingCopyOwner, IProgressMonitor monitor) { // external, do nothing } /* * @see org.eclipse.dltk.core.ISourceManipulation#rename(java.lang.String, * boolean, org.eclipse.core.runtime.IProgressMonitor) */ public void rename(String name, boolean replace, IProgressMonitor monitor) { // external, do nothing } /* * @see org.eclipse.dltk.internal.core.Openable#closing(java.lang.Object) */ protected void closing(Object info) { // lifetime of the working copy } @Override protected IStatus validateSourceModule(IDLTKLanguageToolkit toolkit, IResource resource) { // external, resource will always be null IPath path = getFullPath(); if (toolkit == null) { toolkit = DLTKLanguageManager.findToolkit(path); } if (toolkit != null) { if (DLTKContentTypeManager.isValidFileNameForContentType(toolkit, path)) { return IModelStatus.VERIFIED_OK; } } return null; } }