void (@NotNull PsiExpression scope, @NotNull PsiExpression expression, Collection<PatternVariableWrapper> candidates, boolean strict) { while (true) { if (expression instanceof PsiParenthesizedExpression) { expression = ((PsiParenthesizedExpression)expression).getExpression(); } else if (expression instanceof PsiPrefixExpression && ((PsiPrefixExpression)expression).getOperationTokenType().equals(JavaTokenType.EXCL)) { expression = ((PsiPrefixExpression)expression).getOperand(); } else { break; } } if (expression instanceof PsiInstanceOfExpression) { PsiPattern pattern = ((PsiInstanceOfExpression)expression).getPattern(); if (pattern instanceof PsiTypeTestPattern || pattern instanceof PsiDeconstructionPattern) { collectPatternVariableCandidates(pattern, scope, null, candidates, strict); } } if (expression instanceof PsiPolyadicExpression) { PsiPolyadicExpression polyadicExpression = (PsiPolyadicExpression)expression; IElementType tokenType = polyadicExpression.getOperationTokenType(); if (tokenType.equals(JavaTokenType.ANDAND) || tokenType.equals(JavaTokenType.OROR)) { for (PsiExpression operand : polyadicExpression.getOperands()) { collectPatternVariableCandidates(scope, operand, candidates, strict); } } } }