pbyrne84 / DynamicReturnTypePlugin

135 stars 7 forks source link

Symfony : type from container don't work #35

Closed syrm closed 9 years ago

syrm commented 9 years ago

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"

pbyrne84 commented 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

syrm commented 9 years ago

Sorry, $this is a Symfony2 controller.

pbyrne84 commented 9 years ago

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?

syrm commented 9 years ago

Symfony 2 plugin i guess. https://plugins.jetbrains.com/plugin/7219?pr=phpStorm

pbyrne84 commented 9 years ago

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 .

syrm commented 9 years ago

Do you want help to set a symfony project ?

pbyrne84 commented 9 years ago

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

Ő#M#C\AppBundle\Controller\DefaultController.getƀdf

(#Ő) 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 .

syrm commented 9 years ago

Ok interesting thanks :-)

syrm commented 9 years ago

Can I help you ?

pbyrne84 commented 9 years ago

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.

pbyrne84 commented 9 years ago

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

syrm commented 9 years ago

Nice one, thank :)

pbyrne84 commented 9 years ago

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

syrm commented 9 years ago

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...

pbyrne84 commented 9 years ago

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

syrm commented 9 years ago

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)

pbyrne84 commented 9 years ago

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 .

syrm commented 9 years ago

Same thing

pbyrne84 commented 9 years ago

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 .

pbyrne84 commented 9 years ago

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 .

pbyrne84 commented 9 years ago

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

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 .

syrm commented 9 years ago

Ok, keep going on, thanks :)

pbyrne84 commented 9 years ago

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

https://github.com/pbyrne84/DynamicReturnTypePluginTestEnvironment/blob/master/TestEnvironment/app/config/services.yml#L12-11

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.

syrm commented 9 years ago

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

pbyrne84 commented 9 years ago

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 .

syrm commented 9 years ago

Ok, thanks :)

pbyrne84 commented 9 years ago

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

syrm commented 9 years ago

Nice one

pbyrne84 commented 9 years ago

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

syrm commented 9 years ago

Yesssssssssss amazing !!!! Thanks a lot !

pbyrne84 commented 9 years ago

Nice....

If you have no probs tomorrow I will do a release and then have a rest.