Value (@Nullable UExpression arg, @Nullable Set<? super UExpression> processed) { if (arg instanceof UInjectionHost) { return Value.of((UInjectionHost)arg); } if (arg instanceof UCallExpression call) { UExpression returnValue = StringFlowUtil.getReturnValue(call); if (arg.equals(returnValue)) { return null; } if (returnValue != null) { if (processed == null) { processed = new HashSet<>(); } if (processed.add(returnValue)) { return getTitleValue(returnValue, processed); } } Value fromProperty = Value.of(getPropertyArgument(call), call.getValueArgumentCount() > 1); if (fromProperty != null) { return fromProperty; } } if (arg instanceof UResolvable) { PsiElement target = ((UResolvable)arg).resolve(); if (target instanceof PsiModifierListOwner) { Value value = Value.of(NlsInfo.forModifierListOwner((PsiModifierListOwner)target)); if (value != null) { return value; } } PsiType type = arg.getExpressionType(); if (type != null) { return Value.of(NlsInfo.forType(type)); } } return null; }