package de.ovgu.cide.configuration.jdt;
import java.util.HashSet;
import java.util.Set;
import org.eclipse.jdt.core.dom.ASTNode;
import org.eclipse.jdt.core.dom.ChildPropertyDescriptor;
import org.eclipse.jdt.core.dom.ConditionalExpression;
import org.eclipse.jdt.core.dom.DoStatement;
import org.eclipse.jdt.core.dom.ForStatement;
import org.eclipse.jdt.core.dom.IfStatement;
import org.eclipse.jdt.core.dom.SynchronizedStatement;
import org.eclipse.jdt.core.dom.TryStatement;
import org.eclipse.jdt.core.dom.WhileStatement;
public class ASTColorInheritance {
/**
* returns if n inherits the colors of its parent node. usually colors are
* inherited, but there are some exceptions, i.e., if statements
*/
public static boolean inheritsColors(ASTNode parent, ASTNode n) {
if (notInheritedProperties.contains(n.getLocationInParent()))
return false;
return true;
}
/**
* returns a nonempty list or null
*
* @return
*/
// public static List<ASTNode> getNotInheritedChildren(ASTNode parent){
// // to not inherit to blocks beneath if statements
// if (parent instanceof IfStatement)
// return wrapItems(((IfStatement) parent).getThenStatement(),((IfStatement)
// parent).getElseStatement());
// // same for for, while, do
// if (parent instanceof WhileStatement)
// return wrapItem(((WhileStatement) parent).getBody());
// if (parent instanceof ForStatement)
// return wrapItem(((ForStatement) parent).getBody());
// if (parent instanceof DoStatement)
// return wrapItem(((DoStatement) parent).getBody());
// // same for try
// if (parent instanceof TryStatement)
// return wrapItem(((TryStatement) parent).getBody());
// return null;
// }
public static final Set<ChildPropertyDescriptor> notInheritedProperties;
static {
notInheritedProperties = new HashSet<ChildPropertyDescriptor>();
notInheritedProperties.add(IfStatement.THEN_STATEMENT_PROPERTY);
// notInheritedProperties.add(IfStatement.ELSE_STATEMENT_PROPERTY);
notInheritedProperties.add(WhileStatement.BODY_PROPERTY);
notInheritedProperties.add(ForStatement.BODY_PROPERTY);
notInheritedProperties.add(DoStatement.BODY_PROPERTY);
notInheritedProperties.add(TryStatement.BODY_PROPERTY);
notInheritedProperties.add(SynchronizedStatement.BODY_PROPERTY);
notInheritedProperties
.add(ConditionalExpression.THEN_EXPRESSION_PROPERTY);
// notInheritedProperties.add(ConditionalExpression.ELSE_EXPRESSION_PROPERTY);
}
// private static List<ASTNode> wrapItem(ASTNode node){
// List<ASTNode> result=new ArrayList<ASTNode>();
// if (node!=null)
// result.add(node);
// return result;
// }
// private static List<ASTNode> wrapItems(ASTNode nodeA,ASTNode nodeB){
// List<ASTNode> result=new ArrayList<ASTNode>();
// if (nodeA!=null)
// result.add(nodeA);
// if (nodeB!=null)
// result.add(nodeB);
// return result;
// }
}