[jboss-jira] [JBoss JIRA] (WFLY-11994) Hibernate ORM transformer method signature parameter comparison to treat Ljava/lang/Object as wildcard parameter

Scott Marlow (Jira) issues at jboss.org
Wed May 22 10:51:00 EDT 2019


    [ https://issues.jboss.org/browse/WFLY-11994?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13737376#comment-13737376 ] 

Scott Marlow commented on WFLY-11994:
-------------------------------------

we don't need this change any more, but in case we are interested in it in the future, below is some key parts from https://github.com/scottmarlow/wildfly/commit/ba6b2918e65be46104fbc90b676802edbe796da7

if (parentClassesAndInterfaces.contains("org/hibernate/usertype/CompositeUserType")) {
                        if (name.equals("nullSafeGet") &&
                                match(desc,"(Ljava/sql/ResultSet;[Ljava/lang/String;Lorg/hibernate/engine/spi/SessionImplementor;Ljava/lang/Object;)Ljava/lang/Object;")) {
                            desc = replaceSessionImplementor(desc);
                        } else if (name.equals("nullSafeSet") &&
                                match(desc,"(Ljava/sql/PreparedStatement;Ljava/lang/Object;ILorg/hibernate/engine/spi/SessionImplementor;)V")) {
                            desc = replaceSessionImplementor(desc);
                        } else if (name.equals("assemble") &&
                                match(desc,"(Ljava/io/Serializable;Lorg/hibernate/engine/spi/SessionImplementor;Ljava/lang/Object;)Ljava/lang/Object;")) {
                            desc = replaceSessionImplementor(desc);
                        } else if (name.equals("disassemble") &&
                                match(desc,"(Ljava/lang/Object;Lorg/hibernate/engine/spi/SessionImplementor;)Ljava/io/Serializable;")) {
                            desc = replaceSessionImplementor(desc);
                        } else if (name.equals("replace") &&
                                match(desc,"(Ljava/lang/Object;Ljava/lang/Object;Lorg/hibernate/engine/spi/SessionImplementor;Ljava/lang/Object;)Ljava/lang/Object;")) {
                            desc = replaceSessionImplementor(desc);
                        }
                        rewriteSessionImplementor = true;
}

    private static boolean match(String desc, String check) {
        Type[] descType = Type.getArgumentTypes(desc);
        Type[] checkType = Type.getArgumentTypes(check);

        if(checkType.length != descType.length) {
            return false;
        }
        for(int looper=0; looper < checkType.length; looper++) {
            if ( ! matchWildcard(descType[looper], checkType[looper]) &&
                ! checkType[looper].equals(descType[looper])) {
                return false;
            }
        }
        return true;
    }

    // return true if both parameter types are Objects and checkType is java.lang.Object (treat as match any object)
    private static boolean matchWildcard(Type descType, Type checkType) {
        return  checkType.getDescriptor().startsWith("L") &&
                        descType.getDescriptor().startsWith("L") &&
                        checkType.getInternalName().equals("java/lang/Object");
    }



> Hibernate ORM transformer method signature parameter comparison to treat Ljava/lang/Object as wildcard parameter
> ----------------------------------------------------------------------------------------------------------------
>
>                 Key: WFLY-11994
>                 URL: https://issues.jboss.org/browse/WFLY-11994
>             Project: WildFly
>          Issue Type: Enhancement
>          Components: JPA / Hibernate
>            Reporter: Scott Marlow
>            Assignee: Scott Marlow
>            Priority: Major
>         Attachments: statetype.zip
>
>
> Replace the org.jboss.as.hibernate.Hibernate51CompatibilityTransformer check for Ljava/lang/Object, to instead match any object type (via custom code).  Do the same for the MethodAdapter class.



--
This message was sent by Atlassian Jira
(v7.12.1#712002)


More information about the jboss-jira mailing list