001    package org.mesopotamia.lang.java;
002    
003    import java.util.List;
004    
005    import org.mesopotamia.MesopotamiaException;
006    import org.mesopotamia.NodeData;
007    import org.mesopotamia.RepositoryLanguage;
008    import org.mesopotamia.Scan;
009    import org.mesopotamia.lang.java.ref.TypeInfo;
010    import org.w3c.dom.Element;
011    
012    import biz.hammurapi.util.CollectionVisitable;
013    import biz.hammurapi.util.Visitor;
014    
015    @SuppressWarnings("unchecked")
016    public class ClassOrInterfaceDefinition extends TypeDefinition {
017    
018            public ClassOrInterfaceDefinition(NodeData xData, Class<?> context, Scan scan,
019                            RepositoryLanguage language, Object environment) throws MesopotamiaException {
020                    super(xData, context, scan, language, environment);
021    
022                    // Select attributes
023                    if (language.supportsTokenName("TYPE_PARAMETERS")) {
024                            TypeParameters = select(TypeParameter.class, "TYPE_PARAMETERS/*");
025                    }
026            }
027    
028            public void toDom(Element holder) {
029                    super.toDom(holder);
030    
031                    // Serialize attributes
032                    setElement(holder, "TypeParameters", TypeParameters);
033            }
034    
035            // Attributes
036            private List<TypeParameter> TypeParameters = emptyList;
037    
038            // Accessors
039            public List<TypeParameter> getTypeParameters() {
040                    return TypeParameters;
041            }
042    
043            protected void acceptChildren(Visitor visitor) {
044                    super.acceptChildren(visitor);
045                    // Visiting non-text attributes
046                    new CollectionVisitable(TypeParameters, false).accept(visitor);
047            }
048            
049            @Override
050            public TypeInfo findType(String name) {
051                    for (TypeParameter tp: getTypeParameters()) {
052                            if (tp.getName().equals(name)) {
053                                    return tp;
054                            }
055                    }
056                    
057                    return super.findType(name);
058            }
059            
060            
061    
062    }