diff --git a/java/java-impl/src/com/intellij/codeInsight/CodeInsightUtil.java b/java/java-impl/src/com/intellij/codeInsight/CodeInsightUtil.java index d6342d630cb0..c421db0aaa34 100644 --- a/java/java-impl/src/com/intellij/codeInsight/CodeInsightUtil.java +++ b/java/java-impl/src/com/intellij/codeInsight/CodeInsightUtil.java @@ -24,6 +24,7 @@ import com.intellij.util.FilteredQuery; import com.intellij.util.Processor; import com.intellij.util.Query; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import java.util.*; @@ -31,17 +32,20 @@ import java.util.*; * */ public class CodeInsightUtil { + @Nullable public static PsiExpression findExpressionInRange(PsiFile file, int startOffset, int endOffset) { if (!file.getViewProvider().getLanguages().contains(StdLanguages.JAVA)) return null; - PsiElement element2 = file.getViewProvider().findElementAt(endOffset - 1, StdLanguages.JAVA); - if (element2 instanceof PsiJavaToken) { - final PsiJavaToken token = (PsiJavaToken)element2; - final IElementType tokenType = token.getTokenType(); - if (tokenType.equals(JavaTokenType.SEMICOLON)) { - endOffset = element2.getTextRange().getStartOffset(); + PsiExpression expression = findElementInRange(file, startOffset, endOffset, PsiExpression.class); + if (expression == null && findStatementsInRange(file, startOffset, endOffset).length == 0) { + PsiElement element2 = file.getViewProvider().findElementAt(endOffset - 1, StdLanguages.JAVA); + if (element2 instanceof PsiJavaToken) { + final PsiJavaToken token = (PsiJavaToken)element2; + final IElementType tokenType = token.getTokenType(); + if (tokenType.equals(JavaTokenType.SEMICOLON)) { + expression = findElementInRange(file, startOffset, element2.getTextRange().getStartOffset(), PsiExpression.class); + } } } - final PsiExpression expression = findElementInRange(file, startOffset, endOffset, PsiExpression.class); if (expression instanceof PsiReferenceExpression && expression.getParent() instanceof PsiMethodCallExpression) return null; return expression; }