001    package org.mesopotamia.lang.java;
002    
003    import org.mesopotamia.LanguageElement;
004    import org.mesopotamia.MesopotamiaException;
005    import org.mesopotamia.NodeData;
006    import org.mesopotamia.RepositoryLanguage;
007    import org.mesopotamia.Scan;
008    import org.mesopotamia.lang.java.ref.TypeInfo;
009    import org.mesopotamia.lang.java.ref.VariableInfo;
010    import org.w3c.dom.Element;
011    
012    import biz.hammurapi.util.Visitable;
013    import biz.hammurapi.util.Visitor;
014    
015    public class VariableDefinition extends Field implements Statement, VariableInfo {
016    
017            public VariableDefinition(
018                            NodeData xData, 
019                            Class<?> context, 
020                            Scan scan,
021                            RepositoryLanguage language, 
022                            Object environment) throws MesopotamiaException {
023                    
024                    super(xData, context, scan, language, environment);
025    
026                    // Select attributes
027                    Name = selectSingleElementText(Identifier.class, "IDENT|DOT");
028                    TypeSpecification = selectSingleElement(TypeSpecification.class, "TYPE");
029                    Initializer = selectSingleElement(VariableInitializer.class, "ASSIGN");
030    
031            }
032    
033            public void toDom(Element holder) {
034                    super.toDom(holder);
035    
036                    // Serialize attributes
037                    setAttribute(holder, "Name", Name);
038                    setElement(holder, "TypeSpecification", TypeSpecification);
039                    setElement(holder, "Initializer", Initializer);
040            }
041    
042            // Attributes
043            private String Name;
044    
045            private TypeSpecification TypeSpecification;
046    
047            private VariableInitializer Initializer;
048    
049            // Accessors
050            public String getName() {
051                    return Name;
052            }
053    
054            public TypeSpecification getTypeSpecification() {
055                    return TypeSpecification;
056            }
057    
058            public VariableInitializer getInitializer() {
059                    return Initializer;
060            }
061    
062            protected void acceptChildren(Visitor visitor) {
063                    super.acceptChildren(visitor);
064                    // Visiting non-text attributes
065                    if (TypeSpecification instanceof Visitable) {
066                            ((Visitable) TypeSpecification).accept(visitor);
067                    }
068                    if (Initializer instanceof Visitable) {
069                            ((Visitable) Initializer).accept(visitor);
070                    }
071            }
072    
073            public String getFcn() {
074                    LanguageElement parent = getParent();
075                    if (parent instanceof TypeDefinition) {
076                            String pFcn = ((TypeDefinition) parent).getFcn();
077                            if (pFcn!=null) {
078                                    return pFcn+"."+getName();
079                            }
080                    }
081                    return null;
082            }
083    
084            public TypeInfo getDeclaringType() {
085                    LanguageElement parent = getParent();
086                    if (parent instanceof TypeDefinition) {
087                            return (TypeDefinition) parent;
088                    }
089                    return null;
090            }
091    
092    }