Ralf,

I'm sorry, but I've never used a tool like that. How can I create a new
issue (it seems that from that link you can just browse issues)?

Michele

Ralf Joachim wrote:
> Hi Michele,
> 
> thank you very much for your contribution so far. May it be possible for
> you to create a new issue for this in castor bug tracking under:
> 
> http://jira.codehaus.org/browse/CASTOR
> 
> and attach you additions as a unified patch to the new issue. The patch
> would make my work just a bit easier then without. Having said that I'll
> try to get your additions into next release.
> 
> Regards
> Ralf
> 
> 
> Michele Mazzucco schrieb:
>> I added this code to the org.exolab.castor.builder.SourceFactory class:
>>
>> /**
>>       * Create an "hashCode" method on the given JClass.
>>       *
>>       * @param jclass the JClass in wich we create the hashCode method.
>>       */
>>      public static void createHashCodeMethod(JClass jclass) {
>>              if (jclass == null) {
>>                      throw new IllegalArgumentException("JClass must not be 
>> null");
>>              }
>>              
>>              // The argument is not null
>>              JField[] fields = jclass.getFields();
>>              
>>              // Creates the method signature
>>         JMethod jMethod = new JMethod(JType.Int, "hashCode");
>>              jMethod.setComment("Override the java.lang.Object.hashCode 
>> method");
>>              
>>              // The hashCode method has no arguments
>>              jclass.addMethod(jMethod);
>>              
>>              JSourceCode jsc = jMethod.getSourceCode();
>>              
>>              // The following steps came from Effective Java Programming 
>> Language
>> Guide by Joshua Bloch, chapter 3
>>              jsc.add("int result = 17;");
>>              
>>              for (int i = 0; i <fields.length; i++) {
>>             JField temp = fields[i];
>>                      // If the field is an object the hashCode method is 
>> called recursively
>>                      
>>                      JType type = temp.getType();
>>                      String name = temp.getName();
>>                      if (type.isPrimitive()) {
>>                              if (type == JType.Boolean) {
>>                                      jsc.add("result = 37 * result + (" + 
>> name + "?0:1);");
>>                              } else
>>                              if ((type == JType.Byte) ||
>>                                      (type == JType.Short) ||
>>                                      (type == JType.Int)) {
>>                                              
>>                                      jsc.add("result = 37 * result + (int)" 
>> + name + ";");
>>                              } else if (type == JType.Long) {
>>                                      jsc.add("result = 37 * result + (int)(" 
>> + name + "^(" + name +
>> ">>>32));");
>>                              } else if (type == JType.Float) {
>>                                      jsc.add("result = 37 * result + 
>> Float.floatToIntBits(" + name + ");");
>>                              } else if (type == JType.Double) {
>>                                      jsc.add("long tmp = 
>> Double.doubleToLongBits(" + name + ");");
>>                                      jsc.add("result = 37 * result + 
>> (int)(tmp^(tmp>>>32));");
>>                              }
>>                      }       else {
>>                              // Calculates hashCode in a recursive manner.
>>                              jsc.add("result = 37 * result + " + name + 
>> ".hashCode();");
>>                      }
>>              }
>>              jsc.add("");
>>              jsc.add("return result;");              
>>      }       //createHashCodeMethod
>>
>>
>>
>>
>> and into the createSourceCode() method I've added the following control
>>
>> //create equals() method?
>> if (component.hasEquals()) {
>>      createEqualsMethod(jClass);
>>      createHashCodeMethod(jClass);
>> }
>>
>> since the hashCode method *must* be added when the equals method is
>> created (see Effective Java Programming Language Guide by Joshua Bloch,
>> chapter 3).
>>
>>
>> Best regards,
>> Michele
>>
>>
>>
>> Ralf Joachim wrote:
>>
>>> Hi Michele,
>>>
>>> SourceGenerator seams not to be able to generate hashcode() / equals()
>>> methods at the moment. In general I don't see a reason why it should not
>>> be possible to improve SourceGenerator to also generate them. As with
>>> other open source projects we are open for contributions. So you are
>>> open to volunteer on this addition.
>>>
>>> Regards
>>> Ralf
>>> Castor JDO, committer
>>>
>>>
>>> Michele Mazzucco schrieb:
>>>
>>>> Hi all,
>>>>
>>>> is it possible to "autogenerate" the hashCode() method on java objects
>>>> created from the xml schema?, otherwise checks on the server side could
>>>> return wrong values (i.e. checking if an object sent by by client is
>>>> stored in a collection hosted by the server side).
>>>>
>>>>
>>>> Thanks in advance,
>>>> Michele
>>>>
>>>> -------------------------------------------------
>>>> If you wish to unsubscribe from this list, please send an empty
>>>> message to the following address:
>>>>
>>>> [EMAIL PROTECTED]
>>>> -------------------------------------------------
>>> -------------------------------------------------
>>> If you wish to unsubscribe from this list, please send an empty message
>>> to the following address:
>>>
>>> [EMAIL PROTECTED]
>>> -------------------------------------------------
>>>
>>
>> -------------------------------------------------
>> If you wish to unsubscribe from this list, please 
>> send an empty message to the following address:
>>
>> [EMAIL PROTECTED]
>> -------------------------------------------------
> 

-------------------------------------------------
If you wish to unsubscribe from this list, please 
send an empty message to the following address:

[EMAIL PROTECTED]
-------------------------------------------------

Reply via email to