On 27.08.2011 00:31, Jonas Maebe wrote:

On 27 Aug 2011, at 00:16, Sven Barth wrote:

There is a class AVView, a class AVViewGroup and an interface AVViewManager. 
AVViewGroup extends AVView and implements AVViewGroup. Also it defines a nested 
class InnerLayoutParam.

So far all is ok, but now the problematic part:
AVView and AViewManager both contain a parameter and/or result value of type 
AVViewGroup.InnerLayoutParam.

Is there a way to solve this quite nasty circle?

Not in a clean way. The only way you can do it is by removing 
AVViewGroup.InnerLayoutParam from the AVViewGroup class and declare it as an 
empty class up front (empty because I don't think it will be handled correctly 
if you add methods etc to it and try to call those later):

   AVViewGroup_InnerLayoutParam = class external 
'Android.V_add_rest_of_package_name' name 'ViewGroup$Layoutparam' 
(parentclass,parentintf1,parentintf2, ...)
   end;

And then replace all references to AVViewGroup.InnerLayoutParam with references 
to AVViewGroup_InnerLayoutParam.

Ok, thank you. I'll play around with that

It's a limitation of the Pascal language compared to Java (no way to refer to inner 
classes before the parent class has been defined), and even if we would choose to lift it 
somehow (e.g. by allowing something like "AVViewGroup.InnerLayoutParam = 
class;" as a top level declaration) I'm not immediately sure how we to implement 
that efficiently in the compiler.

Well... as long as the "workaround" will work I'm rather happy :)

Regards,
Sven
_______________________________________________
fpc-devel maillist  -  [email protected]
http://lists.freepascal.org/mailman/listinfo/fpc-devel

Reply via email to