[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