    001    /* Copyright 2000, 2001, Compaq Computer Corporation */
    002
    003    package escjava.tc;
    004
    005    import javafe.ast.ModifierPragmaVec;
    006    import escjava.ast.TagConstants;
    007
    008    import javafe.tc.TypeSig;
    009    import javafe.util.Info;
    010
    011    public class TypeCheck extends javafe.tc.TypeCheck
    012    {
    013        /**
    014         * Creates a singleton instance of this class, and sets the <code>inst</code>
    015         * field to this instance. Only one instance should be created.  Also initializes
    016         * {@link javafe.tc.PrepTypeDeclaration}.
    017         */
    018        public TypeCheck() {
    019            inst = this;
    020            new escjava.tc.PrepTypeDeclaration();
    021        }
    022
    023        /**
    024         * Called to obtain the algorithm for performing name resolution and type
    025         * checking.
    026         *
    027         * @return an instance of <code>escjava.tc.FlowInsensitiveChecks</code>.
    028         */
    029        public javafe.tc.FlowInsensitiveChecks makeFlowInsensitiveChecks() {
    030            return new escjava.tc.FlowInsensitiveChecks();
    031        }
    032
    033        /**
    034         * Override {@link javafe.tc.TypeCheck#canAccess} to account for
    035         * <code>spec_public</code>.
    036         */
    037        public boolean canAccess(TypeSig from, TypeSig target,
    038                                 int modifiers,
    039                                 ModifierPragmaVec pmodifiers) {
    040            if (super.canAccess(from, target, modifiers, pmodifiers))
    041                return true;
    042
    043            if (!escjava.tc.FlowInsensitiveChecks.inAnnotation)
    044                return false;
    045
    046            if (pmodifiers == null)
    047                return false;
    048
    049            for (int i = 0; i < pmodifiers.size(); i++) {
    050                if (pmodifiers.elementAt(i).getTag() == TagConstants.SPEC_PUBLIC)
    051                    return true;
    052            }
    053
    054            return false;
    055        }
    056    } // end of class TypeCheck
    057
    058    /*
    059     * Local Variables:
    060     * Mode: Java
    061     * fill-column: 85
    062     * End:
    063     */