Size: a a a

Kotlin Community

2019 December 26

QH

Quantum Harmonizer in Kotlin Community
Oleg Yukhnevich
Кстати, никто не замечал такого странного поведения компаньёнов
не нашёл issue быстрым поиском, может кто видел
Какого «такого странного»?
источник

BV

Boris Vanin in Kotlin Community
Oleg Yukhnevich
Кстати, никто не замечал такого странного поведения компаньёнов
не нашёл issue быстрым поиском, может кто видел
Вроде выглядит норм
источник

OY

Oleg Yukhnevich in Kotlin Community
специально run написал
никого не смущает передача аргумента в компаньён из конструктора класса?
если посмотреть, то в конструкторе компаньёна доступен компаньён
а следоватльно, такое валится на рантайме
источник

QH

Quantum Harmonizer in Kotlin Community
Oleg Yukhnevich
специально run написал
никого не смущает передача аргумента в компаньён из конструктора класса?
если посмотреть, то в конструкторе компаньёна доступен компаньён
а следоватльно, такое валится на рантайме
Это стандартная проблема конструкторов и порядка инициализации.
В Расте починена удалением конструкторов.
источник

OY

Oleg Yukhnevich in Kotlin Community
Quantum Harmonizer
Это стандартная проблема конструкторов и порядка инициализации.
В Расте починена удалением конструкторов.
вопрос в том, почему это не отлавливается компилятором?
по мне, это достаточно простаю issue
передача аргумента из класса в конструктор компаньёна
заодно и падает с очень крутой ошибкой
Exception in thread "main" java.lang.VerifyError: Bad type on operand stack
Exception Details:
 Location:
   dev/whyoleg/kamp/Test$Companion.<init>()V @2: checkcast
 Reason:
   Type uninitializedThis (current frame, stack[1]) is not assignable to 'java/lang/Object'
 Current Frame:
   bci: @2
   flags: { flagThisUninit }
   locals: { uninitializedThis }
   stack: { uninitializedThis, uninitializedThis }
 Bytecode:
   0x0000000: 2a2a c000 02b6 000a b700 0db1
источник

QH

Quantum Harmonizer in Kotlin Community
Oleg Yukhnevich
вопрос в том, почему это не отлавливается компилятором?
по мне, это достаточно простаю issue
передача аргумента из класса в конструктор компаньёна
заодно и падает с очень крутой ошибкой
Exception in thread "main" java.lang.VerifyError: Bad type on operand stack
Exception Details:
 Location:
   dev/whyoleg/kamp/Test$Companion.<init>()V @2: checkcast
 Reason:
   Type uninitializedThis (current frame, stack[1]) is not assignable to 'java/lang/Object'
 Current Frame:
   bci: @2
   flags: { flagThisUninit }
   locals: { uninitializedThis }
   stack: { uninitializedThis, uninitializedThis }
 Bytecode:
   0x0000000: 2a2a c000 02b6 000a b700 0db1
Потому что внутри лямбды, передаваемой в run, есть this: Test.Companion, а онформации о том, что он недоинициализирован, нет.
источник
2019 December 27

AM

Andrew Mikhaylov in Kotlin Community
А что там string делает?
источник

OY

Oleg Yukhnevich in Kotlin Community
Quantum Harmonizer
Потому что внутри лямбды, передаваемой в run, есть this: Test.Companion, а онформации о том, что он недоинициализирован, нет.
да даже если убрать run и передавать напрямую, результат тот же
я бы создал issue, если такой нет
источник

BV

Boris Vanin in Kotlin Community
Oleg Yukhnevich
да даже если убрать run и передавать напрямую, результат тот же
я бы создал issue, если такой нет
Это хорошая идея
источник

OY

Oleg Yukhnevich in Kotlin Community
Andrew Mikhaylov
А что там string делает?
да в общем, случайно написал такой код (понятное дело, что это упрощённый вариант)
источник

AM

Andrew Mikhaylov in Kotlin Community
Oleg Yukhnevich
да в общем, случайно написал такой код (понятное дело, что это упрощённый вариант)
Я у Миши спрашиваю, который, похоже, понимает, что происходит. Потому что меня тоже эта штука удивила.
источник

QH

Quantum Harmonizer in Kotlin Community
Oleg Yukhnevich
да даже если убрать run и передавать напрямую, результат тот же
я бы создал issue, если такой нет
А вот это уже вполне починяемый баг.
Я заводил как-то похожий, тоже про недоинициализацию — class A : B { constructor() : super(return) {} }
источник

QH

Quantum Harmonizer in Kotlin Community
Andrew Mikhaylov
Я у Миши спрашиваю, который, похоже, понимает, что происходит. Потому что меня тоже эта штука удивила.
здесь — уже не понимаю, выглядит так, будто часть проверок просто не выполняются
источник

BV

Boris Vanin in Kotlin Community
Вообще string не должен быть виден там, ведь компаньон не видит полей класса
источник

AM

Andrew Mikhaylov in Kotlin Community
Чур кто нашёл, тот и идёт на kotl.in/issue :D
источник

QH

Quantum Harmonizer in Kotlin Community
Boris Vanin
Вообще string не должен быть виден там, ведь компаньон не видит полей класса
а это его собственное поле, this.string, он же сам тоже Test
источник

OY

Oleg Yukhnevich in Kotlin Community
Boris Vanin
Вообще string не должен быть виден там, ведь компаньон не видит полей класса
именно это я и хотел увидеть)
а не падение в рантайме :(
источник

OY

Oleg Yukhnevich in Kotlin Community
Andrew Mikhaylov
Чур кто нашёл, тот и идёт на kotl.in/issue :D
сейчас поищу, не верю, что я первый
источник

BV

Boris Vanin in Kotlin Community
Quantum Harmonizer
а это его собственное поле, this.string, он же сам тоже Test
Нет, там же написано, что this это компаньон
источник

BV

Boris Vanin in Kotlin Community
Аа
источник