public Pair<ClassRepr, Set<UsageRepr.Usage>> getResult() {
      final ClassRepr repr =
          myTakeIntoAccount
              ? new ClassRepr(
                  myContext,
                  myAccess,
                  myFileName,
                  myName,
                  myContext.get(mySignature),
                  myContext.get(mySuperClass),
                  myInterfaces,
                  myNestedClasses,
                  myFields,
                  myMethods,
                  myTargets,
                  myRetentionPolicy,
                  myContext.get(myOuterClassName.get()),
                  myLocalClassFlag.get(),
                  myUsages)
              : null;

      if (repr != null) {
        repr.updateClassUsages(myContext, myUsages);
      }

      return new Pair<ClassRepr, Set<UsageRepr.Usage>>(repr, myUsages);
    }
    @Override
    public void visitOuterClass(final String owner, final String name, final String desc) {
      myOuterClassName.set(owner);

      if (name != null) {
        myLocalClassFlag.set(true);
      }
    }
    @Override
    public void visit(int version, int a, String n, String sig, String s, String[] i) {
      myTakeIntoAccount = notPrivate(a);

      myAccess = a;
      myName = myContext.get(n);
      mySignature = sig;
      mySuperClass = s;
      myInterfaces = i;

      myClassNameHolder.set(n);

      if (mySuperClass != null) {
        final int superclassName = myContext.get(mySuperClass);
        myUsages.add(UsageRepr.createClassUsage(myContext, superclassName));
        myUsages.add(UsageRepr.createClassExtendsUsage(myContext, superclassName));
      }

      if (myInterfaces != null) {
        for (String it : myInterfaces) {
          final int interfaceName = myContext.get(it);
          myUsages.add(UsageRepr.createClassUsage(myContext, interfaceName));
          myUsages.add(UsageRepr.createClassExtendsUsage(myContext, interfaceName));
        }
      }

      processSignature(sig);
    }
 {
   myLocalClassFlag.set(false);
 }