// Path: core/src/main/java/pocketbus/internal/PocketBusConst.java
// public class PocketBusConst {
//     public static final String ANDROID_PREFIX = "android.";
//     public static final String JAVA_PREFIX = "java.";
// 
//     public static final String REGISTRATION_SUFFIX = "SubscriptionRegistration";
//     public static final String REGISTRY_NAME = "BusRegistry";
// 
//     public static final String METHOD_HANDLE = "handle";
//     public static final String METHOD_GET_SUBSCRIPTIONS = "getSubscriptions";
//     public static final String METHOD_GET_EVENT_CLASS = "getEventClass";
//     public static final String METHOD_GET_THREAD_MODE = "getThreadMode";
//     public static final String METHOD_GET_TARGET = "getTarget";
//     public static final String METHOD_EQUALS = "equals";
//     public static final String METHOD_GET_REGISTRAR = "getRegistration";
// 
//     public static final String VAR_TARGET_REF = "targetRef";
//     public static final String VAR_TARGET = "target";
//     public static final String VAR_EVENT = "event";
//     public static final String VAR_SUBSCRIPTION = "subscription";
//     public static final String VAR_SUBSCRIPTIONS = "subscriptions";
//     public static final String VAR_O = "o";
// }


import com.google.common.collect.ImmutableSet;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.Map;
import java.util.Set;
import javax.annotation.processing.Messager;
import javax.annotation.processing.RoundEnvironment;
import javax.lang.model.element.Element;
import javax.lang.model.element.ElementKind;
import javax.lang.model.element.ExecutableElement;
import javax.lang.model.element.Modifier;
import javax.lang.model.element.TypeElement;
import javax.lang.model.type.DeclaredType;
import javax.lang.model.type.TypeKind;
import javax.lang.model.type.TypeMirror;
import javax.lang.model.util.Elements;
import pocketbus.Subscribe;
import pocketbus.internal.PocketBusConst;
import static javax.tools.Diagnostic.Kind.ERROR;
import static javax.tools.Diagnostic.Kind.WARNING;
            Subscribe subscribeAnnotation = element.getAnnotation(Subscribe.class);
            if (subscribeAnnotation == null) {
                messager.printMessage(WARNING, String.format("@%s annotation not found on %s", Subscribe.class.getSimpleName(), element), element);
                continue;
            }

            if (!(element instanceof ExecutableElement) || element.getKind() != ElementKind.METHOD) {
                error(String.format("@%s annotation must be on a method (%s.%s)", Subscribe.class.getSimpleName(), enclosingElement.getQualifiedName(),
                        element.getSimpleName()), element);
            }

            ExecutableElement executableElement = (ExecutableElement) element;

            validateMethod(executableElement);
            validateBindingPackage(element);
            validateVisibility(element);

            SubscriptionGenerator generator = getOrCreateTargetClass(targetMap, enclosingElement);
            SubscriptionMethod method = new SubscriptionMethod(executableElement, subscribeAnnotation.value());
            if (!generator.addMethod(method)) {
                error(String.format("@%s method cannot have multiple subscriptions for type %s on ThreadMode.%s (%s.%s)",
                        Subscribe.class.getSimpleName(), method.getEventType(), method.getThreadMode(), enclosingElement.getQualifiedName(),
                        element.getSimpleName()), element);
            }
            erasedTargetNames.add(enclosingElement.toString());
        }

        for (Map.Entry<TypeElement, SubscriptionGenerator> entry : targetMap.entrySet()) {
            TypeElement parentElement = findParent(entry.getKey(), erasedTargetNames);
            if (parentElement != null) {
// Path: core/src/main/java/pocketbus/internal/PocketBusConst.java
// public class PocketBusConst {
//     public static final String ANDROID_PREFIX = "android.";
//     public static final String JAVA_PREFIX = "java.";
// 
//     public static final String REGISTRATION_SUFFIX = "SubscriptionRegistration";
//     public static final String REGISTRY_NAME = "BusRegistry";
// 
//     public static final String METHOD_HANDLE = "handle";
//     public static final String METHOD_GET_SUBSCRIPTIONS = "getSubscriptions";
//     public static final String METHOD_GET_EVENT_CLASS = "getEventClass";
//     public static final String METHOD_GET_THREAD_MODE = "getThreadMode";
//     public static final String METHOD_GET_TARGET = "getTarget";
//     public static final String METHOD_EQUALS = "equals";
//     public static final String METHOD_GET_REGISTRAR = "getRegistration";
// 
//     public static final String VAR_TARGET_REF = "targetRef";
//     public static final String VAR_TARGET = "target";
//     public static final String VAR_EVENT = "event";
//     public static final String VAR_SUBSCRIPTION = "subscription";
//     public static final String VAR_SUBSCRIPTIONS = "subscriptions";
//     public static final String VAR_O = "o";
// }


// Path: compiler/src/main/java/pocketbus/internal/codegen/SubscriptionProcessor.java
import com.google.common.collect.ImmutableSet;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.Map;
import java.util.Set;
import javax.annotation.processing.Messager;
import javax.annotation.processing.RoundEnvironment;
import javax.lang.model.element.Element;
import javax.lang.model.element.ElementKind;
import javax.lang.model.element.ExecutableElement;
import javax.lang.model.element.Modifier;
import javax.lang.model.element.TypeElement;
import javax.lang.model.type.DeclaredType;
import javax.lang.model.type.TypeKind;
import javax.lang.model.type.TypeMirror;
import javax.lang.model.util.Elements;
import pocketbus.Subscribe;
import pocketbus.internal.PocketBusConst;
import static javax.tools.Diagnostic.Kind.ERROR;
import static javax.tools.Diagnostic.Kind.WARNING;

            Subscribe subscribeAnnotation = element.getAnnotation(Subscribe.class);
            if (subscribeAnnotation == null) {
                messager.printMessage(WARNING, String.format("@%s annotation not found on %s", Subscribe.class.getSimpleName(), element), element);
                continue;
            }

            if (!(element instanceof ExecutableElement) || element.getKind() != ElementKind.METHOD) {
                error(String.format("@%s annotation must be on a method (%s.%s)", Subscribe.class.getSimpleName(), enclosingElement.getQualifiedName(),
                        element.getSimpleName()), element);
            }

            ExecutableElement executableElement = (ExecutableElement) element;

            validateMethod(executableElement);
            validateBindingPackage(element);
            validateVisibility(element);

            SubscriptionGenerator generator = getOrCreateTargetClass(targetMap, enclosingElement);
            SubscriptionMethod method = new SubscriptionMethod(executableElement, subscribeAnnotation.value());
            if (!generator.addMethod(method)) {
                error(String.format("@%s method cannot have multiple subscriptions for type %s on ThreadMode.%s (%s.%s)",
                        Subscribe.class.getSimpleName(), method.getEventType(), method.getThreadMode(), enclosingElement.getQualifiedName(),
                        element.getSimpleName()), element);
            }
            erasedTargetNames.add(enclosingElement.toString());
        }

        for (Map.Entry<TypeElement, SubscriptionGenerator> entry : targetMap.entrySet()) {
            TypeElement parentElement = findParent(entry.getKey(), erasedTargetNames);
            if (parentElement != null) {
                entry.getValue().setParentAdapter(getPackageName(parentElement), parentElement.getSimpleName() + PocketBusConst.REGISTRATION_SUFFIX);