/*******************************************************************************
* Copyright (c) 2011 Red Hat, Inc.
* Distributed under license by Red Hat, Inc. All rights reserved.
* This program is 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:
* Red Hat, Inc. - initial API and implementation
******************************************************************************/
package org.jboss.tools.cdi.core.extension;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.eclipse.core.runtime.IPath;
import org.jboss.tools.cdi.core.IRootDefinitionContext;
import org.jboss.tools.cdi.internal.core.impl.definition.AnnotationDefinition;
import org.jboss.tools.cdi.internal.core.impl.definition.TypeDefinition;
/**
*
* @author Viacheslav Kabanovich
*
*/
public abstract class AbstractDefinitionContextExtension implements IDefinitionContextExtension {
protected IRootDefinitionContext root;
protected AbstractDefinitionContextExtension original;
protected AbstractDefinitionContextExtension workingCopy;
protected abstract AbstractDefinitionContextExtension copy(boolean clean);
public void newWorkingCopy(boolean forFullBuild) {
if(original != null) return;
workingCopy = copy(forFullBuild);
workingCopy.original = this;
}
public void applyWorkingCopy() {
if(original != null) {
original.applyWorkingCopy();
return;
}
if(workingCopy == null) {
return;
}
doApplyWorkingCopy();
workingCopy = null;
}
protected void doApplyWorkingCopy() {}
public void clean() {
}
public void clean(IPath path) {
}
public void clean(String typeName) {
}
public void setRootContext(IRootDefinitionContext context) {
this.root = context;
}
public IRootDefinitionContext getRootContext() {
return root;
}
public IDefinitionContextExtension getWorkingCopy() {
if(original != null) {
return this;
}
if(workingCopy != null) {
return workingCopy;
}
workingCopy = copy(false);
workingCopy.original = this;
return workingCopy;
}
public void computeAnnotationKind(AnnotationDefinition annotation) {
}
private static List<TypeDefinition> EMPTY_LIST = Collections.unmodifiableList(new ArrayList<TypeDefinition>());
public List<TypeDefinition> getTypeDefinitions() {
return EMPTY_LIST;
}
}