public virtual void Visit(PropertyCallExp node, bool isOperationArgument) { AssignIsPartOfIteratorBody(node); PSMPath psmPath = PSMPathBuilder.BuildPSMPath(node, OclContext, VariableNamer, buildPathParams); string xpath = psmPath.ToXPath(delayFirstVariableStep: true); if (!isOperationArgument) { string wrapString = OperationHelper.WrapAtomicOperand(node, null, 0); xpath = string.Format(wrapString, xpath); } var steps = psmPath.Steps.OfType <IPSMPathStepWithCardinality>().Where(s => s.Lower == 0); if (steps.Any()) { Log.AddWarningTaggedFormat("Navigation using '{0}' may result in 'null', which will be an empty sequence in XPath. ", node, steps.ConcatWithSeparator(s => s.ToXPath(), ",")); } TranslationOption option = new TranslationOption(); if (psmPath.StartingVariableExp != null) { option.ContextVariableSubstitution = true; option.StartingVariable = psmPath.StartingVariableExp.referredVariable; } option.FormatString = xpath; SubexpressionTranslations.AddTranslationOption(node, option, psmPath.SubExpressions.ToArray()); }