@Override public boolean visitIfExpression(@NotNull UIfExpression node) { UExpression condition = node.getCondition(); UExpression body = node.getThenBranch(); UElement elseBody = node.getElseBranch(); condition.accept(this); if (body != null) { boolean wasReachable = mReachable; body.accept(this); mReachable = wasReachable; } if (elseBody != null) { boolean wasReachable = mReachable; elseBody.accept(this); mReachable = wasReachable; } return false; }
@Nullable private static String getLhs(@NonNull UCallExpression call) { UElement parent = call.getParent(); if (UastBinaryExpressionWithTypeUtils.isTypeCast(parent)) { assert parent != null; parent = parent.getParent(); } if (parent instanceof UVariable) { UVariable vde = (UVariable) parent; return vde.getName(); } else if (parent instanceof UBinaryExpression) { UBinaryExpression be = (UBinaryExpression) parent; UExpression left = be.getLeftOperand(); if (left instanceof USimpleReferenceExpression || left instanceof UQualifiedExpression) { return be.getLeftOperand().toString(); } else if (left instanceof UArrayAccessExpression) { UArrayAccessExpression aa = (UArrayAccessExpression) left; return aa.getReceiver().toString(); } } return null; }
private static boolean isReachableFrom( @NonNull UElement method, @NonNull UCallExpression from, @NonNull UCallExpression to) { ReachableVisitor visitor = new ReachableVisitor(from, to); method.accept(visitor); return visitor.isReachable(); }