Closed syrm closed 9 years ago
You will have to help me a bit with this one. What type of class is the $this? Is it RepositoryFactory? $repo2 is created from the $this->get('ting') and signatures can chain off one another.
I have a test environment https://github.com/pbyrne84/DynamicReturnTypePluginTestEnvironment I use with running inspections to cater for regressions as things can change which I will add your edge case too when I can work it out.
Cheers
Sorry, $this is a Symfony2 controller.
So how does "$rf2 = $this->get('ting')"; know it should return RepositoryFactory as http://api.symfony.com/2.0/Symfony/Bundle/FrameworkBundle/Controller/Controller.html "get" returns object?
Is there another plugin in action to handle that aliasing?
Symfony 2 plugin i guess. https://plugins.jetbrains.com/plugin/7219?pr=phpStorm
I suppose I need to see what order the plugins run in and how they interact with one another. Interesting. It will take me a while as I will need to set up symfony etc.
On 5 January 2015 at 18:21, Sylvain Robez-Masson notifications@github.com wrote:
Symfony 2 plugin i guess. https://plugins.jetbrains.com/plugin/7219?pr=phpStorm
— Reply to this email directly or view it on GitHub https://github.com/pbyrne84/DynamicReturnTypePlugin/issues/35#issuecomment-68751043 .
Do you want help to set a symfony project ?
I have a project set up... Basically what happens is at a plugin level it uses signatures( the concrete types/auto completion is done at a lot later stage).
So when you call the symfony get in the controller it returns something like
(#Ő) is the plugin identifier df is the parameter I am using which get translated to a factory from the yaml file. I think I may need to think at this as it needs to become symfony aware somehow.
This is the plugin I use to see what is going on https://plugins.jetbrains.com/plugin/227
(It would be pretty impossible without it)
On 5 January 2015 at 18:39, Sylvain Robez-Masson notifications@github.com wrote:
Do you want help to set a symfony project ?
— Reply to this email directly or view it on GitHub https://github.com/pbyrne84/DynamicReturnTypePlugin/issues/35#issuecomment-68753772 .
Ok interesting thanks :-)
Can I help you ?
Haven't forgotten you.
Been busy and had to fix a few bugs.
Will look into it soon. The hard part I think it detecting whether smfony plugin is there and do it all by reflection which is always fun as it is not compiler safe.
I have remodelled my test environment to include symfony by composer to keep the vendor stuff out the project root so I can start looking into it in earnest now.
Start on monday
Nice one, thank :)
It might be a bit rough and ready but try deleting your current plugin and unzipping this one https://github.com/pbyrne84/DynamicReturnTypePlugin/blob/master/deploy/DynamicReturnTypePlugin.zip?raw=true
There will be a folder called DynamicReturnTypePlugin. in plugins this will replace
Unfortunately not : 20:48:52 StringIndexOutOfBoundsException: String index out of range: -60 20:49:01 StringIndexOutOfBoundsException: String index out of range: -60 20:49:03 StringIndexOutOfBoundsException: String index out of range: -60 etc...
Said it was rough and ready :)
Haven't added boundary checks.
Any chance of giving me the stacktrace, also are you doing this call?
Broken example: $rf2 = $this->get('ting'); $repo2 = $rf2->get('AppBundle\Entity\CategoryRepository'); $repo2->getAllWithEntry('bouh'); ?
I'll add some edge cases to this https://github.com/pbyrne84/DynamicReturnTypePluginTestEnvironment/blob/master/TestEnvironment/lib/DynamicReturnTypePluginTestEnvironment/Symfony/TestController.php
I doing this call : $entryRepository = $this->get('ting')->get('AppBundle\Entity\EntryRepository'); $entry = $entryRepository->get($id);
Stack trace : String index out of range: -60 java.lang.StringIndexOutOfBoundsException: String index out of range: -60 at java.lang.String.substring(String.java:1911) at kotlin.KotlinPackage$StringsJVM$68676cac.substring(StringsJVM.kt:42) at kotlin.KotlinPackage.substring(Unknown Source) at com.ptby.dynamicreturntypeplugin.DynamicReturnTypeProvider.trySymfonyContainer(DynamicReturnTypeProvider.kt:145) at com.ptby.dynamicreturntypeplugin.DynamicReturnTypeProvider.getBySignature(DynamicReturnTypeProvider.kt:102) at com.jetbrains.php.PhpIndexImpl.getBySignatureInternal(PhpIndexImpl.java:398) at com.jetbrains.php.PhpIndexImpl.getBySignature(PhpIndexImpl.java:284) at com.jetbrains.php.PhpIndexImpl.getClasses(PhpIndexImpl.java:429) at com.jetbrains.php.PhpIndexImpl.getBySignatureInternal(PhpIndexImpl.java:373) at com.jetbrains.php.PhpIndexImpl.getBySignature(PhpIndexImpl.java:284) at com.jetbrains.php.PhpIndexImpl.completeType(PhpIndexImpl.java:80) at com.jetbrains.php.lang.psi.resolve.types.PhpType.globalLocationAware(PhpType.java:392) at com.jetbrains.php.lang.inspections.PhpParamsInspection.checkCall(PhpParamsInspection.java:82) at com.jetbrains.php.lang.inspections.PhpParamsInspection.access$000(PhpParamsInspection.java:25) at com.jetbrains.php.lang.inspections.PhpParamsInspection$1.visitPhpFunctionCall(PhpParamsInspection.java:36) at com.jetbrains.php.lang.psi.elements.impl.FunctionReferenceImpl.accept(FunctionReferenceImpl.java:41) at com.intellij.codeInspection.InspectionEngine.acceptElements(InspectionEngine.java:80) at com.intellij.codeInspection.InspectionEngine.createVisitorAndAcceptElements(InspectionEngine.java:69) at com.intellij.codeInsight.daemon.impl.LocalInspectionsPass.a(LocalInspectionsPass.java:289) at com.intellij.codeInsight.daemon.impl.LocalInspectionsPass.access$000(LocalInspectionsPass.java:75) at com.intellij.codeInsight.daemon.impl.LocalInspectionsPass$2.process(LocalInspectionsPass.java:258) at com.intellij.codeInsight.daemon.impl.LocalInspectionsPass$2.process(LocalInspectionsPass.java:255) at com.intellij.concurrency.ApplierCompleter.a(ApplierCompleter.java:122) at com.intellij.concurrency.ApplierCompleter.c(ApplierCompleter.java:210) at com.intellij.concurrency.ApplierCompleter.a(ApplierCompleter.java:140) at com.intellij.concurrency.ApplierCompleter.c(ApplierCompleter.java:210) at com.intellij.concurrency.ApplierCompleter.a(ApplierCompleter.java:140) at com.intellij.concurrency.ApplierCompleter.access$000(ApplierCompleter.java:44) at com.intellij.concurrency.ApplierCompleter$1.run(ApplierCompleter.java:85) at com.intellij.openapi.application.impl.ApplicationImpl.tryRunReadAction(ApplicationImpl.java:1143) at com.intellij.concurrency.ApplierCompleter$2.run(ApplierCompleter.java:94) at com.intellij.openapi.progress.impl.ProgressManagerImpl.a(ProgressManagerImpl.java:281) at com.intellij.openapi.progress.impl.ProgressManagerImpl.a(ProgressManagerImpl.java:278) at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:233) at com.intellij.concurrency.ApplierCompleter.a(ApplierCompleter.java:106) at com.intellij.concurrency.ApplierCompleter.compute(ApplierCompleter.java:82) at jsr166e.CountedCompleter.exec(CountedCompleter.java:684) at jsr166e.ForkJoinTask.doExec(ForkJoinTask.java:260) at jsr166e.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:858) at jsr166e.ForkJoinPool.scan(ForkJoinPool.java:1687) at jsr166e.ForkJoinPool.runWorker(ForkJoinPool.java:1642) at jsr166e.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:109)
java.lang.StringIndexOutOfBoundsException: String index out of range: -60 at java.lang.String.substring(String.java:1911) at kotlin.KotlinPackage$StringsJVM$68676cac.substring(StringsJVM.kt:42) at kotlin.KotlinPackage.substring(Unknown Source) at com.ptby.dynamicreturntypeplugin.DynamicReturnTypeProvider.trySymfonyContainer(DynamicReturnTypeProvider.kt:145) at com.ptby.dynamicreturntypeplugin.DynamicReturnTypeProvider.getBySignature(DynamicReturnTypeProvider.kt:102) at com.jetbrains.php.PhpIndexImpl.getBySignatureInternal(PhpIndexImpl.java:398) at com.jetbrains.php.PhpIndexImpl.getBySignature(PhpIndexImpl.java:284) at com.jetbrains.php.PhpIndexImpl.getClasses(PhpIndexImpl.java:429) at com.jetbrains.php.PhpIndexImpl.getBySignatureInternal(PhpIndexImpl.java:373) at com.jetbrains.php.PhpIndexImpl.getBySignature(PhpIndexImpl.java:284) at com.jetbrains.php.PhpIndexImpl.completeType(PhpIndexImpl.java:80) at com.jetbrains.php.lang.psi.resolve.types.PhpType.globalLocationAware(PhpType.java:392) at com.jetbrains.php.lang.inspections.PhpParamsInspection.checkCall(PhpParamsInspection.java:82) at com.jetbrains.php.lang.inspections.PhpParamsInspection.access$000(PhpParamsInspection.java:25) at com.jetbrains.php.lang.inspections.PhpParamsInspection$1.visitPhpFunctionCall(PhpParamsInspection.java:36) at com.jetbrains.php.lang.psi.elements.impl.FunctionReferenceImpl.accept(FunctionReferenceImpl.java:41) at com.intellij.codeInspection.InspectionEngine.acceptElements(InspectionEngine.java:80) at com.intellij.codeInspection.InspectionEngine.createVisitorAndAcceptElements(InspectionEngine.java:69) at com.intellij.codeInsight.daemon.impl.LocalInspectionsPass.a(LocalInspectionsPass.java:289) at com.intellij.codeInsight.daemon.impl.LocalInspectionsPass.access$000(LocalInspectionsPass.java:75) at com.intellij.codeInsight.daemon.impl.LocalInspectionsPass$2.process(LocalInspectionsPass.java:258) at com.intellij.codeInsight.daemon.impl.LocalInspectionsPass$2.process(LocalInspectionsPass.java:255) at com.intellij.concurrency.ApplierCompleter.a(ApplierCompleter.java:122) at com.intellij.concurrency.ApplierCompleter.c(ApplierCompleter.java:210) at com.intellij.concurrency.ApplierCompleter.a(ApplierCompleter.java:140) at com.intellij.concurrency.ApplierCompleter.c(ApplierCompleter.java:210) at com.intellij.concurrency.ApplierCompleter.a(ApplierCompleter.java:140) at com.intellij.concurrency.ApplierCompleter.access$000(ApplierCompleter.java:44) at com.intellij.concurrency.ApplierCompleter$1.run(ApplierCompleter.java:85) at com.intellij.openapi.application.impl.ApplicationImpl.tryRunReadAction(ApplicationImpl.java:1143) at com.intellij.concurrency.ApplierCompleter$2.run(ApplierCompleter.java:94) at com.intellij.openapi.progress.impl.ProgressManagerImpl.a(ProgressManagerImpl.java:281) at com.intellij.openapi.progress.impl.ProgressManagerImpl.a(ProgressManagerImpl.java:278) at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:233) at com.intellij.concurrency.ApplierCompleter.a(ApplierCompleter.java:106) at com.intellij.concurrency.ApplierCompleter.compute(ApplierCompleter.java:82) at jsr166e.CountedCompleter.exec(CountedCompleter.java:684) at jsr166e.ForkJoinTask.doExec(ForkJoinTask.java:260) at jsr166e.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:858) at jsr166e.ForkJoinPool.scan(ForkJoinPool.java:1687) at jsr166e.ForkJoinPool.runWorker(ForkJoinPool.java:1642) at jsr166e.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:109)
java.lang.StringIndexOutOfBoundsException: String index out of range: -60 at java.lang.String.substring(String.java:1911) at kotlin.KotlinPackage$StringsJVM$68676cac.substring(StringsJVM.kt:42) at kotlin.KotlinPackage.substring(Unknown Source) at com.ptby.dynamicreturntypeplugin.DynamicReturnTypeProvider.trySymfonyContainer(DynamicReturnTypeProvider.kt:145) at com.ptby.dynamicreturntypeplugin.DynamicReturnTypeProvider.getBySignature(DynamicReturnTypeProvider.kt:102) at com.jetbrains.php.PhpIndexImpl.getBySignatureInternal(PhpIndexImpl.java:398) at com.jetbrains.php.PhpIndexImpl.getBySignature(PhpIndexImpl.java:284) at com.jetbrains.php.PhpIndexImpl.getClasses(PhpIndexImpl.java:429) at com.jetbrains.php.PhpIndexImpl.getBySignatureInternal(PhpIndexImpl.java:373) at com.jetbrains.php.PhpIndexImpl.getBySignature(PhpIndexImpl.java:284) at com.jetbrains.php.PhpIndexImpl.completeType(PhpIndexImpl.java:80) at com.jetbrains.php.lang.psi.resolve.types.PhpType.globalLocationAware(PhpType.java:392) at com.jetbrains.php.lang.inspections.PhpParamsInspection.checkCall(PhpParamsInspection.java:82) at com.jetbrains.php.lang.inspections.PhpParamsInspection.access$000(PhpParamsInspection.java:25) at com.jetbrains.php.lang.inspections.PhpParamsInspection$1.visitPhpFunctionCall(PhpParamsInspection.java:36) at com.jetbrains.php.lang.psi.elements.impl.FunctionReferenceImpl.accept(FunctionReferenceImpl.java:41) at com.intellij.codeInspection.InspectionEngine.acceptElements(InspectionEngine.java:80) at com.intellij.codeInspection.InspectionEngine.createVisitorAndAcceptElements(InspectionEngine.java:69) at com.intellij.codeInsight.daemon.impl.LocalInspectionsPass.a(LocalInspectionsPass.java:289) at com.intellij.codeInsight.daemon.impl.LocalInspectionsPass.access$000(LocalInspectionsPass.java:75) at com.intellij.codeInsight.daemon.impl.LocalInspectionsPass$2.process(LocalInspectionsPass.java:258) at com.intellij.codeInsight.daemon.impl.LocalInspectionsPass$2.process(LocalInspectionsPass.java:255) at com.intellij.concurrency.ApplierCompleter.a(ApplierCompleter.java:122) at com.intellij.concurrency.ApplierCompleter.access$000(ApplierCompleter.java:44) at com.intellij.concurrency.ApplierCompleter$1.run(ApplierCompleter.java:85) at com.intellij.openapi.application.impl.ApplicationImpl.tryRunReadAction(ApplicationImpl.java:1143) at com.intellij.concurrency.ApplierCompleter$2.run(ApplierCompleter.java:94) at com.intellij.openapi.progress.impl.ProgressManagerImpl.a(ProgressManagerImpl.java:281) at com.intellij.openapi.progress.impl.ProgressManagerImpl.a(ProgressManagerImpl.java:278) at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:233) at com.intellij.concurrency.ApplierCompleter.a(ApplierCompleter.java:106) at com.intellij.concurrency.ApplierCompleter.compute(ApplierCompleter.java:82) at jsr166e.CountedCompleter.exec(CountedCompleter.java:684) at jsr166e.ForkJoinTask.doExec(ForkJoinTask.java:260) at jsr166e.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:858) at jsr166e.ForkJoinPool.scan(ForkJoinPool.java:1687) at jsr166e.ForkJoinPool.runWorker(ForkJoinPool.java:1642) at jsr166e.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:109)
And if you assign $this->get('ting') to a var beforehand ? Chaining probably changes the signature. I'have a look at it tomorrow.
Cheers for the help
On 2 February 2015 at 20:57, Sylvain Robez-Masson notifications@github.com wrote:
I doing this call : $entryRepository = $this->get('ting')->get('AppBundle\Entity\EntryRepository'); $entry = $entryRepository->get($id);
Stack trace : String index out of range: -60 java.lang.StringIndexOutOfBoundsException: String index out of range: -60 at java.lang.String.substring(String.java:1911) at kotlin.KotlinPackage$StringsJVM$68676cac.substring(StringsJVM.kt:42) at kotlin.KotlinPackage.substring(Unknown Source) at com.ptby.dynamicreturntypeplugin.DynamicReturnTypeProvider.trySymfonyContainer(DynamicReturnTypeProvider.kt:145) at com.ptby.dynamicreturntypeplugin.DynamicReturnTypeProvider.getBySignature(DynamicReturnTypeProvider.kt:102) at com.jetbrains.php.PhpIndexImpl.getBySignatureInternal(PhpIndexImpl.java:398) at com.jetbrains.php.PhpIndexImpl.getBySignature(PhpIndexImpl.java:284) at com.jetbrains.php.PhpIndexImpl.getClasses(PhpIndexImpl.java:429) at com.jetbrains.php.PhpIndexImpl.getBySignatureInternal(PhpIndexImpl.java:373) at com.jetbrains.php.PhpIndexImpl.getBySignature(PhpIndexImpl.java:284) at com.jetbrains.php.PhpIndexImpl.completeType(PhpIndexImpl.java:80) at com.jetbrains.php.lang.psi.resolve.types.PhpType.globalLocationAware(PhpType.java:392) at com.jetbrains.php.lang.inspections.PhpParamsInspection.checkCall(PhpParamsInspection.java:82) at com.jetbrains.php.lang.inspections.PhpParamsInspection.access$000(PhpParamsInspection.java:25) at com.jetbrains.php.lang.inspections.PhpParamsInspection$1.visitPhpFunctionCall(PhpParamsInspection.java:36) at com.jetbrains.php.lang.psi.elements.impl.FunctionReferenceImpl.accept(FunctionReferenceImpl.java:41) at com.intellij.codeInspection.InspectionEngine.acceptElements(InspectionEngine.java:80) at com.intellij.codeInspection.InspectionEngine.createVisitorAndAcceptElements(InspectionEngine.java:69) at com.intellij.codeInsight.daemon.impl.LocalInspectionsPass.a(LocalInspectionsPass.java:289) at com.intellij.codeInsight.daemon.impl.LocalInspectionsPass.access$000(LocalInspectionsPass.java:75) at com.intellij.codeInsight.daemon.impl.LocalInspectionsPass$2.process(LocalInspectionsPass.java:258) at com.intellij.codeInsight.daemon.impl.LocalInspectionsPass$2.process(LocalInspectionsPass.java:255) at com.intellij.concurrency.ApplierCompleter.a(ApplierCompleter.java:122) at com.intellij.concurrency.ApplierCompleter.c(ApplierCompleter.java:210) at com.intellij.concurrency.ApplierCompleter.a(ApplierCompleter.java:140) at com.intellij.concurrency.ApplierCompleter.c(ApplierCompleter.java:210) at com.intellij.concurrency.ApplierCompleter.a(ApplierCompleter.java:140) at com.intellij.concurrency.ApplierCompleter.access$000(ApplierCompleter.java:44) at com.intellij.concurrency.ApplierCompleter$1.run(ApplierCompleter.java:85) at com.intellij.openapi.application.impl.ApplicationImpl.tryRunReadAction(ApplicationImpl.java:1143) at com.intellij.concurrency.ApplierCompleter$2.run(ApplierCompleter.java:94) at com.intellij.openapi.progress.impl.ProgressManagerImpl.a(ProgressManagerImpl.java:281) at com.intellij.openapi.progress.impl.ProgressManagerImpl.a(ProgressManagerImpl.java:278) at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:233) at com.intellij.concurrency.ApplierCompleter.a(ApplierCompleter.java:106) at com.intellij.concurrency.ApplierCompleter.compute(ApplierCompleter.java:82) at jsr166e.CountedCompleter.exec(CountedCompleter.java:684) at jsr166e.ForkJoinTask.doExec(ForkJoinTask.java:260) at jsr166e.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:858) at jsr166e.ForkJoinPool.scan(ForkJoinPool.java:1687) at jsr166e.ForkJoinPool.runWorker(ForkJoinPool.java:1642) at jsr166e.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:109)
java.lang.StringIndexOutOfBoundsException: String index out of range: -60 at java.lang.String.substring(String.java:1911) at kotlin.KotlinPackage$StringsJVM$68676cac.substring(StringsJVM.kt:42) at kotlin.KotlinPackage.substring(Unknown Source) at com.ptby.dynamicreturntypeplugin.DynamicReturnTypeProvider.trySymfonyContainer(DynamicReturnTypeProvider.kt:145) at com.ptby.dynamicreturntypeplugin.DynamicReturnTypeProvider.getBySignature(DynamicReturnTypeProvider.kt:102) at com.jetbrains.php.PhpIndexImpl.getBySignatureInternal(PhpIndexImpl.java:398) at com.jetbrains.php.PhpIndexImpl.getBySignature(PhpIndexImpl.java:284) at com.jetbrains.php.PhpIndexImpl.getClasses(PhpIndexImpl.java:429) at com.jetbrains.php.PhpIndexImpl.getBySignatureInternal(PhpIndexImpl.java:373) at com.jetbrains.php.PhpIndexImpl.getBySignature(PhpIndexImpl.java:284) at com.jetbrains.php.PhpIndexImpl.completeType(PhpIndexImpl.java:80) at com.jetbrains.php.lang.psi.resolve.types.PhpType.globalLocationAware(PhpType.java:392) at com.jetbrains.php.lang.inspections.PhpParamsInspection.checkCall(PhpParamsInspection.java:82) at com.jetbrains.php.lang.inspections.PhpParamsInspection.access$000(PhpParamsInspection.java:25) at com.jetbrains.php.lang.inspections.PhpParamsInspection$1.visitPhpFunctionCall(PhpParamsInspection.java:36) at com.jetbrains.php.lang.psi.elements.impl.FunctionReferenceImpl.accept(FunctionReferenceImpl.java:41) at com.intellij.codeInspection.InspectionEngine.acceptElements(InspectionEngine.java:80) at com.intellij.codeInspection.InspectionEngine.createVisitorAndAcceptElements(InspectionEngine.java:69) at com.intellij.codeInsight.daemon.impl.LocalInspectionsPass.a(LocalInspectionsPass.java:289) at com.intellij.codeInsight.daemon.impl.LocalInspectionsPass.access$000(LocalInspectionsPass.java:75) at com.intellij.codeInsight.daemon.impl.LocalInspectionsPass$2.process(LocalInspectionsPass.java:258) at com.intellij.codeInsight.daemon.impl.LocalInspectionsPass$2.process(LocalInspectionsPass.java:255) at com.intellij.concurrency.ApplierCompleter.a(ApplierCompleter.java:122) at com.intellij.concurrency.ApplierCompleter.c(ApplierCompleter.java:210) at com.intellij.concurrency.ApplierCompleter.a(ApplierCompleter.java:140) at com.intellij.concurrency.ApplierCompleter.c(ApplierCompleter.java:210) at com.intellij.concurrency.ApplierCompleter.a(ApplierCompleter.java:140) at com.intellij.concurrency.ApplierCompleter.access$000(ApplierCompleter.java:44) at com.intellij.concurrency.ApplierCompleter$1.run(ApplierCompleter.java:85) at com.intellij.openapi.application.impl.ApplicationImpl.tryRunReadAction(ApplicationImpl.java:1143) at com.intellij.concurrency.ApplierCompleter$2.run(ApplierCompleter.java:94) at com.intellij.openapi.progress.impl.ProgressManagerImpl.a(ProgressManagerImpl.java:281) at com.intellij.openapi.progress.impl.ProgressManagerImpl.a(ProgressManagerImpl.java:278) at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:233) at com.intellij.concurrency.ApplierCompleter.a(ApplierCompleter.java:106) at com.intellij.concurrency.ApplierCompleter.compute(ApplierCompleter.java:82) at jsr166e.CountedCompleter.exec(CountedCompleter.java:684) at jsr166e.ForkJoinTask.doExec(ForkJoinTask.java:260) at jsr166e.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:858) at jsr166e.ForkJoinPool.scan(ForkJoinPool.java:1687) at jsr166e.ForkJoinPool.runWorker(ForkJoinPool.java:1642) at jsr166e.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:109)
java.lang.StringIndexOutOfBoundsException: String index out of range: -60 at java.lang.String.substring(String.java:1911) at kotlin.KotlinPackage$StringsJVM$68676cac.substring(StringsJVM.kt:42) at kotlin.KotlinPackage.substring(Unknown Source) at com.ptby.dynamicreturntypeplugin.DynamicReturnTypeProvider.trySymfonyContainer(DynamicReturnTypeProvider.kt:145) at com.ptby.dynamicreturntypeplugin.DynamicReturnTypeProvider.getBySignature(DynamicReturnTypeProvider.kt:102) at com.jetbrains.php.PhpIndexImpl.getBySignatureInternal(PhpIndexImpl.java:398) at com.jetbrains.php.PhpIndexImpl.getBySignature(PhpIndexImpl.java:284) at com.jetbrains.php.PhpIndexImpl.getClasses(PhpIndexImpl.java:429) at com.jetbrains.php.PhpIndexImpl.getBySignatureInternal(PhpIndexImpl.java:373) at com.jetbrains.php.PhpIndexImpl.getBySignature(PhpIndexImpl.java:284) at com.jetbrains.php.PhpIndexImpl.completeType(PhpIndexImpl.java:80) at com.jetbrains.php.lang.psi.resolve.types.PhpType.globalLocationAware(PhpType.java:392) at com.jetbrains.php.lang.inspections.PhpParamsInspection.checkCall(PhpParamsInspection.java:82) at com.jetbrains.php.lang.inspections.PhpParamsInspection.access$000(PhpParamsInspection.java:25) at com.jetbrains.php.lang.inspections.PhpParamsInspection$1.visitPhpFunctionCall(PhpParamsInspection.java:36) at com.jetbrains.php.lang.psi.elements.impl.FunctionReferenceImpl.accept(FunctionReferenceImpl.java:41) at com.intellij.codeInspection.InspectionEngine.acceptElements(InspectionEngine.java:80) at com.intellij.codeInspection.InspectionEngine.createVisitorAndAcceptElements(InspectionEngine.java:69) at com.intellij.codeInsight.daemon.impl.LocalInspectionsPass.a(LocalInspectionsPass.java:289) at com.intellij.codeInsight.daemon.impl.LocalInspectionsPass.access$000(LocalInspectionsPass.java:75) at com.intellij.codeInsight.daemon.impl.LocalInspectionsPass$2.process(LocalInspectionsPass.java:258) at com.intellij.codeInsight.daemon.impl.LocalInspectionsPass$2.process(LocalInspectionsPass.java:255) at com.intellij.concurrency.ApplierCompleter.a(ApplierCompleter.java:122) at com.intellij.concurrency.ApplierCompleter.access$000(ApplierCompleter.java:44) at com.intellij.concurrency.ApplierCompleter$1.run(ApplierCompleter.java:85) at com.intellij.openapi.application.impl.ApplicationImpl.tryRunReadAction(ApplicationImpl.java:1143) at com.intellij.concurrency.ApplierCompleter$2.run(ApplierCompleter.java:94) at com.intellij.openapi.progress.impl.ProgressManagerImpl.a(ProgressManagerImpl.java:281) at com.intellij.openapi.progress.impl.ProgressManagerImpl.a(ProgressManagerImpl.java:278) at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:233) at com.intellij.concurrency.ApplierCompleter.a(ApplierCompleter.java:106) at com.intellij.concurrency.ApplierCompleter.compute(ApplierCompleter.java:82) at jsr166e.CountedCompleter.exec(CountedCompleter.java:684) at jsr166e.ForkJoinTask.doExec(ForkJoinTask.java:260) at jsr166e.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:858) at jsr166e.ForkJoinPool.scan(ForkJoinPool.java:1687) at jsr166e.ForkJoinPool.runWorker(ForkJoinPool.java:1642) at jsr166e.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:109)
— Reply to this email directly or view it on GitHub https://github.com/pbyrne84/DynamicReturnTypePlugin/issues/35#issuecomment-72536080 .
Same thing
Alright I will reproduce and fix it tomorrow...
On 2 February 2015 at 21:13, Sylvain Robez-Masson notifications@github.com wrote:
Same thing
— Reply to this email directly or view it on GitHub https://github.com/pbyrne84/DynamicReturnTypePlugin/issues/35#issuecomment-72538973 .
I added guard clauses and handling for the following cases https://github.com/pbyrne84/DynamicReturnTypePluginTestEnvironment/blob/master/TestEnvironment/lib/DynamicReturnTypePluginTestEnvironment/Symfony/TestController.php#L31-30
On 2 February 2015 at 22:08, Patrick Byrne pbyrne84@googlemail.com wrote:
Alright I will reproduce and fix it tomorrow...
On 2 February 2015 at 21:13, Sylvain Robez-Masson < notifications@github.com> wrote:
Same thing
— Reply to this email directly or view it on GitHub https://github.com/pbyrne84/DynamicReturnTypePlugin/issues/35#issuecomment-72538973 .
I haven't enabled chaining yet eg.
$testService = $this->get( 'service_broker' )->getServiceWithoutMask(
'DynamicReturnTypePluginTestEnvironment\TestClasses\TestService' )
On 3 February 2015 at 09:31, Patrick Byrne pbyrne84@googlemail.com wrote:
I added guard clauses and handling for the following cases
On 2 February 2015 at 22:08, Patrick Byrne pbyrne84@googlemail.com wrote:
Alright I will reproduce and fix it tomorrow...
On 2 February 2015 at 21:13, Sylvain Robez-Masson < notifications@github.com> wrote:
Same thing
— Reply to this email directly or view it on GitHub https://github.com/pbyrne84/DynamicReturnTypePlugin/issues/35#issuecomment-72538973 .
Ok, keep going on, thanks :)
The chaining stuff will need a bit of work as currently I do no handle container to container chaining at all ( have to change how I handle internal signatures ). This has been going on for a while but you reminded me of it. I will add a separate task for that https://github.com/pbyrne84/DynamicReturnTypePlugin/issues/41
I would appreciate if you test it in the non chaining form
Ie any of the top 4 cases here https://github.com/pbyrne84/DynamicReturnTypePluginTestEnvironment/blob/master/TestEnvironment/lib/DynamicReturnTypePluginTestEnvironment/Symfony/TestController.php#L15-15
Begin the main parameter types you seem to require eg.
test_stringParameter_leadingSlash test_stringParameter_noLeadingSlash
As I noticed you were not using the leading slash I added an edge case for that as that was not working yesterday.
My project is very simple
As I don't use symfony I may have things different to you ie. I haven't got a leading slash here class: DynamicReturnTypePluginTestEnvironment\TestClasses\ServiceBroker
New jar here https://github.com/pbyrne84/DynamicReturnTypePlugin/blob/master/deploy/DynamicReturnTypePlugin.zip?raw=true
If it doesn't work at all for non chaining cases I will need your help with the symfony project config so I can isolate the failure case( trying to debug on a large project is pretty much impossible).
Cheers ears.
I found the problem. You can reproduce it with this sample :
<?php
class Bouh
{
public function truc($name)
{
echo $name . "\n";
}
}
class RepositoryFactory
{
public function get($bouh)
{
return new $bouh;
}
}
/**
* @return \RepositoryFactory|object
*/
function bouh() {
return new RepositoryFactory();
};
$ting = bouh();
$bouh = $ting->get('Bouh');
$bouh->truc('chose');
In my setup $this->get('ting') return a type CCMBenchmark\Ting\Repository\RepositoryFactory|object
Another edge case :)
I'll sort the chaining out first as that is more global
On 3 February 2015 at 19:51, Sylvain Robez-Masson notifications@github.com wrote:
I found the problem. You can reproduce it with this sample :
<?php
class Bouh { public function truc($name) { echo $name . "\n"; } }
class RepositoryFactory { public function get($bouh) { return new $bouh; } }
/**
- @return \RepositoryFactory|object */ function bouh() { return new RepositoryFactory(); };
$ting = bouh();
$bouh = $ting->get('Bouh'); $bouh->truc('chose');
In my setup $this->get('ting') return a type CCMBenchmark\Ting\Repository\RepositoryFactory|object
— Reply to this email directly or view it on GitHub https://github.com/pbyrne84/DynamicReturnTypePlugin/issues/35#issuecomment-72721187 .
Ok, thanks :)
What is interesting is fixing the signatures has allowed me to delete all the other work I did and the symfony stuff works straight off.
Lot of changes so far https://github.com/pbyrne84/DynamicReturnTypePlugin/compare/type_refactor
Nice one
If you are lucky all your dreams have come true... https://github.com/pbyrne84/DynamicReturnTypePlugin/blob/master/deploy/DynamicReturnTypePlugin.zip?raw=true
Well for this anyway
Yesssssssssss amazing !!!! Thanks a lot !
Nice....
If you have no probs tomorrow I will do a release and then have a rest.
Setup: { "methodCalls": [ { "class": "\CCMBenchmark\Ting\Repository\RepositoryFactory", "method": "get", "position": 0 } ] }
Working example: $rf = new RepositoryFactory( $this->get('ting.connectionpool'), $this->get('ting.metadatarepository'), $this->get('ting.queryfactory'), $this->get('ting.collectionfactory'), $this->get('ting.unitofwork'), $this->get('ting.cache'), $this->get('ting.serializerfactory') ); $repo = $rf->get('AppBundle\Entity\CategoryRepository'); $repo->getAllWithEntry('bouh');
Broken example: $rf2 = $this->get('ting'); $repo2 = $rf2->get('AppBundle\Entity\CategoryRepository'); $repo2->getAllWithEntry('bouh');
PHPStorm knows the type of $rf2 but DynamicReturnTypePlugin seems not, because getAllWithEntry is marked "not found in class"