[
https://issues.apache.org/jira/browse/FELIX-697?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12629506#action_12629506
]
Clement Escoffier commented on FELIX-697:
-----------------------------------------
So, this issue comes from an "unexpected" behavior of the compiler. In fact,
the method 'getName' is duplicated in the bytecode. The only difference is the
returned type (String against Serializable). So, the generated bytecode sounds
like incorrect, but works anyway. Here is the generated class (decompiled)
protected String getName() {
return "a";
}
protected volatile Serializable getName() {
return getName();
}
This duplication comes from the generics. iPOJO has not expected this kind of
code, and so generate twice the same identifier (based on the method name and
the argument list).
I will fix this issue by inserting the field only once. The two methods will
then used the same flag. It makes sense as the two methods are associated (the
generated one always call the written one).
PS : I don't know why the generated method becomes volatile.
> Generation of a duplicated field when using generics
> ----------------------------------------------------
>
> Key: FELIX-697
> URL: https://issues.apache.org/jira/browse/FELIX-697
> Project: Felix
> Issue Type: Bug
> Components: iPOJO
> Affects Versions: iPOJO-0.8.0
> Environment: Felix 1.0.4
> Reporter: Loris Bouzonnet
> Assignee: Clement Escoffier
> Attachments: ipojo-testcase.zip
>
>
> Here an extract of my test case:
> In an abstract Class AbsI, I have:
> public abstract class AbsI<T extends Serializable> implements I {
> [...]
> protected abstract T getName();
> public String getPlip() {
> return getName().toString();
> }
> [...]
> }
> In a child A:
> public class A extends AbsI<String> {
> protected String getName() {
> return "a";
> }
> }
> Generated code for A is:
> public class A extends AbsI<String>
> {
> private InstanceManager __IM;
> private boolean jdField___MgetName_of_type_Boolean;
> private boolean jdField___MgetName_of_type_Boolean;
> [...]
> }
> => jdField___MgetName_of_type_Boolean is duplicated and cannot be loaded.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.