| 3453 | } |
| 3454 | |
| 3455 | void DbgExprEvaluator::AutocompleteCheckType(BfTypeReference* typeReference) |
| 3456 | { |
| 3457 | if (!IsAutoCompleteNode(typeReference)) |
| 3458 | return; |
| 3459 | |
| 3460 | if (auto namedTypeRef = BfNodeDynCast <BfNamedTypeReference>(typeReference)) |
| 3461 | { |
| 3462 | String filter = namedTypeRef->ToString(); |
| 3463 | mAutoComplete->mInsertStartIdx = namedTypeRef->GetSrcStart(); |
| 3464 | mAutoComplete->mInsertEndIdx = namedTypeRef->GetSrcEnd(); |
| 3465 | |
| 3466 | AutocompleteAddTopLevelTypes(filter); |
| 3467 | } |
| 3468 | else if (auto qualifiedTypeRef = BfNodeDynCast<BfQualifiedTypeReference>(typeReference)) |
| 3469 | { |
| 3470 | if (IsAutoCompleteNode(qualifiedTypeRef->mLeft)) |
| 3471 | { |
| 3472 | AutocompleteCheckType(qualifiedTypeRef->mLeft); |
| 3473 | return; |
| 3474 | } |
| 3475 | |
| 3476 | auto dbgType = ResolveTypeRef(qualifiedTypeRef->mLeft); |
| 3477 | if (dbgType != NULL) |
| 3478 | { |
| 3479 | String filter; |
| 3480 | if (qualifiedTypeRef->mRight != NULL) |
| 3481 | { |
| 3482 | filter = qualifiedTypeRef->mRight->ToString(); |
| 3483 | mAutoComplete->mInsertStartIdx = qualifiedTypeRef->mRight->GetSrcStart(); |
| 3484 | mAutoComplete->mInsertEndIdx = qualifiedTypeRef->mRight->GetSrcEnd(); |
| 3485 | } |
| 3486 | else |
| 3487 | { |
| 3488 | mAutoComplete->mInsertStartIdx = qualifiedTypeRef->mDot->GetSrcEnd(); |
| 3489 | mAutoComplete->mInsertEndIdx = qualifiedTypeRef->mDot->GetSrcEnd(); |
| 3490 | } |
| 3491 | AutocompleteAddMembers(dbgType, false, false, filter); |
| 3492 | } |
| 3493 | } |
| 3494 | else if (auto elementedTypeRef = BfNodeDynCast<BfElementedTypeRef>(typeReference)) |
| 3495 | { |
| 3496 | AutocompleteCheckType(elementedTypeRef->mElementType); |
| 3497 | } |
| 3498 | } |
| 3499 | |
| 3500 | void DbgExprEvaluator::AutocompleteAddTopLevelTypes(const StringImpl& filter) |
| 3501 | { |
nothing calls this directly
no test coverage detected