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.MethodInfo;
010    import org.mesopotamia.lang.java.ref.TypeInfo;
011    import org.mesopotamia.lang.java.ref.TypeSpecInfo;
012    import org.mesopotamia.lang.java.ref.VariableInfo;
013    
014    public class Null extends PrimaryExpression {
015            
016            public static final String NULL_FCN = "(null)";
017    
018            public static final TypeInfo NULL_TYPE_INFO = new TypeInfo() {
019    
020                    public MethodInfo findConstructor(String[] argumentTypes) {
021                            return null;
022                    }
023    
024                    public TypeInfo findNestedType(String name) {
025                            return null;
026                    }
027    
028                    public MethodInfo findTypeMethod(String name, String[] argumentTypes) {
029                            return null;
030                    }
031    
032                    public VariableInfo findTypeVariable(String name) {
033                            return null;
034                    }
035    
036                    /**
037                     * Null is compatible with object types.
038                     */
039                    public boolean isKindOf(String superFcn) {
040                            return BuiltInType.getBuiltInType(superFcn)==null;
041                    }
042    
043                    public TypeInfo getDeclaringType() {
044                            return null;
045                    }
046    
047                    public String getFcn() {
048                            return NULL_FCN;
049                    }
050    
051                    @SuppressWarnings("unchecked")
052                    public List<String> getModifiers() {
053                            return emptyList;
054                    }
055    
056                    public String getName() {
057                            return NULL_FCN;
058                    }
059                    
060            };
061            
062            public static final TypeSpecInfo NULL_TYPE_SPEC_INFO = new TypeSpecInfo() {
063    
064                    public int getDimensions() {
065                            return -1;
066                    }
067    
068                    public TypeInfo getTypeInfo() {
069                            return NULL_TYPE_INFO;
070                    }
071                    
072            };
073    
074            public Null(NodeData xData, Class<?> context, Scan scan,
075                            RepositoryLanguage language, Object environment) throws MesopotamiaException {
076                    super(xData, context, scan, language, environment);
077    
078                    // Select attributes
079    
080            }
081            
082            @Override
083            public TypeSpecInfo getTypeSpecInfo() {
084                    return NULL_TYPE_SPEC_INFO;
085            }
086    
087    }