/* This file is part of Green.
*
* Copyright (C) 2005 The Research Foundation of State University of New York
* All Rights Under Copyright Reserved, The Research Foundation of S.U.N.Y.
*
* Green is free software, licensed under the terms of the Eclipse
* Public License, version 1.0. The license is available at
* http://www.eclipse.org/legal/epl-v10.html
*/
//Created 9/1/2004
package edu.buffalo.cse.green.relationship.generalization;
import java.util.AbstractList;
import java.util.List;
import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.jdt.core.dom.Block;
import org.eclipse.jdt.core.dom.Type;
import edu.buffalo.cse.green.GreenException;
import edu.buffalo.cse.green.relationships.RelationshipGenerator;
import edu.buffalo.cse.green.relationships.DeclarationInfoProvider;
/**
* @see edu.buffalo.cse.green.relationship.RelationshipGenerator
*
* @author bcmartin
*/
public class GeneralizationGenerator extends RelationshipGenerator {
private static final String CLASS_MULTIPLE_GENERALIZATION =
"A class may not generalize multiple classes";
/**
* @see edu.buffalo.cse.green.relationships.RelationshipVisitor#process(org.eclipse.jdt.core.dom.TypeDeclaration)
*/
public boolean process(DeclarationInfoProvider node) {
if (!correctTypeToGenerate()) return true;
try {
if (getSourceType().isInterface()) {
// handle interface
Type type = createTypeReference(getTargetType());
// retrieve the live list of types
List<Type> interfaceList =
(AbstractList<Type>) node.getSuperInterfaceTypes();
// ensure that the type is not already generalized
for (Type eType : interfaceList) {
if (getType(eType).equals(getTargetType())) {
GreenException.illegalOperation(
"Duplicate generalization of target interface");
}
}
interfaceList.add(type);
} else {
// handle class
if (node.getSuperclassType() != null) {
GreenException.illegalOperation(
CLASS_MULTIPLE_GENERALIZATION);
}
node.setSuperclassType(createTypeReference(getTargetType()));
}
return false;
} catch (JavaModelException e) {
e.printStackTrace();
return false;
}
}
/**
* @see edu.buffalo.cse.green.relationships.RelationshipGenerator#process(org.eclipse.jdt.core.dom.Block)
*/
protected boolean process(Block node) {
return false;
}
/**
* @see edu.buffalo.cse.green.relationships.RelationshipGenerator#doVisitBlocks()
*/
protected boolean doVisitBlocks() {
return false;
}
/**
* @see edu.buffalo.cse.green.relationships.RelationshipGenerator#needChooseTypeDialog()
*/
protected boolean needChooseTypeDialog() {
return false;
}
/* (non-Javadoc)
* @see edu.buffalo.cse.green.relationships.RelationshipGenerator#needConstructor()
*/
@Override
protected boolean needConstructor() {
return false;
}
}