private static bool TryResolveLocalReference <TElement>(OraclePlSqlReference plSqlReference, IEnumerable <TElement> elements, ICollection <TElement> resolvedCollection) where TElement : OraclePlSqlElement { if (plSqlReference.OwnerNode != null) { return(false); } var program = plSqlReference.PlSqlProgram; do { foreach (var element in elements) { var isLocal = program == element.Owner; if (resolvedCollection.Count > 0 && !isLocal) { break; } var matchVisitor = new OraclePlSqlReferenceElementMatchVisitor(plSqlReference, program); element.Accept(matchVisitor); if (matchVisitor.IsMatch) { resolvedCollection.Add(element); } } if (resolvedCollection.Count > 0) { return(true); } program = program.Owner; } while (resolvedCollection.Count == 0 && program != null); return(false); }
public OraclePlSqlReferenceElementMatchVisitor(OraclePlSqlReference plSqlReference, OraclePlSqlProgram currentProgram) { _plSqlReference = plSqlReference; _currentProgram = currentProgram; }