You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@xmlbeans.apache.org by "Cezar Andrei (JIRA)" <xm...@xml.apache.org> on 2007/04/19 22:52:17 UTC

[jira] Resolved: (XMLBEANS-205) using configuration file with extention interfaces restricted names of methods in interfaces

     [ https://issues.apache.org/jira/browse/XMLBEANS-205?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Cezar Andrei resolved XMLBEANS-205.
-----------------------------------

       Resolution: Fixed
    Fix Version/s: Version 2.2.1

Fix committed with revision 530540

> using configuration file with extention interfaces restricted names of methods in interfaces
> --------------------------------------------------------------------------------------------
>
>                 Key: XMLBEANS-205
>                 URL: https://issues.apache.org/jira/browse/XMLBEANS-205
>             Project: XMLBeans
>          Issue Type: Bug
>          Components: Compiler
>    Affects Versions: Version 2
>         Environment: Does not related to platform
>            Reporter: Denis Anisimov
>             Fix For: Version 2.2.1
>
>
> Use .xsdconfig file.
> Create two different interfaces with common method name. F.e. 
> interface First {
> void get();
> }
> interface Second {
> void get();
> }
> Create two instructions in .xsdconfig for various bean neames from schema file for extending these interfaces with different handlers.
> F.e.
> <xb:extension for="test.First">
>         <xb:interface name="schema.OneEntity">
>             <xb:staticHandler>handlers.FirstHandler<xb:staticHandler>
>         </xb:interface>
>     </xb:extension>
> <xb:extension for="test.Second">
>         <xb:interface name="schema.AnotherEntity">
>             <xb:staticHandler>handlers.SecondHandler<xb:staticHandler>
>         </xb:interface>
>     </xb:extension>
> You will get error about method names collisions.
> Compiler will tell to you that you have collide methods in SecondHandler and FirstHandler.
> This is consequence of calling method void secondPhaseValidation() in BindingConfigImpl.java
> And this is consequence wrong comparing algorithm for MethodSignatureImpl class.
> Original equals()  and hashCode() methods don't perform comparing Handler names. So they use just method names and signature.
> I suggest that those methods should be :
>         private boolean interfacesEqual(MethodSignature signature){
>             if ( getInterfaceName()==null ){
>             	if (((MethodSignatureImpl)signature).getInterfaceName()!= null ){
>             		return false;
>             	}
>             }
>             else if ( !getInterfaceName().equals(((MethodSignatureImpl)signature).getInterfaceName())){
>             	return false;
>             }
>             return true;
>         }
>         
>         private boolean lightEqual(MethodSignature signature){
>             if (!signature.getName().equals(getName()) )
>                 return false;
>             String[] params = getParameterTypes();
>             String[] msParams = signature.getParameterTypes();
>             if (msParams.length != params.length )
>                 return false;
>             for (int i = 0; i < params.length; i++)
>             {
>                 if (!msParams[i].equals(params[i]))
>                     return false;
>             }
>             return true;
>         }
>         public boolean equals(Object o)
>         {
>             if ( !(o instanceof MethodSignature))
>                 return false;
>             MethodSignature ms = (MethodSignature)o;
>                  
>             if ( !interfacesEqual(ms ) ){
>             	return false;
>             }
>             return lightEqual( ms );
>         }
>         public int hashCode()
>         {
>             if (_hashCode!=NOTINITIALIZED)
>                 return _hashCode;
>             int hash = getName().hashCode();
>             
>             if (getInterfaceName() != null) {
> 				hash *= 19;
> 				hash += getInterfaceName().hashCode();
> 			}
>             String[] params = getParameterTypes();
>             for (int i = 0; i < params.length; i++)
>             {
>                 hash *= 19;
>                 hash += params[i].hashCode();
>             }
>             _hashCode = hash;
>             return _hashCode;
>         }

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@xmlbeans.apache.org
For additional commands, e-mail: dev-help@xmlbeans.apache.org