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 }