summaryrefslogblamecommitdiff
path: root/sources/scalac/atree/AClass.java
blob: 66cf4693e13163b63bfac2e633543085365d0220 (plain) (tree)










































































































































                                                                               
/*     ____ ____  ____ ____  ______                                     *\
**    / __// __ \/ __// __ \/ ____/    SOcos COmpiles Scala             **
**  __\_ \/ /_/ / /__/ /_/ /\_ \       (c) 2002, LAMP/EPFL              **
** /_____/\____/\___/\____/____/                                        **
\*                                                                      */

// $Id$

package scalac.atree;

import java.util.Map;
import java.util.LinkedHashMap;

import scalac.symtab.Symbol;
import scalac.symtab.Type;
import scalac.util.Debug;

/** This class represents an attributed class. */
public class AClass extends ARepository {

    //########################################################################
    // Private Fields

    /** The class symbol */
    private final Symbol symbol;

    /** The symbol to field map */
    private final Map/*<Symbol,AField>*/ fields;

    /** The symbol to method map */
    private final Map/*Symbol,AMethod*/ methods;

    //########################################################################
    // Public Constructors

    /** Initializes this instance. */
    public AClass(Symbol symbol) {
        this.symbol = symbol;
        this.fields = new LinkedHashMap();
        this.methods = new LinkedHashMap();
    }

    //########################################################################
    // Public Methods

    /** Returns the symbol of this class. */
    public Symbol symbol() {
        return symbol;
    }

    /** Is this class public? */
    public boolean isPublic() {
        return symbol().isPublic();
    }

    /** Is this class private? */
    public boolean isPrivate() {
        return symbol().isPrivate();
    }

    /** Is this class protected? */
    public boolean isProtected() {
        return symbol().isProtected();
    }

    /** Is this class final? */
    public boolean isFinal() {
        return false; // !!!
    }

    /** Is this class abstract? */
    public boolean isAbstract() {
        return symbol.isAbstractClass();
    }

    /** Is this class an interface? */
    public boolean isInterface() {
        return symbol.isInterface();
    }

    /** Is this class deprecated? */
    public boolean isDeprecated() {
        return false; // !!!
    }

    /** Is this class synthetic? */
    public boolean isSynthetic() {
        return symbol().isSynthetic();
    }

    /** Adds the given field to this class. */
    public void addField(AField field) {
        assert !fields.containsKey(field.symbol()): field;
        fields.put(field.symbol(), field);
    }

    /** Adds the given method to this class. */
    public void addMethod(AMethod method) {
        assert !methods.containsKey(method.symbol()): method;
        methods.put(method.symbol(), method);
    }

    /** Returns the fields of this class. */
    public AField[] fields() {
        return (AField[])fields.values().toArray(new AField[fields.size()]);
    }

    /** Returns the methods of this class. */
    public AMethod[] methods() {
        return(AMethod[])methods.values().toArray(new AMethod[methods.size()]);
    }

    /** Returns the type parameters of this class. */
    public Symbol[] tparams() {
        return symbol.typeParams();
    }

    /** Returns the value parameters of this class. */
    public Symbol[] vparams() {
        return symbol.valueParams();
    }

    /** Returns the parent types of this class. */
    public Type[] parents() {
        switch (symbol.info()) {
        case CompoundType(Type[] parts, _):
            return parts;
        default:
            throw Debug.abort("illegal case", symbol.info());
        }
    }

    /** Returns a string representation of this class. */
    public String toString() {
        return new ATreePrinter().printClass(this).toString();
    }

    //########################################################################
}