void (@NotNull PsiVariable var) { final PsiVariable other = (PsiVariable)myMatchingVisitor.getElement(); final MatchContext context = myMatchingVisitor.getMatchContext(); final PsiIdentifier nameIdentifier = var.getNameIdentifier(); final boolean isTypedVar = context.getPattern().isTypedVar(nameIdentifier); context.pushResult(); try { if (!myMatchingVisitor.setResult((isTypedVar || myMatchingVisitor.matchText(nameIdentifier, other.getNameIdentifier())) && myMatchingVisitor.match(var.getModifierList(), other.getModifierList()))) return; final PsiTypeElement typeElement1 = var.getTypeElement(); if (typeElement1 != null) { PsiTypeElement typeElement2 = other.getTypeElement(); if (typeElement2 == null) { // e.g., lambda parameter without explicit type typeElement2 = JavaPsiFacade.getElementFactory(other.getProject()).createTypeElement(other.getType()); final MatchingHandler matchingHandler = context.getPattern().getHandler(typeElement1); if (matchingHandler instanceof SubstitutionHandler) { if (!myMatchingVisitor.setResult(myMatchingVisitor.matchOptionally(typeElement1, null)) || !myMatchingVisitor.setResult(((SubstitutionHandler)matchingHandler).validate(typeElement2, context))) { return; } } else if (!myMatchingVisitor.setResult(myMatchingVisitor.match(typeElement1, typeElement2))) return; } else if (!myMatchingVisitor.setResult(myMatchingVisitor.matchOptionally(typeElement1, typeElement2))) return; } // Check initializer final PsiExpression initializer = var.getInitializer(); final PsiExpression var2Initializer = other.getInitializer(); myMatchingVisitor.setResult(myMatchingVisitor.matchOptionally(initializer, var2Initializer)); } finally { final PsiElement identifier = other instanceof PsiReceiverParameter ? ((PsiReceiverParameter)other).getIdentifier() : other.getNameIdentifier(); final String name; if (identifier == null && (name = other.getName()) != null) { // when matching a stub or compiled code final PsiIdentifier fakeIdentifier = JavaPsiFacade.getElementFactory(other.getProject()).createIdentifier(name); myMatchingVisitor.scopeMatch(nameIdentifier, isTypedVar, fakeIdentifier); } else { myMatchingVisitor.scopeMatch(nameIdentifier, isTypedVar, identifier); } } }