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;
}