org_apache_struts2_convention_PackageBasedActionConfigBuilderTest_java
org.apache.struts2.convention.PackageBasedActionConfigBuilder
protected PackageConfig.Builder getPackageConfig(Map<String, PackageConfig.Builder> packageConfigs, String actionNamespace, String actionPackage, Class<?> actionClass, Action action) {
        if (action != null && !action.value().equals("DEFAULT_VALUE")) {
            LOG.trace("Using non-default action namespace from the Action annotation of [{}]", (Object)action.value());
            String actionName = action.value();
            actionNamespace = StringUtils.contains((CharSequence)actionName, "/") ? StringUtils.substringBeforeLast(actionName, "/") : "";
        }
        ParentPackage parent = AnnotationUtils.findAnnotation(actionClass, ParentPackage.class);
        String parentName = null;
        if (parent != null) {
            LOG.trace("Using non-default parent package from annotation of [{}]", (Object)parent.value());
            parentName = parent.value();
        }
        if (parentName == null) {
            parentName = this.defaultParentPackage;
        }
        if (parentName == null) {
            throw new ConfigurationException("Unable to determine the parent XWork package for the action class [" + actionClass.getName() + "]");
        }
        PackageConfig parentPkg = this.configuration.getPackageConfig(parentName);
        if (parentPkg == null) {
            throw new ConfigurationException("Unable to locate parent package [" + parentName + "] for [" + actionClass + "]");
        }
        String name = actionPackage + "#" + parentPkg.getName() + "#" + actionNamespace;
        PackageConfig.Builder pkgConfig = packageConfigs.get(name);
        if (pkgConfig == null) {
            pkgConfig = new PackageConfig.Builder(name).namespace(actionNamespace).addParent(parentPkg);
            if (this.enableSmiInheritance) {
                pkgConfig.strictMethodInvocation(parentPkg.isStrictMethodInvocation());
            }
            packageConfigs.put(name, pkgConfig);
            DefaultInterceptorRef defaultInterceptorRef = AnnotationUtils.findAnnotation(actionClass, DefaultInterceptorRef.class);
            if (defaultInterceptorRef != null) {
                pkgConfig.defaultInterceptorRef(defaultInterceptorRef.value());
                LOG.trace("Setting [{}] as the default interceptor ref for [{}]", (Object)defaultInterceptorRef.value(), (Object)pkgConfig.getName());
            }
        }
        LOG.trace("Created package config named [{}] with a namespace [{}]", (Object)name, (Object)actionNamespace);
        return pkgConfig;
    }
 -> java.lang.Class.getAnnotation(java.lang.Class): java.lang.annotation.Annotation -> java.util.Map.get(java.lang.Object): java.lang.Object -> java.lang.StringBuilder.append(java.lang.String): java.lang.StringBuilder -> java.lang.StringBuilder.append(java.lang.String): java.lang.StringBuilder -> java.lang.StringBuilder.append(java.lang.String): java.lang.StringBuilder -> java.lang.StringBuilder.append(java.lang.String): java.lang.StringBuilder -> java.lang.StringBuilder.append(java.lang.String): java.lang.StringBuilder -> java.lang.StringBuilder.toString(): java.lang.String -> java.util.Map.get(java.lang.Object): java.lang.Object
 [CALL] [CALL] -> java.lang.Class.getAnnotation(java.lang.Class): java.lang.annotation.Annotation [EXIT] [CALL] [CALL] [CALL] [CALL] [EXIT] [CALL] [EXIT] [EXIT] [EXIT] [EXIT] [CALL] -> java.util.Map.get(java.lang.Object): java.lang.Object [EXIT] -> java.lang.StringBuilder.append(java.lang.String): java.lang.StringBuilder -> java.lang.StringBuilder.append(java.lang.String): java.lang.StringBuilder [CALL] [EXIT] -> java.lang.StringBuilder.append(java.lang.String): java.lang.StringBuilder -> java.lang.StringBuilder.append(java.lang.String): java.lang.StringBuilder -> java.lang.StringBuilder.append(java.lang.String): java.lang.StringBuilder -> java.lang.StringBuilder.toString(): java.lang.String -> java.util.Map.get(java.lang.Object): java.lang.Object [CALL] [CALL] [CALL] [CALL] [EXIT] [CALL] [EXIT] [EXIT] [EXIT] [EXIT] [EXIT]