package com.jetbrains.lang.dart.ide.editor;
import com.intellij.openapi.util.Condition;
import com.intellij.psi.PsiElement;
import com.intellij.psi.util.PsiTreeUtil;
import com.jetbrains.lang.dart.DartTokenTypes;
import com.jetbrains.lang.dart.psi.DartExpression;
import com.jetbrains.lang.dart.util.UsefulPsiTreeUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
public class DartSelectionFilter implements Condition<PsiElement> {
@Override
public boolean value(@NotNull final PsiElement psiElement) {
if (getSiblingSemicolonIfExpression(psiElement) != null) {
return false; // DartWordSelectionHandler will select this expression with the following semicolon
}
return true;
}
@Nullable
public static PsiElement getSiblingSemicolonIfExpression(@NotNull final PsiElement psiElement) {
if ((psiElement instanceof DartExpression)) {
final PsiElement last = PsiTreeUtil.getDeepestLast(psiElement);
if (last.getNode().getElementType() != DartTokenTypes.SEMICOLON) {
final PsiElement next = UsefulPsiTreeUtil.getNextSiblingSkippingWhiteSpacesAndComments(psiElement);
if (next != null && next.getNode().getElementType() == DartTokenTypes.SEMICOLON) {
return next;
}
}
}
return null;
}
}