private int match()

in kerby-common/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1CollectionType.java [135:185]


    private int match(int lastPos, Asn1ParseResult parseItem) {
        int foundPos = -1;
        for (int i = lastPos + 1; i < fieldInfos.length; ++i) {
            Asn1Type fieldValue = fields[i];
            Asn1FieldInfo fieldInfo = fieldInfos[i];

            if (fieldInfo.isTagged()) {
                if (!parseItem.isContextSpecific()) {
                    continue;
                }
                if (fieldInfo.getTagNo() == parseItem.tagNo()) {
                    foundPos = i;
                    break;
                }
            } else if (fieldValue != null) {
                if (fieldValue.tag().equals(parseItem.tag())) {
                    foundPos = i;
                    break;
                } else if (fieldValue instanceof Asn1Choice) {
                    Asn1Choice aChoice = (Asn1Choice) fieldValue;
                    if (aChoice.matchAndSetValue(parseItem.tag())) {
                        foundPos = i;
                        break;
                    }
                } else if (fieldValue instanceof Asn1Any) {
                    foundPos = i;
                    break;
                }
            } else {
                if (fieldInfo.getFieldTag().equals(parseItem.tag())) {
                    foundPos = i;
                    break;

                } else if (Asn1Choice.class
                        .isAssignableFrom(fieldInfo.getType())) {
                    Asn1Choice aChoice = (Asn1Choice) (fields[i] = fieldInfo
                            .createFieldValue());
                    if (aChoice.matchAndSetValue(parseItem.tag())) {
                        foundPos = i;
                        break;
                    }
                } else if (Asn1Any.class
                        .isAssignableFrom(fieldInfo.getType())) {
                    foundPos = i;
                    break;
                }
            }
        }

        return foundPos;
    }