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 }