001 package org.mesopotamia.lang.java;
002
003 import org.mesopotamia.MesopotamiaException;
004 import org.mesopotamia.NodeData;
005 import org.mesopotamia.RepositoryLanguage;
006 import org.mesopotamia.Scan;
007 import org.mesopotamia.lang.java.ref.MethodInfo;
008 import org.mesopotamia.lang.java.ref.Scope;
009 import org.mesopotamia.lang.java.ref.TypeInfo;
010 import org.mesopotamia.lang.java.ref.VariableInfo;
011 import org.w3c.dom.Element;
012
013 import biz.hammurapi.util.Visitable;
014 import biz.hammurapi.util.Visitor;
015
016 public class Handler extends JavaLanguageElement implements Scope {
017
018 public Handler(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 ParameterDefinition = selectSingleElement(ParameterDefinition.class,
024 "PARAMETER_DEF");
025 CompoundStatement = selectSingleElement(CompoundStatement.class, "SLIST");
026
027 }
028
029 public void toDom(Element holder) {
030 super.toDom(holder);
031
032 // Serialize attributes
033 setElement(holder, "ParameterDefinition", ParameterDefinition);
034 setElement(holder, "CompoundStatement", CompoundStatement);
035 }
036
037 // Attributes
038 private ParameterDefinition ParameterDefinition;
039
040 private CompoundStatement CompoundStatement;
041
042 // Accessors
043 public ParameterDefinition getParameterDefinition() {
044 return ParameterDefinition;
045 }
046
047 public CompoundStatement getCompoundStatement() {
048 return CompoundStatement;
049 }
050
051 protected void acceptChildren(Visitor visitor) {
052 super.acceptChildren(visitor);
053 // Visiting non-text attributes
054 if (ParameterDefinition instanceof Visitable) {
055 ((Visitable) ParameterDefinition).accept(visitor);
056 }
057 if (CompoundStatement instanceof Visitable) {
058 ((Visitable) CompoundStatement).accept(visitor);
059 }
060 }
061
062 public MethodInfo findMethod(String name, String[] parameterTypes) {
063 Scope ec = findParent(Scope.class);
064 return ec == null ? null : ec.findMethod(name, parameterTypes);
065 }
066
067 public TypeInfo findType(String name) {
068 Scope ec = findParent(Scope.class);
069 return ec == null ? null : ec.findType(name);
070 }
071
072 public VariableInfo findVariable(String name) {
073 if (name.equals(ParameterDefinition.getName())) {
074 return ParameterDefinition;
075 }
076
077 Scope ec = findParent(Scope.class);
078 return ec == null ? null : ec.findVariable(name);
079 }
080
081 }