import com.intellij.util.xml.DomElement;
import com.intellij.util.xml.DomElementVisitor;

public class ImplicitUsagesDomElementVisitor implements DomElementVisitor {

  public static void main() {} // suppress class unused

  interface MyDom extends DomElement {}

  public void visitMyDom(MyDom myDom) { myDom = null; }
  public void visit(MyDom myDom) { myDom = null; }

  // invalid ===========
  public String <warning descr="Method 'nonVoidReturnTypeMethod(ImplicitUsagesDomElementVisitor.MyDom)' is never used">nonVoidReturnTypeMethod</warning>(MyDom myDom) { myDom = null; return null; }
  public void <warning descr="Method 'doesNotStartWithVisit(ImplicitUsagesDomElementVisitor.MyDom)' is never used">doesNotStartWithVisit</warning>(MyDom myDom) { myDom = null; }
  public void <warning descr="Method 'nonDomParameter(int)' is never used">nonDomParameter</warning>(int i) { i = 0; }
  private void <warning descr="Private method 'visitMyDomMoreThanOneParam(ImplicitUsagesDomElementVisitor.MyDom, int)' is never used">visitMyDomMoreThanOneParam</warning>(MyDom myDom, int index) { myDom = null; index = 0; }
  private void <warning descr="Private method 'visitMyDomPrivate(ImplicitUsagesDomElementVisitor.MyDom)' is never used">visitMyDomPrivate</warning>(MyDom myDom) { myDom = null; }
  public static void <warning descr="Method 'visitMyDomStatic(ImplicitUsagesDomElementVisitor.MyDom)' is never used">visitMyDomStatic</warning>(MyDom myDom) { myDom = null; }


  public static class NonDomElementVisitorClass {

    public static void main() {} // suppress class unused

    public void <warning descr="Method 'visitMyDom(ImplicitUsagesDomElementVisitor.MyDom)' is never used">visitMyDom</warning>(MyDom myDom) { myDom = null; }

  }

}