package com.squareup.ideaplugin.otto;

import com.intellij.psi.PsiClass;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiMethodCallExpression;
import com.intellij.psi.PsiType;
import com.intellij.usages.Usage;
import com.intellij.usages.UsageInfo2UsageAdapter;

public class BusPostDecider implements Decider {

  private PsiClass eventClass;

  public BusPostDecider(PsiClass eventClass) {
    this.eventClass = eventClass;
  }

  @Override public boolean shouldShow(Usage usage) {
    PsiElement element = ((UsageInfo2UsageAdapter) usage).getElement();
    PsiMethodCallExpression methodCall = PsiConsultantImpl.findMethodCall(element);
    if (methodCall != null) {
      PsiType[] expressionTypes = methodCall.getArgumentList().getExpressionTypes();
      for (PsiType expressionType : expressionTypes) {
        PsiClass argumentEventClass = PsiConsultantImpl.getClass(expressionType);
        if (argumentEventClass.equals(this.eventClass)) {
          return true;
        }
      }
    }

    return false;
  }
}