I have reproduced it in Janino only and created the issue: https://github.com/janino-compiler/janino/issues/47
Kind regards, Volodymyr Vysotskyi 2018-04-14 20:15 GMT+03:00 Vova Vysotskyi <[email protected]>: > Ok, I will try to prepare a test case and will log a bug on Janino soon. > > Kind regards, > Volodymyr Vysotskyi > > 2018-04-14 20:02 GMT+03:00 Julian Hyde <[email protected]>: > >> Vova, >> >> Thanks for doing the research. Your explanation sounds very plausible >> (I suspected default methods, too). Can you please log a bug on >> JANINO? https://github.com/janino-compiler/janino/issues Arno, the >> project maintainer, has been very good to us over the years. >> >> Julian >> >> >> On Sat, Apr 14, 2018 at 9:28 AM, Enrico Olivelli <[email protected]> >> wrote: >> > Il sab 14 apr 2018, 18:20 Enrico Olivelli <[email protected]> ha >> scritto: >> > >> >> >> >> >> >> Il sab 14 apr 2018, 17:39 Vova Vysotskyi <[email protected]> ha >> scritto: >> >> >> >>> Hi all, >> >>> >> >>> I think the reason for this issue is that at the compile stage was >> assumed >> >>> that *getSubSchema()* method returns *Schema *inheritor, but not >> >>> *SchemaPlus*. >> >>> But the interesting thing is that with Java 8, methods list of >> >>> *SchemaPlus *interface >> >>> contains default *getSubSchema()* method. >> >>> It may be observed by executing this code: >> >>> * Method[] declaredMethods = >> >>> >> >>> Class.forName("org.apache.calcite.schema.SchemaPlus").getDec >> laredMethods();* >> >>> * for (Method m : declaredMethods) {* >> >>> * if (m.getName().equals("getSubSchema")) {* >> >>> * System.out.println(m);* >> >>> * }* >> >>> * }* >> >>> >> >>> Its output: >> >>> >> >>> *public default org.apache.calcite.schema.Schema >> >>> org.apache.calcite.schema.SchemaPlus.getSubSchema(java.lang.String)* >> >>> *public abstract org.apache.calcite.schema.SchemaPlus >> >>> org.apache.calcite.schema.SchemaPlus.getSubSchema(java.lang.String)* >> >>> >> >>> The output of the same code for Java 7: >> >>> >> >>> *public abstract org.apache.calcite.schema.SchemaPlus >> >>> org.apache.calcite.schema.SchemaPlus.getSubSchema(java.lang.String)* >> >>> >> >>> Kind regards, >> >>> Volodymyr Vysotskyi >> >>> >> >> >> >> Good catch! >> >> It would be useful to look into that 'default' method by disassembling >> >> .class file. >> >> Enrico >> >> >> > >> > Anyway a fix would be to add an unwrap method to Schema >> > Cheers >> > Enrico >> > >> > >> >> >> >> >> >>> 2018-04-10 18:43 GMT+03:00 Julian Hyde <[email protected]>: >> >>> >> >>> > I’d really appreciate that. >> >>> > >> >>> > Can you please log a JIRA case, and record your >> observations/progress >> >>> > there. >> >>> > >> >>> > There’s no particular hurry on this one. >> >>> > >> >>> > Julian >> >>> > >> >>> > > On Apr 10, 2018, at 06:32, Enrico Olivelli <[email protected]> >> >>> wrote: >> >>> > > >> >>> > > 2018-04-10 13:48 GMT+02:00 Julian Hyde <[email protected]>: >> >>> > > >> >>> > >> Yes, that’s it. >> >>> > >> >> >>> > >> Next step would be to check whether the generated code is the >> same as >> >>> > >> previously, and if so, it is a Janino bug. Then try to create a >> >>> minimal >> >>> > >> test case for Janino. Maybe we can work around by adding an >> explicit >> >>> > cast >> >>> > >> somewhere. >> >>> > >> >> >>> > >> Thanks for reproducing this, and trying the Janino upgrade. >> >>> > >> >> >>> > > >> >>> > > >> >>> > > Julian, >> >>> > > If you have no hurry for this I will be happy to spend some time >> in >> >>> order >> >>> > > to figure out the root cause. >> >>> > > >> >>> > > I will follow the discussion and jump in when I have some idea. >> >>> > > >> >>> > > It will be great to have Calcite really built on jdk8 and leverage >> >>> > lambdas >> >>> > > >> >>> > > >> >>> > > Cheers >> >>> > > Enrico >> >>> > > >> >>> > > >> >>> > > >> >>> > >> >> >>> > >> Julian >> >>> > >> >> >>> > >>> On Apr 10, 2018, at 3:37 AM, Enrico Olivelli < >> [email protected]> >> >>> > >> wrote: >> >>> > >>> >> >>> > >>> This is "the" error (see below). Unfortunately just be upgrading >> >>> Janino >> >>> > >> to >> >>> > >>> 3.0.8 the problem still is present. >> >>> > >>> >> >>> > >>> the only 'unwrap' word in the generated code is here >> >>> > >>> ... >> >>> > >>> public org.apache.calcite.linq4j.Enumerable bind(final >> >>> > >>> org.apache.calcite.DataContext root0) { >> >>> > >>> root = root0; >> >>> > >>> final org.apache.calcite.linq4j.Enumerable _inputEnumerable = >> >>> > >>> org.apache.calcite.linq4j.Linq4j.asEnumerable(((org. >> >>> > apache.calcite.test. >> >>> > >> ReflectiveSchemaTest.CatchallSchema) >> >>> > >>> ((org.apache.calcite.adapter.java.ReflectiveSchema) >> >>> > >>> root.getRootSchema().getSubSchema("s").unwrap(org. >> >>> > >> apache.calcite.adapter.java.ReflectiveSchema.class)). >> >>> > >> getTarget()).nullables); >> >>> > >>> .... >> >>> > >>> >> >>> > >>> Does any ring bell ? >> >>> > >>> >> >>> > >>> Enrico >> >>> > >>> >> >>> > >>> >> >>> > >>> Caused by: org.codehaus.commons.compiler.CompileException: >> Line 5, >> >>> > >> Column >> >>> > >>> 272: A method named "unwrap" is not declared in any enclosing >> class >> >>> nor >> >>> > >> any >> >>> > >>> supertype, nor through a static import >> >>> > >>>> at >> >>> > >>> >> >>> org.codehaus.janino.UnitCompiler.compileError(UnitCompiler. >> java:11821) >> >>> > >>>> at >> >>> > >>> org.codehaus.janino.UnitCompiler.findIMethod(UnitCompiler. >> java:8731) >> >>> > >>>> at >> >>> > >>> org.codehaus.janino.UnitCompiler.compileGet2(UnitCompiler. >> java:4737) >> >>> > >>>> at org.codehaus.janino.UnitCompiler.access$8300( >> >>> > >> UnitCompiler.java:212) >> >>> > >>>> at >> >>> > >>> org.codehaus.janino.UnitCompiler$12.visitMethodInvocation( >> >>> > >> UnitCompiler.java:4097) >> >>> > >>>> at >> >>> > >>> org.codehaus.janino.UnitCompiler$12.visitMethodInvocation( >> >>> > >> UnitCompiler.java:4070) >> >>> > >>>> at >> >>> org.codehaus.janino.Java$MethodInvocation.accept(Java.java:4902) >> >>> > >>>> at org.codehaus.janino.UnitCompiler.compileGet( >> >>> > >> UnitCompiler.java:4070) >> >>> > >>>> at >> >>> > >>> org.codehaus.janino.UnitCompiler.compileGetValue( >> >>> > UnitCompiler.java:5253) >> >>> > >>>> at >> >>> > >>> org.codehaus.janino.UnitCompiler.compileGet2(UnitCompiler. >> java:4696) >> >>> > >>>> at org.codehaus.janino.UnitCompiler.access$7800( >> >>> > >> UnitCompiler.java:212) >> >>> > >>>> at >> >>> > >>> >> >>> org.codehaus.janino.UnitCompiler$12.visitCast(UnitCompiler.java:4092) >> >>> > >>>> at >> >>> > >>> >> >>> org.codehaus.janino.UnitCompiler$12.visitCast(UnitCompiler.java:4070) >> >>> > >>>> at org.codehaus.janino.Java$Cast.accept(Java.java:4727) >> >>> > >>>> at org.codehaus.janino.UnitCompiler.compileGet( >> >>> > >> UnitCompiler.java:4070) >> >>> > >>>> at >> >>> > >>> org.codehaus.janino.UnitCompiler.compileGet2(UnitCompiler. >> java:4732) >> >>> > >>>> at org.codehaus.janino.UnitCompiler.access$7300( >> >>> > >> UnitCompiler.java:212) >> >>> > >>>> at >> >>> > >>> org.codehaus.janino.UnitCompiler$12$1.visitParenthesizedExpr >> ession( >> >>> > >> UnitCompiler.java:4083) >> >>> > >>>> at >> >>> > >>> org.codehaus.janino.UnitCompiler$12$1.visitParenthesizedExpr >> ession( >> >>> > >> UnitCompiler.java:4074) >> >>> > >>>> at >> >>> > >>> org.codehaus.janino.Java$ParenthesizedExpression. >> >>> > accept(Java.java:4753) >> >>> > >>>> at >> >>> > >>> org.codehaus.janino.UnitCompiler$12.visitLvalue( >> >>> > UnitCompiler.java:4074) >> >>> > >>>> at >> >>> > >>> org.codehaus.janino.UnitCompiler$12.visitLvalue( >> >>> > UnitCompiler.java:4070) >> >>> > >>>> at org.codehaus.janino.Java$Lvalue.accept(Java.java:3977) >> >>> > >>>> at org.codehaus.janino.UnitCompiler.compileGet( >> >>> > >> UnitCompiler.java:4070) >> >>> > >>>> at >> >>> > >>> org.codehaus.janino.UnitCompiler.compileGetValue( >> >>> > UnitCompiler.java:5253) >> >>> > >>>> at >> >>> > >>> org.codehaus.janino.UnitCompiler.compileGet2(UnitCompiler. >> java:4792) >> >>> > >>>> at org.codehaus.janino.UnitCompiler.access$8300( >> >>> > >> UnitCompiler.java:212) >> >>> > >>>> at >> >>> > >>> org.codehaus.janino.UnitCompiler$12.visitMethodInvocation( >> >>> > >> UnitCompiler.java:4097) >> >>> > >>>> at >> >>> > >>> org.codehaus.janino.UnitCompiler$12.visitMethodInvocation( >> >>> > >> UnitCompiler.java:4070) >> >>> > >>>> at >> >>> org.codehaus.janino.Java$MethodInvocation.accept(Java.java:4902) >> >>> > >>>> at org.codehaus.janino.UnitCompiler.compileGet( >> >>> > >> UnitCompiler.java:4070) >> >>> > >>>> at >> >>> > >>> org.codehaus.janino.UnitCompiler.compileGetValue( >> >>> > UnitCompiler.java:5253) >> >>> > >>>> at >> >>> > >>> org.codehaus.janino.UnitCompiler.compileGet2(UnitCompiler. >> java:4696) >> >>> > >>>> at org.codehaus.janino.UnitCompiler.access$7800( >> >>> > >> UnitCompiler.java:212) >> >>> > >>>> at >> >>> > >>> >> >>> org.codehaus.janino.UnitCompiler$12.visitCast(UnitCompiler.java:4092) >> >>> > >>>> at >> >>> > >>> >> >>> org.codehaus.janino.UnitCompiler$12.visitCast(UnitCompiler.java:4070) >> >>> > >>>> at org.codehaus.janino.Java$Cast.accept(Java.java:4727) >> >>> > >>>> at org.codehaus.janino.UnitCompiler.compileGet( >> >>> > >> UnitCompiler.java:4070) >> >>> > >>>> at >> >>> > >>> org.codehaus.janino.UnitCompiler.compileGet2(UnitCompiler. >> java:4732) >> >>> > >>>> at org.codehaus.janino.UnitCompiler.access$7300( >> >>> > >> UnitCompiler.java:212) >> >>> > >>>> at >> >>> > >>> org.codehaus.janino.UnitCompiler$12$1.visitParenthesizedExpr >> ession( >> >>> > >> UnitCompiler.java:4083) >> >>> > >>>> at >> >>> > >>> org.codehaus.janino.UnitCompiler$12$1.visitParenthesizedExpr >> ession( >> >>> > >> UnitCompiler.java:4074) >> >>> > >>>> at >> >>> > >>> org.codehaus.janino.Java$ParenthesizedExpression. >> >>> > accept(Java.java:4753) >> >>> > >>>> at >> >>> > >>> org.codehaus.janino.UnitCompiler$12.visitLvalue( >> >>> > UnitCompiler.java:4074) >> >>> > >>>> at >> >>> > >>> org.codehaus.janino.UnitCompiler$12.visitLvalue( >> >>> > UnitCompiler.java:4070) >> >>> > >>>> at org.codehaus.janino.Java$Lvalue.accept(Java.java:3977) >> >>> > >>>> at org.codehaus.janino.UnitCompiler.compileGet( >> >>> > >> UnitCompiler.java:4070) >> >>> > >>>> at >> >>> > >>> org.codehaus.janino.UnitCompiler.compileGetValue( >> >>> > UnitCompiler.java:5253) >> >>> > >>>> at >> >>> > >>> org.codehaus.janino.UnitCompiler.compileContext2( >> >>> > UnitCompiler.java:4010) >> >>> > >>>> at org.codehaus.janino.UnitCompiler.access$6100( >> >>> > >> UnitCompiler.java:212) >> >>> > >>>> at >> >>> > >>> org.codehaus.janino.UnitCompiler$11$1.visitFieldAccess( >> UnitCompiler. >> >>> > >> java:3947) >> >>> > >>>> at >> >>> > >>> org.codehaus.janino.UnitCompiler$11$1.visitFieldAccess( >> UnitCompiler. >> >>> > >> java:3942) >> >>> > >>>> at org.codehaus.janino.Java$Field >> Access.accept(Java.java:4139) >> >>> > >>>> at >> >>> > >>> org.codehaus.janino.UnitCompiler$11.visitLvalue( >> >>> > UnitCompiler.java:3942) >> >>> > >>>> at >> >>> > >>> org.codehaus.janino.UnitCompiler$11.visitLvalue( >> >>> > UnitCompiler.java:3938) >> >>> > >>>> at org.codehaus.janino.Java$Lvalue.accept(Java.java:3977) >> >>> > >>>> at >> >>> > >>> org.codehaus.janino.UnitCompiler.compileContext( >> >>> > UnitCompiler.java:3938) >> >>> > >>>> at >> >>> > >>> org.codehaus.janino.UnitCompiler.compileContext2( >> >>> > UnitCompiler.java:4047) >> >>> > >>>> at org.codehaus.janino.UnitCompiler.access$6200( >> >>> > >> UnitCompiler.java:212) >> >>> > >>>> at >> >>> > >>> org.codehaus.janino.UnitCompiler$11$1.visitFieldAccessExpres >> sion( >> >>> > >> UnitCompiler.java:3948) >> >>> > >>>> at >> >>> > >>> org.codehaus.janino.UnitCompiler$11$1.visitFieldAccessExpres >> sion( >> >>> > >> UnitCompiler.java:3942) >> >>> > >>>> at >> >>> > >>> >> >>> org.codehaus.janino.Java$FieldAccessExpression.accept(Java.java:4468) >> >>> > >>>> at >> >>> > >>> org.codehaus.janino.UnitCompiler$11.visitLvalue( >> >>> > UnitCompiler.java:3942) >> >>> > >>>> at >> >>> > >>> org.codehaus.janino.UnitCompiler$11.visitLvalue( >> >>> > UnitCompiler.java:3938) >> >>> > >>>> at org.codehaus.janino.Java$Lvalue.accept(Java.java:3977) >> >>> > >>>> at >> >>> > >>> org.codehaus.janino.UnitCompiler.compileContext( >> >>> > UnitCompiler.java:3938) >> >>> > >>>> at >> >>> > >>> org.codehaus.janino.UnitCompiler.compileGetValue( >> >>> > UnitCompiler.java:5252) >> >>> > >>>> at >> >>> > >>> org.codehaus.janino.UnitCompiler.compileGet2(UnitCompiler. >> java:4842) >> >>> > >>>> at org.codehaus.janino.UnitCompiler.access$8300( >> >>> > >> UnitCompiler.java:212) >> >>> > >>>> at >> >>> > >>> org.codehaus.janino.UnitCompiler$12.visitMethodInvocation( >> >>> > >> UnitCompiler.java:4097) >> >>> > >>>> at >> >>> > >>> org.codehaus.janino.UnitCompiler$12.visitMethodInvocation( >> >>> > >> UnitCompiler.java:4070) >> >>> > >>>> at >> >>> org.codehaus.janino.Java$MethodInvocation.accept(Java.java:4902) >> >>> > >>>> at org.codehaus.janino.UnitCompiler.compileGet( >> >>> > >> UnitCompiler.java:4070) >> >>> > >>>> at >> >>> > >>> org.codehaus.janino.UnitCompiler.compileGetValue( >> >>> > UnitCompiler.java:5253) >> >>> > >>>> at org.codehaus.janino.UnitCompiler.compile2( >> >>> > UnitCompiler.java:2559) >> >>> > >>>> at org.codehaus.janino.UnitCompiler.access$2700( >> >>> > >> UnitCompiler.java:212) >> >>> > >>>> at >> >>> > >>> org.codehaus.janino.UnitCompiler$6.visitLocalVariableDeclara >> tionS >> >>> > >> tatement(UnitCompiler.java:1482) >> >>> > >>>> at >> >>> > >>> org.codehaus.janino.UnitCompiler$6.visitLocalVariableDeclara >> tionS >> >>> > >> tatement(UnitCompiler.java:1466) >> >>> > >>>> at >> >>> > >>> org.codehaus.janino.Java$LocalVariableDeclarationStatem >> >>> > >> ent.accept(Java.java:3351) >> >>> > >>>> at >> >>> org.codehaus.janino.UnitCompiler.compile(UnitCompiler.java:1466) >> >>> > >>>> at org.cod (stack truncated) >> >>> > >>> >> >>> > >>> >> >>> > >>> 2018-04-09 23:10 GMT+02:00 Cade Markegard < >> [email protected] >> >>> >: >> >>> > >>> >> >>> > >>>> Awesome! >> >>> > >>>> >> >>> > >>>> On Mon, Apr 9, 2018 at 1:29 PM Enrico Olivelli < >> >>> [email protected]> >> >>> > >>>> wrote: >> >>> > >>>> >> >>> > >>>>> Il lun 9 apr 2018, 22:20 Cade Markegard < >> [email protected]> >> >>> ha >> >>> > >>>>> scritto: >> >>> > >>>>> >> >>> > >>>>>> Not sure if this is related, but it seems like Janino doesn't >> >>> > support >> >>> > >>>>> Java8 >> >>> > >>>>>> lambdas under "Limitations" in http://janino-compiler.github >> . >> >>> > >>>> io/janino/ >> >>> > >>>>> >> >>> > >>>>> >> >>> > >>>>> >> >>> > >>>>> This should not be a problem, we are not generating java >> sources >> >>> with >> >>> > >>>>> lambdas (maybe in future?). >> >>> > >>>>> I will be happy to do some trials with new Janino, but I guess >> >>> that >> >>> > >> would >> >>> > >>>>> be the only way (or to drop Janino, but I think it will be >> >>> harder). I >> >>> > >>>> have >> >>> > >>>>> not much time these days. >> >>> > >>>>> >> >>> > >>>>> Anyhow I am testing my apps on jdk10 and Calcite is working >> like a >> >>> > >> charm >> >>> > >>>> ! >> >>> > >>>>> >> >>> > >>>>> Enrico >> >>> > >>>>> >> >>> > >>>>>> >> >>> > >>>>>> >> >>> > >>>>>>> On Mon, Apr 9, 2018 at 12:54 PM Julian Hyde < >> [email protected]> >> >>> > >> wrote: >> >>> > >>>>>>> >> >>> > >>>>>>> I didn’t try. We’re on janino 2.7.6. The 2.x line only goes >> up >> >>> to >> >>> > >>>>> 2.7.8. >> >>> > >>>>>>> I’m not eager to try upgrading to 3.x (latest release is >> 3.0.8) >> >>> > >>>>>> especially >> >>> > >>>>>>> as they don’t explicitly mention fixing a JDK 8 issue. >> >>> > >>>>>>> >> >>> > >>>>>>> http://janino-compiler.github.io/janino/changelog.html < >> >>> > >>>>>>> http://janino-compiler.github.io/janino/changelog.html> >> >>> > >>>>>>> >> >>> > >>>>>>> >> >>> > >>>>>>>> On Apr 9, 2018, at 12:42 PM, Enrico Olivelli < >> >>> [email protected] >> >>> > > >> >>> > >>>>>>> wrote: >> >>> > >>>>>>>> >> >>> > >>>>>>>> Il lun 9 apr 2018, 21:37 Julian Hyde <[email protected] >> >>> <mailto: >> >>> > >>>>>>> [email protected]>> ha scritto: >> >>> > >>>>>>>> >> >>> > >>>>>>>>> Don’t have the error stack, but janino could not compile >> >>> > generated >> >>> > >>>>>> code >> >>> > >>>>>>>>> because it said an “unwrap” method did not exist. >> >>> > >>>>>>>>> >> >>> > >>>>>>>>> There were no lambdas. I think perhaps that version of >> janino >> >>> > >>>> could >> >>> > >>>>>> not >> >>> > >>>>>>>>> fully understand the Calcite class files. >> >>> > >>>>>>>>> >> >>> > >>>>>>>>> To reproduce, change 2 lines in core/pom.xml and run “mvn >> >>> test”. >> >>> > >>>>>>>>> >> >>> > >>>>>>>> >> >>> > >>>>>>>> Did you try to update to latest Janino? >> >>> > >>>>>>>> It seems to that we have an old version (2.7.6) >> >>> > >>>>>>>> >> >>> > >>>>>>>> Enrico >> >>> > >>>>>>>> >> >>> > >>>>>>>>> >> >>> > >>>>>>>>> Julian >> >>> > >>>>>>>>> >> >>> > >>>>>>>>> >> >>> > >>>>>>>>>> On Apr 9, 2018, at 12:15 PM, Enrico Olivelli < >> >>> > >>>> [email protected]> >> >>> > >>>>>>>>> wrote: >> >>> > >>>>>>>>>> >> >>> > >>>>>>>>>> Il lun 9 apr 2018, 19:05 Julian Hyde <[email protected]> >> ha >> >>> > >>>>> scritto: >> >>> > >>>>>>>>>> >> >>> > >>>>>>>>>>> Has anyone had any luck using JDK 8 syntax (e.g. “->” >> for >> >>> > >>>> lambdas) >> >>> > >>>>>> in >> >>> > >>>>>>>>>>> Calcite? >> >>> > >>>>>>>>>>> >> >>> > >>>>>>>>>>> In core/pom.xml I changed source=1.7 target=1.7 to >> source=8 >> >>> > >>>>> target=8 >> >>> > >>>>>>> and >> >>> > >>>>>>>>>>> it allowed the syntax but it seemed to break any tests >> that >> >>> > >>>> relied >> >>> > >>>>>> on >> >>> > >>>>>>>>>>> janino. >> >>> > >>>>>>>>>>> >> >>> > >>>>>>>>>> >> >>> > >>>>>>>>>> Julian, >> >>> > >>>>>>>>>> Could you please share a stacktrace of your error? >> >>> > >>>>>>>>>> As far as I know using lambdas is not only a matter of >> >>> syntactic >> >>> > >>>>>> sugar >> >>> > >>>>>>>>> but >> >>> > >>>>>>>>>> they are more efficient than simple anonymous classes. >> >>> > >>>>>>>>>> >> >>> > >>>>>>>>>> Cheers >> >>> > >>>>>>>>>> Enrico >> >>> > >>>>>>>>>> >> >>> > >>>>>>>>>> >> >>> > >>>>>>>>>>> Related: https://issues.apache.org/jira >> /browse/CALCITE-2027 >> >>> < >> >>> > >>>>>>>>>>> https://issues.apache.org/jira/browse/CALCITE-2027> >> >>> > >>>>>>>>>>> >> >>> > >>>>>>>>>>> Julian >> >>> > >>>>>>>>>>> >> >>> > >>>>>>>>>>> -- >> >>> > >>>>>>>>>> >> >>> > >>>>>>>>>> >> >>> > >>>>>>>>>> -- Enrico Olivelli >> >>> > >>>>>>>>> >> >>> > >>>>>>>>> -- >> >>> > >>>>>>>> >> >>> > >>>>>>>> >> >>> > >>>>>>>> -- Enrico Olivelli >> >>> > >>>>>>> >> >>> > >>>>>>> >> >>> > >>>>>> >> >>> > >>>>> -- >> >>> > >>>>> >> >>> > >>>>> >> >>> > >>>>> -- Enrico Olivelli >> >>> > >>>>> >> >>> > >>>> >> >>> > >> >> >>> > >> >>> >> >> -- >> >> >> >> >> >> -- Enrico Olivelli >> >> >> > -- >> > >> > >> > -- Enrico Olivelli >> > >
