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.TypeInfo;
009    import org.mesopotamia.lang.java.ref.TypeSpecInfo;
010    
011    public class ConstructorDefinition extends Operation implements MethodInfo {
012    
013            public ConstructorDefinition(NodeData xData, Class<?> context, Scan scan,
014                            RepositoryLanguage language, Object environment) throws MesopotamiaException {
015                    super(xData, context, scan, language, environment);
016    
017                    // Select attributes
018    
019            }
020    
021            public String getFcn() {
022                    TypeInfo dt = getDeclaringType();
023                    if (dt==null) {
024                            return null;
025                    }
026                    StringBuffer ret = new StringBuffer();
027                    ret.append(MethodDefinition.CONSTRUCTOR_NAME);
028                    ret.append("(");
029                    boolean first = true;
030                    for (TypeSpecInfo pd: getParameterTypes()) {
031                            if (pd==null) {
032                                    return null;
033                            }
034                            if (first) {
035                                    first = false;
036                            } else {
037                                    ret.append(", ");
038                            }
039                            TypeInfo pTypeInfo = pd.getTypeInfo();
040                            if (pTypeInfo == null) {
041                                    return null;
042                            }
043                            ret.append(pTypeInfo.getFcn());
044                            for (int i=0; i<pd.getDimensions(); ++i) {
045                                    ret.append(TypeSpecInfo.ARRAY_BRACKETS);
046                            }
047                    }
048                    ret.append(")");
049                    first = true;
050                    for (TypeInfo et: getExceptionTypes()) {
051                            if (et==null) {
052                                    return null;
053                            }
054                            if (first) {
055                                    ret.append(" throws ");
056                                    first = false;
057                            } else {
058                                    ret.append(", ");
059                            }
060                            ret.append(et.getFcn());
061                    }
062                    return ret.toString();
063            }
064    
065            public TypeSpecInfo getReturnType() {
066                    return new TypeSpecInfo() {
067    
068                            public int getDimensions() {
069                                    return 0;
070                            }
071    
072                            public TypeInfo getTypeInfo() {
073                                    return getDeclaringType();
074                            }
075                            
076                    };
077            }
078    
079            public String getName() {
080                    return MethodDefinition.CONSTRUCTOR_NAME;
081            }
082    
083    }