blob: 202329d91c632dbc3393bece033b0f4db8a0760f [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2016 xored software, Inc.
*
* 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:
* xored software, Inc. - initial API and Implementation
*******************************************************************************/
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;
}
@Override
public void becomeWorkingCopy(IProblemRequestor problemRequestor,
IProgressMonitor monitor) {
// external, do nothing
}
@Override
public void codeComplete(int offset, CompletionRequestor requestor) {
// external, do nothing
}
@Override
public void codeComplete(int offset, CompletionRequestor requestor,
WorkingCopyOwner owner) {
// external, do nothing
}
@Override
public void commitWorkingCopy(boolean force, IProgressMonitor monitor)
throws ModelException {
throw new ModelException(new ModelStatus(
IModelStatusConstants.INVALID_ELEMENT_TYPES, this));
}
@Override
public void delete(boolean force, IProgressMonitor monitor) {
// external, do nothing
}
@Override
public void discardWorkingCopy() {
// external, do nothing
}
@SuppressWarnings("unchecked")
@Override
public <T> T getAdapter(Class<T> adapter) {
if (adapter == IStorage.class) {
return (T) this;
}
return super.getAdapter(adapter);
}
@Override
public IResource getResource() {
return null;
}
@Override
public ISourceModule getWorkingCopy(WorkingCopyOwner workingCopyOwner,
IProblemRequestor problemRequestor, IProgressMonitor monitor) {
return this;
}
@Override
public boolean isWorkingCopy() {
return true;
}
@Override
protected boolean hasBuffer() {
return false;
}
@Override
public void makeConsistent(IProgressMonitor monitor) throws ModelException {
// makeConsistent(false/*don't create AST*/, 0, monitor);
openWhenClosed(createElementInfo(), monitor);
}
@Override
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);
}
@Override
public void reconcile(boolean forceProblemDetection,
WorkingCopyOwner workingCopyOwner, IProgressMonitor monitor) {
// external, do nothing
}
@Override
public void rename(String name, boolean replace, IProgressMonitor monitor) {
// external, do nothing
}
@Override
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;
}
}