[java] multifaceted switch labels: SSR fixes (IDEA-196643)

This commit is contained in:
Roman Shevchenko
2018-11-09 19:02:53 +01:00
parent ddaa6c909d
commit e038ecc775
2 changed files with 17 additions and 11 deletions
@@ -875,8 +875,11 @@ public class JavaStructuralSearchProfile extends StructuralSearchProfile {
if (grandParent instanceof PsiAssertStatement) return ((PsiAssertStatement)grandParent).getAssertDescription() == parent;
if (grandParent instanceof PsiNameValuePair) return ((PsiNameValuePair)grandParent).getValue() == parent;
}
if (grandParent instanceof PsiSwitchLabelStatement) {
return ((PsiSwitchLabelStatement)grandParent).getEnclosingSwitchStatement() != null;
if (grandParent instanceof PsiExpressionList) {
PsiElement label = grandParent.getParent();
if (label instanceof PsiSwitchLabelStatementBase) {
return ((PsiSwitchLabelStatementBase)label).getEnclosingSwitchStatement() != null;
}
}
if (grandParent instanceof PsiVariable) {
return ((PsiVariable)grandParent).getInitializer() == parent;
@@ -912,7 +915,7 @@ public class JavaStructuralSearchProfile extends StructuralSearchProfile {
final PsiElement grandParent = parent.getParent();
if (grandParent instanceof PsiPolyadicExpression) return true;
if (grandParent instanceof PsiSwitchLabelStatement) return true;
if (grandParent instanceof PsiExpressionList && grandParent.getParent() instanceof PsiSwitchLabelStatementBase) return true;
if (grandParent instanceof PsiExpressionStatement && hasSemicolon(grandParent)) return true;
if (grandParent instanceof PsiReferenceList) {
final PsiElement greatGrandParent = grandParent.getParent();
@@ -929,10 +932,10 @@ public class JavaStructuralSearchProfile extends StructuralSearchProfile {
final PsiElement grandParent = parent.getParent();
if (grandParent instanceof PsiCatchSection && parent instanceof PsiParameter) return true;
if (grandParent instanceof PsiAnnotation && !(grandParent.getParent().getNextSibling() instanceof PsiErrorElement)) return true;
if (grandParent instanceof PsiParameterList || grandParent instanceof PsiExpressionList ||
if (grandParent instanceof PsiParameterList || grandParent instanceof PsiArrayInitializerMemberValue ||
(grandParent instanceof PsiExpressionList && !(grandParent.getParent() instanceof PsiSwitchLabelStatementBase)) ||
grandParent instanceof PsiTypeParameterList || grandParent instanceof PsiResourceList ||
grandParent instanceof PsiResourceExpression || grandParent instanceof PsiArrayInitializerExpression ||
grandParent instanceof PsiArrayInitializerMemberValue) {
grandParent instanceof PsiResourceExpression || grandParent instanceof PsiArrayInitializerExpression) {
return true;
}
if (grandParent instanceof PsiTypeElement) {
@@ -5,6 +5,7 @@ import com.intellij.dupLocator.iterators.NodeIterator;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.psi.*;
import com.intellij.psi.impl.PsiImplUtil;
import com.intellij.psi.javadoc.PsiDocComment;
import com.intellij.psi.javadoc.PsiDocTag;
import com.intellij.psi.search.GlobalSearchScope;
@@ -282,11 +283,13 @@ public class JavaCompilingVisitor extends JavaRecursiveElementWalkingVisitor {
// typed var for expression (but not top level)
MatchingHandler handler = myCompilingVisitor.getContext().getPattern().getHandler(reference);
GlobalCompilingVisitor.setFilter(handler, ExpressionFilter.getInstance());
final PsiElement parent = reference.getParent();
if (parent instanceof PsiSwitchLabelStatement && handler instanceof SubstitutionHandler) {
final SubstitutionHandler handler1 = (SubstitutionHandler)handler;
pattern.setHandler(parent, new SubstitutionHandler("__case_" + parent.getTextOffset(), false,
handler1.getMinOccurs(), handler1.getMaxOccurs(), true));
if (handler instanceof SubstitutionHandler) {
PsiSwitchLabelStatementBase label = PsiImplUtil.getSwitchLabel(reference);
if (label != null) {
SubstitutionHandler handler1 = (SubstitutionHandler)handler;
pattern.setHandler(label, new SubstitutionHandler("__case_" + label.getTextOffset(), false,
handler1.getMinOccurs(), handler1.getMaxOccurs(), true));
}
}
typedVarProcessed = true;
}