pnuts drives me crazy

Пишу на pnuts. pnuts - это скриптовый язык, мы активно его используем.

Короче, объявляю класс. Когда я для какого-то из его полей объявляю cеттер, а впоследствии вызываю его, то чудный пи-натсовый интерпретатор вываливается со StackOverflowError:

java.lang.StackOverflowError
at java.lang.String.indexOf(Unknown Source)
at java.lang.ClassLoader.checkName(Unknown Source)
at java.lang.ClassLoader.findLoadedClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
at sun.reflect.GeneratedMethodAccessor63.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at pnuts.lang.Runtime.setBeanProperty(Runtime.java:3066)
at pnuts.lang.JavaBeansConfiguration.setBeanProperty(JavaBeansConfiguration.java:154)
at pnuts.lang.JavaBeansConfiguration.putField(JavaBeansConfiguration.java:136)
at pnuts.lang.Java2Configuration.putField(Java2Configuration.java:101)
at pnuts.lang.Runtime.putField(Runtime.java:547)
at _pnuts_$2.exec(Unknown Source)
at pnuts.lang.PnutsFunction.exec(PnutsFunction.java:294)
at pnuts.lang.PnutsFunction.call(PnutsFunction.java:232)
at SamePOI.setDistance(Unknown Source)
at sun.reflect.GeneratedMethodAccessor63.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at pnuts.lang.Runtime.setBeanProperty(Runtime.java:3066)
at pnuts.lang.JavaBeansConfiguration.setBeanProperty(JavaBeansConfiguration.java:154)
at pnuts.lang.JavaBeansConfiguration.putField(JavaBeansConfiguration.java:136)
at pnuts.lang.Java2Configuration.putField(Java2Configuration.java:101)
at pnuts.lang.Runtime.putField(Runtime.java:547)
at _pnuts_$2.exec(Unknown Source)
... и т.д.


А если присваивать полю значение непосредственно снаружи, то все работает!

Сеттер имеет вполне типичный вид:

void setDistance(int d) {
this.distance = d
}


В чем проблема - ума не приложу! И с геттером, кстати, та же фигня :(

UPD 18:12 А вот еще что раздражает: длинные заголовки методов класса можно разбивать только так:

void myMethod(int param1, String
param2, bool param3)


Т.е. перевод строки можно ставить ТОЛЬКО между типом и параметром. Так работать не будет:

void myMethod(int param1,
String param2, bool param3)


Я специально взял отсюда и расковырял грамматику языка, чтобы убедиться, что так оно и есть:

TypedParamList = "(" ( ")" | TypedParam ("," TypedParam )* ")" ) ;
TypedParam = Param | ClassName Param ;
Param = Eol IDENTIFIER Eol ;

Т.е., если указываем ClassName, то Eol может следовать только сразу после него, либо (что еще страннее), ПЕРЕД запятой. Но не после. Т.е. так тоже будет работать:

void myMethod(int param1
,String param2, bool param3)


Вот так и проходит рабочее время))

0 коммент. | добавить комментарий :: pnuts drives me crazy

Отправить комментарий