summaryrefslogtreecommitdiff
path: root/src/main/java/io/devnulllabs/openjava/mop/AnonymousClassEnvironment.java
blob: 4c927a23eccbf62f48315acdf9a9ab2820e6589c (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
/*
 * AnonymousClassEnvironment.java
 *
 * Aug 2, 2002 by Michiaki Tatsubori
 */
package io.devnulllabs.openjava.mop;

import io.devnulllabs.openjava.ptree.FieldDeclaration;
import io.devnulllabs.openjava.ptree.MemberDeclarationList;

public class AnonymousClassEnvironment extends ClassEnvironment
{
    private MemberDeclarationList members;
    private String base;

    public AnonymousClassEnvironment(Environment e, String baseClassName, MemberDeclarationList mdecls) {
    super(e);
        this.members = mdecls;
        this.base = baseClassName;
    }

    public String getClassName() {
    return "<anonymous class>";
    }

    public String toString() {
        return super.toString();
    }

    public OJClass lookupBind(String name) {
        for (int i = 0, len = members.size(); i < len; ++i) {
            if (!(members.get(i) instanceof FieldDeclaration))  continue;
            FieldDeclaration field = (FieldDeclaration) members.get(i);
            if (! name.equals(field.getName()))  continue;
            return lookupClass(field.getName());
        }
        OJField field = pickupField(lookupClass(base), name);
        if (field != null)  return field.getType();
        /* not a field name of this class */
        return parent.lookupBind(name);
    }

    /**
     * Returns the qualified class name.
     *
     * @return the qualified name of the class which organizes this
     *         environment.
     */
    public String currentClassName() {
    return getClassName();
    }

}