From 7aa6fb5e22b283798921ddec58dfa42cf7eb4fbd Mon Sep 17 00:00:00 2001 From: peter Date: Mon, 18 Sep 2017 10:08:50 +0200 Subject: [PATCH] java mad testing: avoid some invalid completion expectations --- .../java/propertyBased/JavaCompletionPolicy.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/java/java-tests/testSrc/com/intellij/java/propertyBased/JavaCompletionPolicy.java b/java/java-tests/testSrc/com/intellij/java/propertyBased/JavaCompletionPolicy.java index 094b200bfd87..2ca548fef2f2 100644 --- a/java/java-tests/testSrc/com/intellij/java/propertyBased/JavaCompletionPolicy.java +++ b/java/java-tests/testSrc/com/intellij/java/propertyBased/JavaCompletionPolicy.java @@ -15,12 +15,14 @@ */ package com.intellij.java.propertyBased; +import com.intellij.lang.ASTNode; import com.intellij.lang.jvm.JvmModifier; import com.intellij.psi.*; import com.intellij.psi.impl.source.resolve.reference.impl.providers.FileReference; import com.intellij.psi.util.PsiTreeUtil; import com.intellij.psi.util.PsiUtil; import com.intellij.testFramework.propertyBased.CompletionPolicy; +import com.siyeh.ig.psiutils.ExpressionUtils; import org.jetbrains.annotations.NotNull; import java.util.Arrays; @@ -56,7 +58,8 @@ class JavaCompletionPolicy extends CompletionPolicy { private static boolean isAdoptedOrphanPsiAfterClassEnd(PsiElement element) { PsiClass topmostClass = PsiTreeUtil.getTopmostParentOfType(element, PsiClass.class); if (topmostClass != null) { - PsiElement rBrace = topmostClass.getRBrace(); + ASTNode rBrace = topmostClass.getNode().findChildByType(JavaTokenType.RBRACE); + // not PsiClass#getRBrace, because we need the first one, and invalid classes can contain several '}' if (rBrace != null && rBrace.getTextRange().getStartOffset() < element.getTextRange().getStartOffset()) return true; } return false; @@ -77,6 +80,11 @@ class JavaCompletionPolicy extends CompletionPolicy { // https://youtrack.jetbrains.com/issue/IDEA-174744 on red code return false; } + if (PsiTreeUtil.getParentOfType(ref, PsiAnnotation.class) != null) { + if (target instanceof PsiMethod || target instanceof PsiField && !ExpressionUtils.isConstant((PsiField)target)) { + return false; // red code; + } + } if (isStaticWithInstanceQualifier(ref, target)) { return false; }