using configuration file with extention interfaces restricted names of methods
in interfaces
--------------------------------------------------------------------------------------------
Key: XMLBEANS-205
URL: http://issues.apache.org/jira/browse/XMLBEANS-205
Project: XMLBeans
Type: Bug
Components: Compiler
Versions: Version 2
Environment: Does not related to platform
Reporter: Denis Anisimov
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.
-
If you think it was sent incorrectly contact one of the administrators:
http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]