summaryrefslogtreecommitdiff
path: root/src/main/java/io/devnulllabs/openjava/mop/Environment.java
blob: 635b22c157477289969fee1a694488c8304a8b07 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
/*
 * Environment.java
 *
 *
 * Jul 28, 1998 by mich
 */
package io.devnulllabs.openjava.mop;




public abstract class Environment
{

    protected Environment parent;

    public Environment() {
        parent = null;
    }

    public Environment( Environment e ) {
        parent = e;
    }

    public abstract String toString();

    /**
     * Gets the package name.
     * @return Package name or null
     */
    public String getPackage()
    {
        if (parent == null) {
        System.err.println( "Environment.getPackage() : not specified." );
        return null;
    }
        return parent.getPackage();
    }

    /**
     * Looks a class object up.
     *
     * @param name the name of the fully-qualified name of the class
     *             looked for
     * @return Null or class found in lookup
     */
    public OJClass lookupClass( String name ) {
        if (parent == null) {
        System.err.println( "Environment.lookupClass() : not specified." );
        return null;
    }
        return parent.lookupClass( name );
    }

    /**
     * Records a class object.
     *
     * @param    name        the fully-qualified name of the class
     * @param    clazz        the class object associated with that name
     */
    public abstract void record( String name, OJClass clazz );

    /**
     * Looks up a binded type of the given variable or field name.
     *
     * @param name the fully-qualified name of the class
     * @param clazz the class object associated with that name
     * @return Class bind lookup or null
     */
    public OJClass lookupBind( String name ) {
        if (parent == null)  return null;
        return parent.lookupBind( name );
    }

    /**
     * binds a name to the class type.
     *
     * @param name the fully-qualified name of the class
     * @param clazz the class object associated with that name
     */
    public abstract void bindVariable( String name, OJClass clazz );

    /**
     * Obtains the fully-qualified name of the given class name.
     *
     * @param name a simple class name or a fully-qualified class name
     * @return the fully-qualified name of the class
     */
    public String toQualifiedName( String name ) {
    if (parent == null)  return name;
    return parent.toQualifiedName( name );
    }

    /**
     * Tests if the given name is a qualified name or not.
     * @param name String to test if qualified or not
     * @return result
     */
    public static boolean isQualifiedName( String name ) {
        return name.indexOf( '.' ) >= 0;
    }

    /**
     * Converts a fully-qualified name to the corresponding simple-name.
     *
     * <pre>
     * For example :
     *   toSimpleName( "java.lang.Class" ) returns  "Class".
     * </pre>
     *
     * @param qualified_name Name to convert
     * @return the given name <I>as is</I> if it is not a qualified
     * name
     */
    public static String toSimpleName( String qualified_name ) {
        int index = qualified_name.lastIndexOf( '.' );
        if (index < 0) {
        return qualified_name;
        } else {
        return qualified_name.substring( index + 1 );
        }
    }

    /**
     * Converts a fully-qualified name to the corresponding package name.
     *
     * <pre>
     * For example :
     *   toPackageName( "java.lang.Class" ) returns  "java.lang".
     *   toPackageName( "MyClass" ) returns  "".
     * </pre>
     *
     * @param qualified_name Name to convert to package name
     * @return the given name <I>as is</I> if it is not a qualified
     * name
     */
    public static String toPackageName( String qualified_name ) {
        int index = qualified_name.lastIndexOf( '.' );
        return (index < 0) ? "" : qualified_name.substring( 0, index );
    }

    public String currentClassName() {
        if (parent == null)  return null;
        return parent.currentClassName();
    }

    /******************************/
    public boolean isRegisteredModifier( String str ) {
        if (parent == null)  return false;
        return parent.isRegisteredModifier( str );
    }

}