public boolean equal()

in yoko-core/src/main/java/org/apache/yoko/orb/CORBA/TypeCode.java [469:618]


    public boolean equal(org.omg.CORBA.TypeCode t) {
        if (t == null)
            return false;

        if (t == this)
            return true;

        if (recId_ != null) {
            if (recType_ == null)
                throw new org.omg.CORBA.BAD_TYPECODE(
                        org.apache.yoko.orb.OB.MinorCodes
                                .describeBadTypecode(org.apache.yoko.orb.OB.MinorCodes.MinorIncompleteTypeCode),
                        org.apache.yoko.orb.OB.MinorCodes.MinorIncompleteTypeCode,
                        org.omg.CORBA.CompletionStatus.COMPLETED_NO);
            return recType_.equal(t);
        }

        TypeCode tc = null;
        try {
            tc = (TypeCode) t;
        } catch (ClassCastException ex) {
            tc = _OB_convertForeignTypeCode(t);
        }

        if (tc.recId_ != null) {
            if (tc.recType_ == null)
                throw new org.omg.CORBA.BAD_PARAM(
                        org.apache.yoko.orb.OB.MinorCodes
                                .describeBadParam(org.apache.yoko.orb.OB.MinorCodes.MinorIncompleteTypeCodeParameter),
                        org.apache.yoko.orb.OB.MinorCodes.MinorIncompleteTypeCodeParameter,
                        org.omg.CORBA.CompletionStatus.COMPLETED_NO);
            return equal(tc.recType_);
        }

        if (kind_ != tc.kind_)
            return false;

        if (kind_ == org.omg.CORBA.TCKind.tk_objref
                || kind_ == org.omg.CORBA.TCKind.tk_struct
                || kind_ == org.omg.CORBA.TCKind.tk_union
                || kind_ == org.omg.CORBA.TCKind.tk_enum
                || kind_ == org.omg.CORBA.TCKind.tk_alias
                || kind_ == org.omg.CORBA.TCKind.tk_value
                || kind_ == org.omg.CORBA.TCKind.tk_value_box
                || kind_ == org.omg.CORBA.TCKind.tk_native
                || kind_ == org.omg.CORBA.TCKind.tk_abstract_interface
                || kind_ == org.omg.CORBA.TCKind.tk_except
                || kind_ == org.omg.CORBA_2_4.TCKind.tk_local_interface) {
            if (!id_.equals("") || !tc.id_.equals("")) {
                if (id_.equals(tc.id_))
                    return true;
                else
                    return false;
            }

            if (!name_.equals("") || !tc.name_.equals("")) {
                if (!name_.equals(tc.name_))
                    return false;
            }
        }

        if (kind_ == org.omg.CORBA.TCKind.tk_struct
                || kind_ == org.omg.CORBA.TCKind.tk_union
                || kind_ == org.omg.CORBA.TCKind.tk_enum
                || kind_ == org.omg.CORBA.TCKind.tk_value
                || kind_ == org.omg.CORBA.TCKind.tk_except) {
            if (memberNames_.length != tc.memberNames_.length)
                return false;

            for (int i = 0; i < memberNames_.length; i++) {
                if (!memberNames_[i].equals("")
                        || !tc.memberNames_[i].equals("")) {
                    if (!memberNames_[i].equals(tc.memberNames_[i]))
                        return false;
                }
            }
        }

        if (kind_ == org.omg.CORBA.TCKind.tk_struct
                || kind_ == org.omg.CORBA.TCKind.tk_union
                || kind_ == org.omg.CORBA.TCKind.tk_value
                || kind_ == org.omg.CORBA.TCKind.tk_except) {
            if (memberTypes_.length != tc.memberTypes_.length)
                return false;

            for (int i = 0; i < memberTypes_.length; i++)
                if (!memberTypes_[i].equal(tc.memberTypes_[i]))
                    return false;
        }

        if (kind_ == org.omg.CORBA.TCKind.tk_union) {
            if (labels_.length != tc.labels_.length)
                return false;

            for (int i = 0; i < labels_.length; i++) {
                if (!labels_[i].type().equal(tc.labels_[i].type()))
                    return false;

                if (!labels_[i].equal(tc.labels_[i]))
                    return false;
            }

            if (!discriminatorType_.equal(tc.discriminatorType_))
                return false;
        }

        if (kind_ == org.omg.CORBA.TCKind.tk_string
                || kind_ == org.omg.CORBA.TCKind.tk_wstring
                || kind_ == org.omg.CORBA.TCKind.tk_sequence
                || kind_ == org.omg.CORBA.TCKind.tk_array) {
            if (length_ != tc.length_)
                return false;
        }

        if (kind_ == org.omg.CORBA.TCKind.tk_sequence
                || kind_ == org.omg.CORBA.TCKind.tk_array
                || kind_ == org.omg.CORBA.TCKind.tk_value_box
                || kind_ == org.omg.CORBA.TCKind.tk_alias) {
            if (!contentType_.equal(tc.contentType_))
                return false;
        }

        if (kind_ == org.omg.CORBA.TCKind.tk_fixed) {
            if (fixedDigits_ != tc.fixedDigits_
                    || fixedScale_ != tc.fixedScale_)
                return false;
        }

        if (kind_ == org.omg.CORBA.TCKind.tk_value) {
            if (memberVisibility_.length != tc.memberVisibility_.length)
                return false;

            for (int i = 0; i < memberVisibility_.length; i++)
                if (memberVisibility_[i] != tc.memberVisibility_[i])
                    return false;

            if (typeModifier_ != tc.typeModifier_)
                return false;

            if (concreteBaseType_ != null || tc.concreteBaseType_ != null) {
                if (!(concreteBaseType_ != null && tc.concreteBaseType_ != null))
                    return false;

                if (!(concreteBaseType_.equal(tc.concreteBaseType_)))
                    return false;
            }
        }

        return true;
    }