Code Monkey home page Code Monkey logo

idea-php-toolbox's Introduction

Intellij / PhpStorm Plugin for PHP Improvements

Build Status Version Downloads Downloads last month Donate to this project using Paypal

Key Value
Plugin Url http://plugins.jetbrains.com/plugin?pr=&pluginId=8133
ID de.espend.idea.php.toolbox
Doc x http://phpstorm.espend.de/php-toolbox

Screenshots

Php Toolbox PHPUnit

Core improvements

Type hint variable

// Strips several non common variable names of type hint completion; like "interface"
function foo(FooInterface $<caret>)
function foo(FooAbstract $<caret>)
function foo(FooExtension $<caret>)

Callable arrays

class Bar
{
    public function foo()
    {
        [$this, 'foo<caret>']
        [$foo, 'foo<caret>']
    }
}
$foo = new Bar();

String class, method and function navigation

foo('\\DateTime');
foo('\\DateTime:format');
foo('\\DateTime::format');
'DateTime::format';
'date';

Json Configuration

All files in project named .ide-toolbox.metadata.json or application folder with pattern /php-toolbox/*-toolbox.metadata.json. Find your application "Settings > Languages & Framework > PHP Toolbox"

{
  "registrar":[
    {
      "signature":[
        "Behat\\Behat\\Context\\Environment\\ContextEnvironment:hasContextClass",
        "Behat\\Behat\\Context\\Environment\\InitializedContextEnvironment:getContext"
      ],
      "provider":"behat_context_classes",
      "language":"php"
    }
  ],
  "providers": [
    {
      "name": "behat_context_classes",
      "source": {
        "contributor": "sub_classes",
        "parameter": "Behat\\Behat\\Context\\Context"
      }
    }
  ]
}

Registrar

{
  "provider":"date_format",
  "language":"php",
  "signatures":[
    {
      "class": "DateTime",
      "method": "format"
    },
    {
      "class": "PHPUnit_Framework_TestCase",
      "method": "getMock",
      "type": "type"
    },
    {
      "class": "Symfony\\Component\\HttpFoundation\\Response",
      "method": "__construct",
      "type": "array_key",
      "index": 2
    },
    {
      "class": "Symfony\\Component\\HttpFoundation\\Response",
      "method": "__construct",
      "index": 2,
      "array": "Content-Type"
    }    
  ]
}

Function

foo('<caret>')
{
  "function": "foo"
}
foo('', '<caret>')
{
  "function": "foo",
  "index": 1
}

Class method

/** @var $f \\FooClass */
$f->foo('<caret>')
{
  "class": "FooClass",
  "method": "foo"
}
/** @var $f \\FooClass */
$f->foo('', '<caret>')
{
  "class": "FooClass",
  "method": "foo",
  "index": 1
}

Types

/** @var $f \\FooClass */
$f->foo('date_time')->format<caret>
$f->foo(DateTime::class)->format<caret>
$f->foo(new DateTime())->format<caret>
$f->bar('', 'date_time')->format<caret>
{
  "registrar":[
    {
      "provider":"date",
      "language":"php",
      "signatures":[
        {
          "class": "FooClass",
          "method": "foo",
          "type": "type"
        },
        {
          "class": "FooClass",
          "method": "bar",
          "index": 1,
          "type": "type"
        }
      ]
    }
  ],
  "providers": [
    {
      "name": "date",
      "items":[
        {
          "lookup_string": "date_time",
          "type": "DateTime"
        }
      ]
    }
  ]
}

Inline Code

(new \Foo\Car())->foo('<caret>');
foo('<caret>');
Class Car
{
   /**
    * @param string $foo my Var #Class
    * @param string $bar my car #<ProviderName> foo bar
    */
   public function foo($foo, $bar) {}
}

/**
 * @param string $foo my Var #Class
 */
function foo($foo) {}

Array

foo(['<caret>'])
{
  "function": "foo",
  "type": "array_key"
}
foo(['foo' => '<caret>'])
{
  "function": "foo",
  "array": "foo"
}

Signature shortcut

{
  "provider":"class_interface",
  "language":"php",
  "signature":[
    "ReflectionProperty:__construct",
    "class_exists",
    "is_subclass_of:1" // ":1" means 2nd argument (arguments indexing starts from 0)
  ]  
}

Twig

{{ foo('<caret>') }}
{% if foo('<caret>') %}
{% set bar = foo('<caret>') %}
{{ 'bar'|foo('<caret>') }}
{
  "provider":"date_format",
  "language":"twig",
  "signatures":[
    {
      "function": "foo"
    }
  ]
}

Providers

{
  "name": "date_format",
  "items":[
    {
      "lookup_string": "d",
      "type_text": "Day of month (01..31)",
      "icon": "com.jetbrains.php.PhpIcons.METHOD",
      "presentable_text": "foo",
      "tail_text": "foo",
      "type": "DateTime",
      "target": "DateTime",
      "target": "Ns\\Time::format",
      "target": "DateTime:format",
      "target": "file://foo/foo.html.twig",
    }
  ]
}

Lookup shortcut

{
  "name": "date_format",
  "lookup_strings": ["car", "apple"]
}

Lookup defaults

{
  "name": "date_format",
  "defaults": {
    "icon":"com.jetbrains.php.PhpIcons.METHOD",
  },
  "items": [
    {
      "lookup_string":"d",
    }
  ]  
}

Sources

return
class SecurityExtension implements Twig_ExtensionInterface
{
    public function getName()
    {
        return 'security'
    }
}
class WebProfilerExtension extends Twig_ExtensionInterface
{
    public function getName()
    {
        return 'profiler'
    }
}
{
  "name": "twig_extensions",
  "source": {
    "contributor": "return",
    "parameter": "Twig_ExtensionInterface::getName"
  }
}
return_array
class UserAdmin implements AdminInterface
{
    public function getExportFormats()
    {
        return ['json', 'xml']
    }
}
class TopicAdmin extends AdminInterface
{
    public function getExportFormats()
    {
        return ['csv', 'xls']
    }
}
{
  "name": "sonata_admin_export_formats",
  "source": {
    "contributor": "return_array",
    "parameter": "Sonata\\AdminBundle\\Admin\\AdminInterface:getExportFormats"
  }
}
sub_classes
class Foo implements BehatContext {}
class Foo extends BehatContext {}
{
  "name": "behat_context_classes",
  "source": {
    "contributor": "sub_classes",
    "parameter": "BehatContext"
  }
}
traits
{
  "provider": "trait",
  "language": "php"
}

idea-php-toolbox's People

Contributors

bcremer avatar carsonf avatar cedricziel avatar haehnchen avatar king2500 avatar koc avatar podhy avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

idea-php-toolbox's Issues

Add method scope search for targets

We have several calls in frameworks that dont provide an index navigation target. for give an smaller search scope provide an method oder function in which we can search for an given value. provider an provider in json file

function scope() {
  $this->event->foo('VALUE')
}

Add array_value completion

Method addClassesToCompile expects list (not key-value) of classes. Currently possible complete keys or values by concrete key.

{
    "provider": "class_interface",
    "language": "php",
    "signatures": [
        {
            "class": "Symfony\\Component\\HttpKernel\\DependencyInjection\\Extension",
            "method": "addClassesToCompile",
            "type": "array_value"
        }
    ]
},

Add method suffix for method completion

If we are inside a class method its annoying to $this-> and static:: for inside method can. we can provide a insert handler for this. just provide completion for method inside class.

function classMethod() {
  method() -> $this->method
}

function static classMethod() {
  method() -> static::method
}

IllegalStateException: Not a JSON Object: null

1/2

Not a JSON Object: null
java.lang.IllegalStateException: Not a JSON Object: null
    at com.google.gson.JsonElement.getAsJsonObject(JsonElement.java:90)
    at de.espend.idea.php.toolbox.utils.JsonParseUtil.getDeserializeConfig(JsonParseUtil.java:36)
    at de.espend.idea.php.toolbox.utils.ExtensionProviderUtil$6.compute(ExtensionProviderUtil.java:245)
    at com.intellij.psi.util.CachedValuesManager$1.compute(CachedValuesManager.java:136)
    at com.intellij.psi.impl.PsiCachedValueImpl.doCompute(PsiCachedValueImpl.java:49)
    at com.intellij.util.CachedValueBase.getValueWithLock(CachedValueBase.java:222)
    at com.intellij.psi.impl.PsiCachedValue.getValueWithLock(PsiCachedValue.java:66)
    at com.intellij.psi.impl.PsiCachedValueImpl.getValue(PsiCachedValueImpl.java:38)
    at com.intellij.util.CachedValuesManagerImpl.getCachedValue(CachedValuesManagerImpl.java:84)
    at com.intellij.psi.util.CachedValuesManager.getCachedValue(CachedValuesManager.java:132)
    at de.espend.idea.php.toolbox.utils.ExtensionProviderUtil.getJsonConfigsInner(ExtensionProviderUtil.java:241)
    at de.espend.idea.php.toolbox.utils.ExtensionProviderUtil.access$300(ExtensionProviderUtil.java:36)
    at de.espend.idea.php.toolbox.utils.ExtensionProviderUtil$5.compute(ExtensionProviderUtil.java:226)
    at com.intellij.psi.impl.PsiCachedValueImpl.doCompute(PsiCachedValueImpl.java:49)
    at com.intellij.util.CachedValueBase.getValueWithLock(CachedValueBase.java:222)
    at com.intellij.psi.impl.PsiCachedValue.getValueWithLock(PsiCachedValue.java:66)
    at com.intellij.psi.impl.PsiCachedValueImpl.getValue(PsiCachedValueImpl.java:38)
    at de.espend.idea.php.toolbox.utils.ExtensionProviderUtil.getJsonConfigs(ExtensionProviderUtil.java:233)
    at de.espend.idea.php.toolbox.utils.ExtensionProviderUtil.getTypesInner(ExtensionProviderUtil.java:190)
    at de.espend.idea.php.toolbox.utils.ExtensionProviderUtil.access$200(ExtensionProviderUtil.java:36)
    at de.espend.idea.php.toolbox.utils.ExtensionProviderUtil$4.compute(ExtensionProviderUtil.java:172)
    at com.intellij.psi.impl.PsiCachedValueImpl.doCompute(PsiCachedValueImpl.java:49)
    at com.intellij.util.CachedValueBase.getValueWithLock(CachedValueBase.java:222)
    at com.intellij.psi.impl.PsiCachedValue.getValueWithLock(PsiCachedValue.java:66)
    at com.intellij.psi.impl.PsiCachedValueImpl.getValue(PsiCachedValueImpl.java:38)
    at de.espend.idea.php.toolbox.utils.ExtensionProviderUtil.getTypes(ExtensionProviderUtil.java:179)
    at de.espend.idea.php.toolbox.type.PhpToolboxTypeProvider.getType(PhpToolboxTypeProvider.java:50)
    at com.jetbrains.php.lang.psi.resolve.types.PhpTypeInfo$1.internalCompute(PhpTypeInfo.java:43)
    at com.jetbrains.php.lang.psi.resolve.types.PhpTypeInfo$1.internalCompute(PhpTypeInfo.java:37)
    at com.intellij.openapi.util.Computable$NotNullCachedComputable.compute(Computable.java:52)
    at com.intellij.openapi.util.RecursionManager$2.doPreventingRecursion(RecursionManager.java:112)
    at com.intellij.openapi.util.RecursionManager.doPreventingRecursion(RecursionManager.java:68)
    at com.jetbrains.php.lang.psi.resolve.types.PhpTypeInfo.getType(PhpTypeInfo.java:37)
    at com.jetbrains.php.lang.psi.elements.impl.PhpReferenceImpl.getType(PhpReferenceImpl.java:207)
    at com.jetbrains.php.lang.psi.resolve.types.PhpType.add(PhpType.java:153)
    at com.jetbrains.php.lang.psi.elements.impl.FunctionImpl.visitReturn(FunctionImpl.java:191)
    at com.jetbrains.php.lang.psi.elements.impl.FunctionImpl.scanTree(FunctionImpl.java:216)
    at com.jetbrains.php.lang.psi.elements.impl.FunctionImpl.getLocalType(FunctionImpl.java:157)
    at com.jetbrains.php.lang.psi.stubs.PhpMethodElementType.createStub(PhpMethodElementType.java:32)
    at com.jetbrains.php.lang.psi.stubs.PhpMethodElementType.createStub(PhpMethodElementType.java:17)
    at com.intellij.psi.stubs.DefaultStubBuilder.a(DefaultStubBuilder.java:60)
    at com.intellij.psi.stubs.DefaultStubBuilder.buildStubTree(DefaultStubBuilder.java:36)
    at com.intellij.psi.impl.source.PsiFileImpl.calcStubTree(PsiFileImpl.java:1013)
    at com.intellij.psi.stubs.StubProcessingHelperBase.processStubsInFile(StubProcessingHelperBase.java:75)
    at com.intellij.psi.stubs.StubProcessingHelperBase.processStubsInFile(StubProcessingHelperBase.java:52)
    at com.intellij.psi.stubs.StubIndexImpl$1.process(StubIndexImpl.java:231)
    at com.intellij.psi.stubs.StubIndexImpl$StubIdListContainerAction.perform(StubIndexImpl.java:582)
    at com.intellij.psi.stubs.StubIndexImpl$StubIdListContainerAction.perform(StubIndexImpl.java:570)
    at com.intellij.util.indexing.ValueContainer.forEach(ValueContainer.java:81)
    at com.intellij.psi.stubs.StubIndexImpl.a(StubIndexImpl.java:252)
    at com.intellij.psi.stubs.StubIndexImpl.processElements(StubIndexImpl.java:223)
    at com.intellij.psi.stubs.StubIndex.getElements(StubIndex.java:145)
    at com.intellij.psi.stubs.StubIndex.getElements(StubIndex.java:135)
    at com.jetbrains.php.navigation.PhpGotoClassContributor.getItemsByName(PhpGotoClassContributor.java:34)
    at com.intellij.ide.util.gotoByName.ContributorsBasedGotoByModel$3.process(ContributorsBasedGotoByModel.java:221)
    at com.intellij.ide.util.gotoByName.ContributorsBasedGotoByModel$3.process(ContributorsBasedGotoByModel.java:195)
    at com.intellij.concurrency.ApplierCompleter.b(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:1169)
    at com.intellij.concurrency.ApplierCompleter$2.run(ApplierCompleter.java:94)
    at com.intellij.openapi.progress.impl.CoreProgressManager.a(CoreProgressManager.java:446)
    at com.intellij.openapi.progress.impl.CoreProgressManager.a(CoreProgressManager.java:443)
    at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:392)
    at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:54)
    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:108)



java.lang.IllegalStateException: Not a JSON Object: null
    at com.google.gson.JsonElement.getAsJsonObject(JsonElement.java:90)
    at de.espend.idea.php.toolbox.utils.JsonParseUtil.getDeserializeConfig(JsonParseUtil.java:36)
    at de.espend.idea.php.toolbox.utils.ExtensionProviderUtil$6.compute(ExtensionProviderUtil.java:245)
    at com.intellij.psi.util.CachedValuesManager$1.compute(CachedValuesManager.java:136)
    at com.intellij.psi.impl.PsiCachedValueImpl.doCompute(PsiCachedValueImpl.java:49)
    at com.intellij.util.CachedValueBase.getValueWithLock(CachedValueBase.java:222)
    at com.intellij.psi.impl.PsiCachedValue.getValueWithLock(PsiCachedValue.java:66)
    at com.intellij.psi.impl.PsiCachedValueImpl.getValue(PsiCachedValueImpl.java:38)
    at com.intellij.psi.util.CachedValuesManager.getCachedValue(CachedValuesManager.java:129)
    at de.espend.idea.php.toolbox.utils.ExtensionProviderUtil.getJsonConfigsInner(ExtensionProviderUtil.java:241)
    at de.espend.idea.php.toolbox.utils.ExtensionProviderUtil.access$300(ExtensionProviderUtil.java:36)
    at de.espend.idea.php.toolbox.utils.ExtensionProviderUtil$5.compute(ExtensionProviderUtil.java:226)
    at com.intellij.psi.impl.PsiCachedValueImpl.doCompute(PsiCachedValueImpl.java:49)
    at com.intellij.util.CachedValueBase.getValueWithLock(CachedValueBase.java:222)
    at com.intellij.psi.impl.PsiCachedValue.getValueWithLock(PsiCachedValue.java:66)
    at com.intellij.psi.impl.PsiCachedValueImpl.getValue(PsiCachedValueImpl.java:38)
    at de.espend.idea.php.toolbox.utils.ExtensionProviderUtil.getJsonConfigs(ExtensionProviderUtil.java:233)
    at de.espend.idea.php.toolbox.utils.ExtensionProviderUtil.getTypesInner(ExtensionProviderUtil.java:190)
    at de.espend.idea.php.toolbox.utils.ExtensionProviderUtil.access$200(ExtensionProviderUtil.java:36)
    at de.espend.idea.php.toolbox.utils.ExtensionProviderUtil$4.compute(ExtensionProviderUtil.java:172)
    at com.intellij.psi.impl.PsiCachedValueImpl.doCompute(PsiCachedValueImpl.java:49)
    at com.intellij.util.CachedValueBase.getValueWithLock(CachedValueBase.java:222)
    at com.intellij.psi.impl.PsiCachedValue.getValueWithLock(PsiCachedValue.java:66)
    at com.intellij.psi.impl.PsiCachedValueImpl.getValue(PsiCachedValueImpl.java:38)
    at de.espend.idea.php.toolbox.utils.ExtensionProviderUtil.getTypes(ExtensionProviderUtil.java:179)
    at de.espend.idea.php.toolbox.type.PhpToolboxTypeProvider.getType(PhpToolboxTypeProvider.java:50)
    at com.jetbrains.php.lang.psi.resolve.types.PhpTypeInfo$1.internalCompute(PhpTypeInfo.java:43)
    at com.jetbrains.php.lang.psi.resolve.types.PhpTypeInfo$1.internalCompute(PhpTypeInfo.java:37)
    at com.intellij.openapi.util.Computable$NotNullCachedComputable.compute(Computable.java:52)
    at com.intellij.openapi.util.RecursionManager$2.doPreventingRecursion(RecursionManager.java:112)
    at com.intellij.openapi.util.RecursionManager.doPreventingRecursion(RecursionManager.java:68)
    at com.jetbrains.php.lang.psi.resolve.types.PhpTypeInfo.getType(PhpTypeInfo.java:37)
    at com.jetbrains.php.lang.psi.elements.impl.PhpReferenceImpl.getType(PhpReferenceImpl.java:207)
    at com.jetbrains.php.lang.psi.resolve.types.PhpType.add(PhpType.java:153)
    at com.jetbrains.php.lang.psi.resolve.types.PhpTypeAnalyserVisitor.addType(PhpTypeAnalyserVisitor.java:57)
    at com.jetbrains.php.lang.psi.resolve.types.PhpTypeAnalyserVisitor.visitPhpAssignmentExpression(PhpTypeAnalyserVisitor.java:167)
    at com.jetbrains.php.lang.psi.elements.impl.AssignmentExpressionImpl.accept(AssignmentExpressionImpl.java:37)
    at com.jetbrains.php.lang.psi.resolve.types.PhpTypeInfo$1.internalCompute(PhpTypeInfo.java:51)
    at com.jetbrains.php.lang.psi.resolve.types.PhpTypeInfo$1.internalCompute(PhpTypeInfo.java:37)
    at com.intellij.openapi.util.Computable$NotNullCachedComputable.compute(Computable.java:52)
    at com.intellij.openapi.util.RecursionManager$2.doPreventingRecursion(RecursionManager.java:112)
    at com.intellij.openapi.util.RecursionManager.doPreventingRecursion(RecursionManager.java:68)
    at com.jetbrains.php.lang.psi.resolve.types.PhpTypeInfo.getType(PhpTypeInfo.java:37)
    at com.jetbrains.php.lang.psi.elements.impl.PhpTypedElementImpl.getType(PhpTypedElementImpl.java:26)
    at com.jetbrains.php.lang.psi.elements.impl.PhpExpressionImpl.getType(PhpExpressionImpl.java:59)
    at com.jetbrains.php.lang.psi.resolve.types.PhpTypeAnalyserVisitor.visitPhpField(PhpTypeAnalyserVisitor.java:375)
    at com.jetbrains.php.lang.psi.elements.impl.FieldImpl.accept(FieldImpl.java:47)
    at com.jetbrains.php.lang.psi.resolve.types.PhpTypeInfo$1.internalCompute(PhpTypeInfo.java:51)
    at com.jetbrains.php.lang.psi.resolve.types.PhpTypeInfo$1.internalCompute(PhpTypeInfo.java:37)
    at com.intellij.openapi.util.Computable$NotNullCachedComputable.compute(Computable.java:52)
    at com.intellij.openapi.util.RecursionManager$2.doPreventingRecursion(RecursionManager.java:112)
    at com.intellij.openapi.util.RecursionManager.doPreventingRecursion(RecursionManager.java:68)
    at com.jetbrains.php.lang.psi.resolve.types.PhpTypeInfo.getType(PhpTypeInfo.java:37)
    at com.jetbrains.php.lang.psi.stubs.PhpFieldElementType.createStub(PhpFieldElementType.java:33)
    at com.jetbrains.php.lang.psi.stubs.PhpFieldElementType.createStub(PhpFieldElementType.java:20)
    at com.intellij.psi.stubs.DefaultStubBuilder.a(DefaultStubBuilder.java:60)
    at com.intellij.psi.stubs.DefaultStubBuilder.buildStubTree(DefaultStubBuilder.java:36)
    at com.intellij.psi.impl.source.PsiFileImpl.calcStubTree(PsiFileImpl.java:1013)
    at com.intellij.psi.stubs.StubProcessingHelperBase.processStubsInFile(StubProcessingHelperBase.java:75)
    at com.intellij.psi.stubs.StubProcessingHelperBase.processStubsInFile(StubProcessingHelperBase.java:52)
    at com.intellij.psi.stubs.StubIndexImpl$1.process(StubIndexImpl.java:231)
    at com.intellij.psi.stubs.StubIndexImpl$StubIdListContainerAction.perform(StubIndexImpl.java:582)
    at com.intellij.psi.stubs.StubIndexImpl$StubIdListContainerAction.perform(StubIndexImpl.java:570)
    at com.intellij.util.indexing.ValueContainer.forEach(ValueContainer.java:81)
    at com.intellij.psi.stubs.StubIndexImpl.a(StubIndexImpl.java:252)
    at com.intellij.psi.stubs.StubIndexImpl.processElements(StubIndexImpl.java:223)
    at com.intellij.psi.stubs.StubIndex.getElements(StubIndex.java:145)
    at com.intellij.psi.stubs.StubIndex.getElements(StubIndex.java:135)
    at com.jetbrains.php.navigation.PhpGotoClassContributor.getItemsByName(PhpGotoClassContributor.java:34)
    at com.intellij.ide.util.gotoByName.ContributorsBasedGotoByModel$3.process(ContributorsBasedGotoByModel.java:221)
    at com.intellij.ide.util.gotoByName.ContributorsBasedGotoByModel$3.process(ContributorsBasedGotoByModel.java:195)
    at com.intellij.concurrency.ApplierCompleter.b(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:1169)
    at com.intellij.concurrency.ApplierCompleter$2.run(ApplierCompleter.java:94)
    at com.intellij.openapi.progress.impl.CoreProgressManager.a(CoreProgressManager.java:446)
    at com.intellij.openapi.progress.impl.CoreProgressManager.a(CoreProgressManager.java:443)
    at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:392)
    at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:54)
    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:108)



java.lang.IllegalStateException: Not a JSON Object: null
    at com.google.gson.JsonElement.getAsJsonObject(JsonElement.java:90)
    at de.espend.idea.php.toolbox.utils.JsonParseUtil.getDeserializeConfig(JsonParseUtil.java:36)
    at de.espend.idea.php.toolbox.utils.ExtensionProviderUtil$6.compute(ExtensionProviderUtil.java:245)
    at com.intellij.psi.util.CachedValuesManager$1.compute(CachedValuesManager.java:136)
    at com.intellij.psi.impl.PsiCachedValueImpl.doCompute(PsiCachedValueImpl.java:49)
    at com.intellij.util.CachedValueBase.getValueWithLock(CachedValueBase.java:222)
    at com.intellij.psi.impl.PsiCachedValue.getValueWithLock(PsiCachedValue.java:66)
    at com.intellij.psi.impl.PsiCachedValueImpl.getValue(PsiCachedValueImpl.java:38)
    at com.intellij.psi.util.CachedValuesManager.getCachedValue(CachedValuesManager.java:129)
    at de.espend.idea.php.toolbox.utils.ExtensionProviderUtil.getJsonConfigsInner(ExtensionProviderUtil.java:241)
    at de.espend.idea.php.toolbox.utils.ExtensionProviderUtil.access$300(ExtensionProviderUtil.java:36)
    at de.espend.idea.php.toolbox.utils.ExtensionProviderUtil$5.compute(ExtensionProviderUtil.java:226)
    at com.intellij.psi.impl.PsiCachedValueImpl.doCompute(PsiCachedValueImpl.java:49)
    at com.intellij.util.CachedValueBase.getValueWithLock(CachedValueBase.java:222)
    at com.intellij.psi.impl.PsiCachedValue.getValueWithLock(PsiCachedValue.java:66)
    at com.intellij.psi.impl.PsiCachedValueImpl.getValue(PsiCachedValueImpl.java:38)
    at de.espend.idea.php.toolbox.utils.ExtensionProviderUtil.getJsonConfigs(ExtensionProviderUtil.java:233)
    at de.espend.idea.php.toolbox.utils.ExtensionProviderUtil.getTypesInner(ExtensionProviderUtil.java:190)
    at de.espend.idea.php.toolbox.utils.ExtensionProviderUtil.access$200(ExtensionProviderUtil.java:36)
    at de.espend.idea.php.toolbox.utils.ExtensionProviderUtil$4.compute(ExtensionProviderUtil.java:172)
    at com.intellij.psi.impl.PsiCachedValueImpl.doCompute(PsiCachedValueImpl.java:49)
    at com.intellij.util.CachedValueBase.getValueWithLock(CachedValueBase.java:222)
    at com.intellij.psi.impl.PsiCachedValue.getValueWithLock(PsiCachedValue.java:66)
    at com.intellij.psi.impl.PsiCachedValueImpl.getValue(PsiCachedValueImpl.java:38)
    at de.espend.idea.php.toolbox.utils.ExtensionProviderUtil.getTypes(ExtensionProviderUtil.java:179)
    at de.espend.idea.php.toolbox.type.PhpToolboxTypeProvider.getType(PhpToolboxTypeProvider.java:50)
    at com.jetbrains.php.lang.psi.resolve.types.PhpTypeInfo$1.internalCompute(PhpTypeInfo.java:43)
    at com.jetbrains.php.lang.psi.resolve.types.PhpTypeInfo$1.internalCompute(PhpTypeInfo.java:37)
    at com.intellij.openapi.util.Computable$NotNullCachedComputable.compute(Computable.java:52)
    at com.intellij.openapi.util.RecursionManager$2.doPreventingRecursion(RecursionManager.java:112)
    at com.intellij.openapi.util.RecursionManager.doPreventingRecursion(RecursionManager.java:68)
    at com.jetbrains.php.lang.psi.resolve.types.PhpTypeInfo.getType(PhpTypeInfo.java:37)
    at com.jetbrains.php.lang.psi.elements.impl.PhpReferenceImpl.getType(PhpReferenceImpl.java:207)
    at com.jetbrains.php.lang.psi.resolve.types.PhpType.add(PhpType.java:153)
    at com.jetbrains.php.lang.psi.resolve.types.PhpTypeAnalyserVisitor.addType(PhpTypeAnalyserVisitor.java:57)
    at com.jetbrains.php.lang.psi.resolve.types.PhpTypeAnalyserVisitor.visitPhpAssignmentExpression(PhpTypeAnalyserVisitor.java:167)
    at com.jetbrains.php.lang.psi.elements.impl.AssignmentExpressionImpl.accept(AssignmentExpressionImpl.java:37)
    at com.jetbrains.php.lang.psi.resolve.types.PhpTypeInfo$1.internalCompute(PhpTypeInfo.java:51)
    at com.jetbrains.php.lang.psi.resolve.types.PhpTypeInfo$1.internalCompute(PhpTypeInfo.java:37)
    at com.intellij.openapi.util.Computable$NotNullCachedComputable.compute(Computable.java:52)
    at com.intellij.openapi.util.RecursionManager$2.doPreventingRecursion(RecursionManager.java:112)
    at com.intellij.openapi.util.RecursionManager.doPreventingRecursion(RecursionManager.java:68)
    at com.jetbrains.php.lang.psi.resolve.types.PhpTypeInfo.getType(PhpTypeInfo.java:37)
    at com.jetbrains.php.lang.psi.elements.impl.PhpTypedElementImpl.getType(PhpTypedElementImpl.java:26)
    at com.jetbrains.php.lang.psi.elements.impl.PhpExpressionImpl.getType(PhpExpressionImpl.java:59)
    at com.jetbrains.php.lang.psi.resolve.types.PhpTypeAnalyserVisitor.visitPhpField(PhpTypeAnalyserVisitor.java:375)
    at com.jetbrains.php.lang.psi.elements.impl.FieldImpl.accept(FieldImpl.java:47)
    at com.jetbrains.php.lang.psi.resolve.types.PhpTypeInfo$1.internalCompute(PhpTypeInfo.java:51)
    at com.jetbrains.php.lang.psi.resolve.types.PhpTypeInfo$1.internalCompute(PhpTypeInfo.java:37)
    at com.intellij.openapi.util.Computable$NotNullCachedComputable.compute(Computable.java:52)
    at com.intellij.openapi.util.RecursionManager$2.doPreventingRecursion(RecursionManager.java:112)
    at com.intellij.openapi.util.RecursionManager.doPreventingRecursion(RecursionManager.java:68)
    at com.jetbrains.php.lang.psi.resolve.types.PhpTypeInfo.getType(PhpTypeInfo.java:37)
    at com.jetbrains.php.lang.psi.stubs.PhpFieldElementType.createStub(PhpFieldElementType.java:33)
    at com.jetbrains.php.lang.psi.stubs.PhpFieldElementType.createStub(PhpFieldElementType.java:20)
    at com.intellij.psi.stubs.DefaultStubBuilder.a(DefaultStubBuilder.java:60)
    at com.intellij.psi.stubs.DefaultStubBuilder.buildStubTree(DefaultStubBuilder.java:36)
    at com.intellij.psi.impl.source.PsiFileImpl.calcStubTree(PsiFileImpl.java:1013)
    at com.intellij.psi.stubs.StubProcessingHelperBase.processStubsInFile(StubProcessingHelperBase.java:75)
    at com.intellij.psi.stubs.StubProcessingHelperBase.processStubsInFile(StubProcessingHelperBase.java:52)
    at com.intellij.psi.stubs.StubIndexImpl$1.process(StubIndexImpl.java:231)
    at com.intellij.psi.stubs.StubIndexImpl$StubIdListContainerAction.perform(StubIndexImpl.java:582)
    at com.intellij.psi.stubs.StubIndexImpl$StubIdListContainerAction.perform(StubIndexImpl.java:570)
    at com.intellij.util.indexing.ValueContainer.forEach(ValueContainer.java:81)
    at com.intellij.psi.stubs.StubIndexImpl.a(StubIndexImpl.java:252)
    at com.intellij.psi.stubs.StubIndexImpl.processElements(StubIndexImpl.java:223)
    at com.intellij.psi.stubs.StubIndex.getElements(StubIndex.java:145)
    at com.intellij.psi.stubs.StubIndex.getElements(StubIndex.java:135)
    at com.jetbrains.php.navigation.PhpGotoClassContributor.getItemsByName(PhpGotoClassContributor.java:34)
    at com.intellij.ide.util.gotoByName.ContributorsBasedGotoByModel$3.process(ContributorsBasedGotoByModel.java:221)
    at com.intellij.ide.util.gotoByName.ContributorsBasedGotoByModel$3.process(ContributorsBasedGotoByModel.java:195)
    at com.intellij.concurrency.ApplierCompleter.b(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:1169)
    at com.intellij.concurrency.ApplierCompleter$2.run(ApplierCompleter.java:94)
    at com.intellij.openapi.progress.impl.CoreProgressManager.a(CoreProgressManager.java:446)
    at com.intellij.openapi.progress.impl.CoreProgressManager.a(CoreProgressManager.java:443)
    at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:392)
    at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:54)
    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:108)



java.lang.IllegalStateException: Not a JSON Object: null
    at com.google.gson.JsonElement.getAsJsonObject(JsonElement.java:90)
    at de.espend.idea.php.toolbox.utils.JsonParseUtil.getDeserializeConfig(JsonParseUtil.java:36)
    at de.espend.idea.php.toolbox.utils.ExtensionProviderUtil$6.compute(ExtensionProviderUtil.java:245)
    at com.intellij.psi.util.CachedValuesManager$1.compute(CachedValuesManager.java:136)
    at com.intellij.psi.impl.PsiCachedValueImpl.doCompute(PsiCachedValueImpl.java:49)
    at com.intellij.util.CachedValueBase.getValueWithLock(CachedValueBase.java:222)
    at com.intellij.psi.impl.PsiCachedValue.getValueWithLock(PsiCachedValue.java:66)
    at com.intellij.psi.impl.PsiCachedValueImpl.getValue(PsiCachedValueImpl.java:38)
    at com.intellij.psi.util.CachedValuesManager.getCachedValue(CachedValuesManager.java:129)
    at de.espend.idea.php.toolbox.utils.ExtensionProviderUtil.getJsonConfigsInner(ExtensionProviderUtil.java:241)
    at de.espend.idea.php.toolbox.utils.ExtensionProviderUtil.access$300(ExtensionProviderUtil.java:36)
    at de.espend.idea.php.toolbox.utils.ExtensionProviderUtil$5.compute(ExtensionProviderUtil.java:226)
    at com.intellij.psi.impl.PsiCachedValueImpl.doCompute(PsiCachedValueImpl.java:49)
    at com.intellij.util.CachedValueBase.getValueWithLock(CachedValueBase.java:222)
    at com.intellij.psi.impl.PsiCachedValue.getValueWithLock(PsiCachedValue.java:66)
    at com.intellij.psi.impl.PsiCachedValueImpl.getValue(PsiCachedValueImpl.java:38)
    at de.espend.idea.php.toolbox.utils.ExtensionProviderUtil.getJsonConfigs(ExtensionProviderUtil.java:233)
    at de.espend.idea.php.toolbox.utils.ExtensionProviderUtil.getTypesInner(ExtensionProviderUtil.java:190)
    at de.espend.idea.php.toolbox.utils.ExtensionProviderUtil.access$200(ExtensionProviderUtil.java:36)
    at de.espend.idea.php.toolbox.utils.ExtensionProviderUtil$4.compute(ExtensionProviderUtil.java:172)
    at com.intellij.psi.impl.PsiCachedValueImpl.doCompute(PsiCachedValueImpl.java:49)
    at com.intellij.util.CachedValueBase.getValueWithLock(CachedValueBase.java:222)
    at com.intellij.psi.impl.PsiCachedValue.getValueWithLock(PsiCachedValue.java:66)
    at com.intellij.psi.impl.PsiCachedValueImpl.getValue(PsiCachedValueImpl.java:38)
    at de.espend.idea.php.toolbox.utils.ExtensionProviderUtil.getTypes(ExtensionProviderUtil.java:179)
    at de.espend.idea.php.toolbox.type.PhpToolboxTypeProvider.getType(PhpToolboxTypeProvider.java:50)
    at com.jetbrains.php.lang.psi.resolve.types.PhpTypeInfo$1.internalCompute(PhpTypeInfo.java:43)
    at com.jetbrains.php.lang.psi.resolve.types.PhpTypeInfo$1.internalCompute(PhpTypeInfo.java:37)
    at com.intellij.openapi.util.Computable$NotNullCachedComputable.compute(Computable.java:52)
    at com.intellij.openapi.util.RecursionManager$2.doPreventingRecursion(RecursionManager.java:112)
    at com.intellij.openapi.util.RecursionManager.doPreventingRecursion(RecursionManager.java:68)
    at com.jetbrains.php.lang.psi.resolve.types.PhpTypeInfo.getType(PhpTypeInfo.java:37)
    at com.jetbrains.php.lang.psi.elements.impl.PhpReferenceImpl.getType(PhpReferenceImpl.java:207)
    at com.jetbrains.php.lang.psi.resolve.types.PhpType.add(PhpType.java:153)
    at com.jetbrains.php.lang.psi.resolve.types.PhpTypeAnalyserVisitor.addType(PhpTypeAnalyserVisitor.java:57)
    at com.jetbrains.php.lang.psi.resolve.types.PhpTypeAnalyserVisitor.visitPhpAssignmentExpression(PhpTypeAnalyserVisitor.java:167)
    at com.jetbrains.php.lang.psi.elements.impl.AssignmentExpressionImpl.accept(AssignmentExpressionImpl.java:37)
    at com.jetbrains.php.lang.psi.resolve.types.PhpTypeInfo$1.internalCompute(PhpTypeInfo.java:51)
    at com.jetbrains.php.lang.psi.resolve.types.PhpTypeInfo$1.internalCompute(PhpTypeInfo.java:37)
    at com.intellij.openapi.util.Computable$NotNullCachedComputable.compute(Computable.java:52)
    at com.intellij.openapi.util.RecursionManager$2.doPreventingRecursion(RecursionManager.java:112)
    at com.intellij.openapi.util.RecursionManager.doPreventingRecursion(RecursionManager.java:68)
    at com.jetbrains.php.lang.psi.resolve.types.PhpTypeInfo.getType(PhpTypeInfo.java:37)
    at com.jetbrains.php.lang.psi.elements.impl.PhpTypedElementImpl.getType(PhpTypedElementImpl.java:26)
    at com.jetbrains.php.lang.psi.elements.impl.PhpExpressionImpl.getType(PhpExpressionImpl.java:59)
    at com.jetbrains.php.lang.psi.resolve.types.PhpTypeAnalyserVisitor.visitPhpField(PhpTypeAnalyserVisitor.java:375)
    at com.jetbrains.php.lang.psi.elements.impl.FieldImpl.accept(FieldImpl.java:47)
    at com.jetbrains.php.lang.psi.resolve.types.PhpTypeInfo$1.internalCompute(PhpTypeInfo.java:51)
    at com.jetbrains.php.lang.psi.resolve.types.PhpTypeInfo$1.internalCompute(PhpTypeInfo.java:37)
    at com.intellij.openapi.util.Computable$NotNullCachedComputable.compute(Computable.java:52)
    at com.intellij.openapi.util.RecursionManager$2.doPreventingRecursion(RecursionManager.java:112)
    at com.intellij.openapi.util.RecursionManager.doPreventingRecursion(RecursionManager.java:68)
    at com.jetbrains.php.lang.psi.resolve.types.PhpTypeInfo.getType(PhpTypeInfo.java:37)
    at com.jetbrains.php.lang.psi.stubs.PhpFieldElementType.createStub(PhpFieldElementType.java:33)
    at com.jetbrains.php.lang.psi.stubs.PhpFieldElementType.createStub(PhpFieldElementType.java:20)
    at com.intellij.psi.stubs.DefaultStubBuilder.a(DefaultStubBuilder.java:60)
    at com.intellij.psi.stubs.DefaultStubBuilder.buildStubTree(DefaultStubBuilder.java:36)
    at com.intellij.psi.impl.source.PsiFileImpl.calcStubTree(PsiFileImpl.java:1013)
    at com.intellij.psi.stubs.StubProcessingHelperBase.processStubsInFile(StubProcessingHelperBase.java:75)
    at com.intellij.psi.stubs.StubProcessingHelperBase.processStubsInFile(StubProcessingHelperBase.java:52)
    at com.intellij.psi.stubs.StubIndexImpl$1.process(StubIndexImpl.java:231)
    at com.intellij.psi.stubs.StubIndexImpl$StubIdListContainerAction.perform(StubIndexImpl.java:582)
    at com.intellij.psi.stubs.StubIndexImpl$StubIdListContainerAction.perform(StubIndexImpl.java:570)
    at com.intellij.util.indexing.ValueContainer.forEach(ValueContainer.java:81)
    at com.intellij.psi.stubs.StubIndexImpl.a(StubIndexImpl.java:252)
    at com.intellij.psi.stubs.StubIndexImpl.processElements(StubIndexImpl.java:223)
    at com.intellij.psi.stubs.StubIndex.getElements(StubIndex.java:145)
    at com.intellij.psi.stubs.StubIndex.getElements(StubIndex.java:135)
    at com.jetbrains.php.navigation.PhpGotoClassContributor.getItemsByName(PhpGotoClassContributor.java:34)
    at com.intellij.ide.util.gotoByName.ContributorsBasedGotoByModel$3.process(ContributorsBasedGotoByModel.java:221)
    at com.intellij.ide.util.gotoByName.ContributorsBasedGotoByModel$3.process(ContributorsBasedGotoByModel.java:195)
    at com.intellij.concurrency.ApplierCompleter.b(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:1169)
    at com.intellij.concurrency.ApplierCompleter$2.run(ApplierCompleter.java:94)
    at com.intellij.openapi.progress.impl.CoreProgressManager.a(CoreProgressManager.java:446)
    at com.intellij.openapi.progress.impl.CoreProgressManager.a(CoreProgressManager.java:443)
    at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:392)
    at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:54)
    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:108)



java.lang.IllegalStateException: Not a JSON Object: null
    at com.google.gson.JsonElement.getAsJsonObject(JsonElement.java:90)
    at de.espend.idea.php.toolbox.utils.JsonParseUtil.getDeserializeConfig(JsonParseUtil.java:36)
    at de.espend.idea.php.toolbox.utils.ExtensionProviderUtil$6.compute(ExtensionProviderUtil.java:245)
    at com.intellij.psi.util.CachedValuesManager$1.compute(CachedValuesManager.java:136)
    at com.intellij.psi.impl.PsiCachedValueImpl.doCompute(PsiCachedValueImpl.java:49)
    at com.intellij.util.CachedValueBase.getValueWithLock(CachedValueBase.java:222)
    at com.intellij.psi.impl.PsiCachedValue.getValueWithLock(PsiCachedValue.java:66)
    at com.intellij.psi.impl.PsiCachedValueImpl.getValue(PsiCachedValueImpl.java:38)
    at com.intellij.psi.util.CachedValuesManager.getCachedValue(CachedValuesManager.java:129)
    at de.espend.idea.php.toolbox.utils.ExtensionProviderUtil.getJsonConfigsInner(ExtensionProviderUtil.java:241)
    at de.espend.idea.php.toolbox.utils.ExtensionProviderUtil.access$300(ExtensionProviderUtil.java:36)
    at de.espend.idea.php.toolbox.utils.ExtensionProviderUtil$5.compute(ExtensionProviderUtil.java:226)
    at com.intellij.psi.impl.PsiCachedValueImpl.doCompute(PsiCachedValueImpl.java:49)
    at com.intellij.util.CachedValueBase.getValueWithLock(CachedValueBase.java:222)
    at com.intellij.psi.impl.PsiCachedValue.getValueWithLock(PsiCachedValue.java:66)
    at com.intellij.psi.impl.PsiCachedValueImpl.getValue(PsiCachedValueImpl.java:38)
    at de.espend.idea.php.toolbox.utils.ExtensionProviderUtil.getJsonConfigs(ExtensionProviderUtil.java:233)
    at de.espend.idea.php.toolbox.utils.ExtensionProviderUtil.getTypesInner(ExtensionProviderUtil.java:190)
    at de.espend.idea.php.toolbox.utils.ExtensionProviderUtil.access$200(ExtensionProviderUtil.java:36)
    at de.espend.idea.php.toolbox.utils.ExtensionProviderUtil$4.compute(ExtensionProviderUtil.java:172)
    at com.intellij.psi.impl.PsiCachedValueImpl.doCompute(PsiCachedValueImpl.java:49)
    at com.intellij.util.CachedValueBase.getValueWithLock(CachedValueBase.java:222)
    at com.intellij.psi.impl.PsiCachedValue.getValueWithLock(PsiCachedValue.java:66)
    at com.intellij.psi.impl.PsiCachedValueImpl.getValue(PsiCachedValueImpl.java:38)
    at de.espend.idea.php.toolbox.utils.ExtensionProviderUtil.getTypes(ExtensionProviderUtil.java:179)
    at de.espend.idea.php.toolbox.type.PhpToolboxTypeProvider.getType(PhpToolboxTypeProvider.java:50)
    at com.jetbrains.php.lang.psi.resolve.types.PhpTypeInfo$1.internalCompute(PhpTypeInfo.java:43)
    at com.jetbrains.php.lang.psi.resolve.types.PhpTypeInfo$1.internalCompute(PhpTypeInfo.java:37)
    at com.intellij.openapi.util.Computable$NotNullCachedComputable.compute(Computable.java:52)
    at com.intellij.openapi.util.RecursionManager$2.doPreventingRecursion(RecursionManager.java:112)
    at com.intellij.openapi.util.RecursionManager.doPreventingRecursion(RecursionManager.java:68)
    at com.jetbrains.php.lang.psi.resolve.types.PhpTypeInfo.getType(PhpTypeInfo.java:37)
    at com.jetbrains.php.lang.psi.elements.impl.PhpReferenceImpl.getType(PhpReferenceImpl.java:207)
    at com.jetbrains.php.lang.psi.resolve.types.PhpType.add(PhpType.java:153)
    at com.jetbrains.php.lang.psi.resolve.types.PhpTypeAnalyserVisitor.addType(PhpTypeAnalyserVisitor.java:57)
    at com.jetbrains.php.lang.psi.resolve.types.PhpTypeAnalyserVisitor.visitPhpAssignmentExpression(PhpTypeAnalyserVisitor.java:167)
    at com.jetbrains.php.lang.psi.elements.impl.AssignmentExpressionImpl.accept(AssignmentExpressionImpl.java:37)
    at com.jetbrains.php.lang.psi.resolve.types.PhpTypeInfo$1.internalCompute(PhpTypeInfo.java:51)
    at com.jetbrains.php.lang.psi.resolve.types.PhpTypeInfo$1.internalCompute(PhpTypeInfo.java:37)
    at com.intellij.openapi.util.Computable$NotNullCachedComputable.compute(Computable.java:52)
    at com.intellij.openapi.util.RecursionManager$2.doPreventingRecursion(RecursionManager.java:112)
    at com.intellij.openapi.util.RecursionManager.doPreventingRecursion(RecursionManager.java:68)
    at com.jetbrains.php.lang.psi.resolve.types.PhpTypeInfo.getType(PhpTypeInfo.java:37)
    at com.jetbrains.php.lang.psi.elements.impl.PhpTypedElementImpl.getType(PhpTypedElementImpl.java:26)
    at com.jetbrains.php.lang.psi.elements.impl.PhpExpressionImpl.getType(PhpExpressionImpl.java:59)
    at com.jetbrains.php.lang.psi.resolve.types.PhpTypeAnalyserVisitor.visitPhpField(PhpTypeAnalyserVisitor.java:375)
    at com.jetbrains.php.lang.psi.elements.impl.FieldImpl.accept(FieldImpl.java:47)
    at com.jetbrains.php.lang.psi.resolve.types.PhpTypeInfo$1.internalCompute(PhpTypeInfo.java:51)
    at com.jetbrains.php.lang.psi.resolve.types.PhpTypeInfo$1.internalCompute(PhpTypeInfo.java:37)
    at com.intellij.openapi.util.Computable$NotNullCachedComputable.compute(Computable.java:52)
    at com.intellij.openapi.util.RecursionManager$2.doPreventingRecursion(RecursionManager.java:112)
    at com.intellij.openapi.util.RecursionManager.doPreventingRecursion(RecursionManager.java:68)
    at com.jetbrains.php.lang.psi.resolve.types.PhpTypeInfo.getType(PhpTypeInfo.java:37)
    at com.jetbrains.php.lang.psi.stubs.PhpFieldElementType.createStub(PhpFieldElementType.java:33)
    at com.jetbrains.php.lang.psi.stubs.PhpFieldElementType.createStub(PhpFieldElementType.java:20)
    at com.intellij.psi.stubs.DefaultStubBuilder.a(DefaultStubBuilder.java:60)
    at com.intellij.psi.stubs.DefaultStubBuilder.buildStubTree(DefaultStubBuilder.java:36)
    at com.intellij.psi.impl.source.PsiFileImpl.calcStubTree(PsiFileImpl.java:1013)
    at com.intellij.psi.stubs.StubProcessingHelperBase.processStubsInFile(StubProcessingHelperBase.java:75)
    at com.intellij.psi.stubs.StubProcessingHelperBase.processStubsInFile(StubProcessingHelperBase.java:52)
    at com.intellij.psi.stubs.StubIndexImpl$1.process(StubIndexImpl.java:231)
    at com.intellij.psi.stubs.StubIndexImpl$StubIdListContainerAction.perform(StubIndexImpl.java:582)
    at com.intellij.psi.stubs.StubIndexImpl$StubIdListContainerAction.perform(StubIndexImpl.java:570)
    at com.intellij.util.indexing.ValueContainer.forEach(ValueContainer.java:81)
    at com.intellij.psi.stubs.StubIndexImpl.a(StubIndexImpl.java:252)
    at com.intellij.psi.stubs.StubIndexImpl.processElements(StubIndexImpl.java:223)
    at com.intellij.psi.stubs.StubIndex.getElements(StubIndex.java:145)
    at com.intellij.psi.stubs.StubIndex.getElements(StubIndex.java:135)
    at com.jetbrains.php.navigation.PhpGotoClassContributor.getItemsByName(PhpGotoClassContributor.java:34)
    at com.intellij.ide.util.gotoByName.ContributorsBasedGotoByModel$3.process(ContributorsBasedGotoByModel.java:221)
    at com.intellij.ide.util.gotoByName.ContributorsBasedGotoByModel$3.process(ContributorsBasedGotoByModel.java:195)
    at com.intellij.concurrency.ApplierCompleter.b(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:1169)
    at com.intellij.concurrency.ApplierCompleter$2.run(ApplierCompleter.java:94)
    at com.intellij.openapi.progress.impl.CoreProgressManager.a(CoreProgressManager.java:446)
    at com.intellij.openapi.progress.impl.CoreProgressManager.a(CoreProgressManager.java:443)
    at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:392)
    at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:54)
    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:108)



java.lang.IllegalStateException: Not a JSON Object: null
    at com.google.gson.JsonElement.getAsJsonObject(JsonElement.java:90)
    at de.espend.idea.php.toolbox.utils.JsonParseUtil.getDeserializeConfig(JsonParseUtil.java:36)
    at de.espend.idea.php.toolbox.utils.ExtensionProviderUtil$6.compute(ExtensionProviderUtil.java:245)
    at com.intellij.psi.util.CachedValuesManager$1.compute(CachedValuesManager.java:136)
    at com.intellij.psi.impl.PsiCachedValueImpl.doCompute(PsiCachedValueImpl.java:49)
    at com.intellij.util.CachedValueBase.getValueWithLock(CachedValueBase.java:222)
    at com.intellij.psi.impl.PsiCachedValue.getValueWithLock(PsiCachedValue.java:66)
    at com.intellij.psi.impl.PsiCachedValueImpl.getValue(PsiCachedValueImpl.java:38)
    at com.intellij.psi.util.CachedValuesManager.getCachedValue(CachedValuesManager.java:129)
    at de.espend.idea.php.toolbox.utils.ExtensionProviderUtil.getJsonConfigsInner(ExtensionProviderUtil.java:241)
    at de.espend.idea.php.toolbox.utils.ExtensionProviderUtil.access$300(ExtensionProviderUtil.java:36)
    at de.espend.idea.php.toolbox.utils.ExtensionProviderUtil$5.compute(ExtensionProviderUtil.java:226)
    at com.intellij.psi.impl.PsiCachedValueImpl.doCompute(PsiCachedValueImpl.java:49)
    at com.intellij.util.CachedValueBase.getValueWithLock(CachedValueBase.java:222)
    at com.intellij.psi.impl.PsiCachedValue.getValueWithLock(PsiCachedValue.java:66)
    at com.intellij.psi.impl.PsiCachedValueImpl.getValue(PsiCachedValueImpl.java:38)
    at de.espend.idea.php.toolbox.utils.ExtensionProviderUtil.getJsonConfigs(ExtensionProviderUtil.java:233)
    at de.espend.idea.php.toolbox.utils.ExtensionProviderUtil.getTypesInner(ExtensionProviderUtil.java:190)
    at de.espend.idea.php.toolbox.utils.ExtensionProviderUtil.access$200(ExtensionProviderUtil.java:36)
    at de.espend.idea.php.toolbox.utils.ExtensionProviderUtil$4.compute(ExtensionProviderUtil.java:172)
    at com.intellij.psi.impl.PsiCachedValueImpl.doCompute(PsiCachedValueImpl.java:49)
    at com.intellij.util.CachedValueBase.getValueWithLock(CachedValueBase.java:222)
    at com.intellij.psi.impl.PsiCachedValue.getValueWithLock(PsiCachedValue.java:66)
    at com.intellij.psi.impl.PsiCachedValueImpl.getValue(PsiCachedValueImpl.java:38)
    at de.espend.idea.php.toolbox.utils.ExtensionProviderUtil.getTypes(ExtensionProviderUtil.java:179)
    at de.espend.idea.php.toolbox.type.PhpToolboxTypeProvider.getType(PhpToolboxTypeProvider.java:50)
    at com.jetbrains.php.lang.psi.resolve.types.PhpTypeInfo$1.internalCompute(PhpTypeInfo.java:43)
    at com.jetbrains.php.lang.psi.resolve.types.PhpTypeInfo$1.internalCompute(PhpTypeInfo.java:37)
    at com.intellij.openapi.util.Computable$NotNullCachedComputable.compute(Computable.java:52)
    at com.intellij.openapi.util.RecursionManager$2.doPreventingRecursion(RecursionManager.java:112)
    at com.intellij.openapi.util.RecursionManager.doPreventingRecursion(RecursionManager.java:68)
    at com.jetbrains.php.lang.psi.resolve.types.PhpTypeInfo.getType(PhpTypeInfo.java:37)
    at com.jetbrains.php.lang.psi.elements.impl.PhpReferenceImpl.getType(PhpReferenceImpl.java:207)
    at com.jetbrains.php.lang.psi.resolve.types.PhpType.add(PhpType.java:153)
    at com.jetbrains.php.lang.psi.resolve.types.PhpTypeAnalyserVisitor.addType(PhpTypeAnalyserVisitor.java:57)
    at com.jetbrains.php.lang.psi.resolve.types.PhpTypeAnalyserVisitor.visitPhpAssignmentExpression(PhpTypeAnalyserVisitor.java:167)
    at com.jetbrains.php.lang.psi.elements.impl.AssignmentExpressionImpl.accept(AssignmentExpressionImpl.java:37)
    at com.jetbrains.php.lang.psi.resolve.types.PhpTypeInfo$1.internalCompute(PhpTypeInfo.java:51)
    at com.jetbrains.php.lang.psi.resolve.types.PhpTypeInfo$1.internalCompute(PhpTypeInfo.java:37)
    at com.intellij.openapi.util.Computable$NotNullCachedComputable.compute(Computable.java:52)
    at com.intellij.openapi.util.RecursionManager$2.doPreventingRecursion(RecursionManager.java:112)
    at com.intellij.openapi.util.RecursionManager.doPreventingRecursion(RecursionManager.java:68)
    at com.jetbrains.php.lang.psi.resolve.types.PhpTypeInfo.getType(PhpTypeInfo.java:37)
    at com.jetbrains.php.lang.psi.elements.impl.PhpTypedElementImpl.getType(PhpTypedElementImpl.java:26)
    at com.jetbrains.php.lang.psi.elements.impl.PhpExpressionImpl.getType(PhpExpressionImpl.java:59)
    at com.jetbrains.php.lang.psi.resolve.types.PhpTypeAnalyserVisitor.visitPhpField(PhpTypeAnalyserVisitor.java:375)
    at com.jetbrains.php.lang.psi.elements.impl.FieldImpl.accept(FieldImpl.java:47)
    at com.jetbrains.php.lang.psi.resolve.types.PhpTypeInfo$1.internalCompute(PhpTypeInfo.java:51)
    at com.jetbrains.php.lang.psi.resolve.types.PhpTypeInfo$1.internalCompute(PhpTypeInfo.java:37)
    at com.intellij.openapi.util.Computable$NotNullCachedComputable.compute(Computable.java:52)
    at com.intellij.openapi.util.RecursionManager$2.doPreventingRecursion(RecursionManager.java:112)
    at com.intellij.openapi.util.RecursionManager.doPreventingRecursion(RecursionManager.java:68)
    at com.jetbrains.php.lang.psi.resolve.types.PhpTypeInfo.getType(PhpTypeInfo.java:37)
    at com.jetbrains.php.lang.psi.stubs.PhpFieldElementType.createStub(PhpFieldElementType.java:33)
    at com.jetbrains.php.lang.psi.stubs.PhpFieldElementType.createStub(PhpFieldElementType.java:20)
    at com.intellij.psi.stubs.DefaultStubBuilder.a(DefaultStubBuilder.java:60)
    at com.intellij.psi.stubs.DefaultStubBuilder.buildStubTree(DefaultStubBuilder.java:36)
    at com.intellij.psi.impl.source.PsiFileImpl.calcStubTree(PsiFileImpl.java:1013)
    at com.intellij.psi.stubs.StubProcessingHelperBase.processStubsInFile(StubProcessingHelperBase.java:75)
    at com.intellij.psi.stubs.StubProcessingHelperBase.processStubsInFile(StubProcessingHelperBase.java:52)
    at com.intellij.psi.stubs.StubIndexImpl$1.process(StubIndexImpl.java:231)
    at com.intellij.psi.stubs.StubIndexImpl$StubIdListContainerAction.perform(StubIndexImpl.java:582)
    at com.intellij.psi.stubs.StubIndexImpl$StubIdListContainerAction.perform(StubIndexImpl.java:570)
    at com.intellij.util.indexing.ValueContainer.forEach(ValueContainer.java:81)
    at com.intellij.psi.stubs.StubIndexImpl.a(StubIndexImpl.java:252)
    at com.intellij.psi.stubs.StubIndexImpl.processElements(StubIndexImpl.java:223)
    at com.intellij.psi.stubs.StubIndex.getElements(StubIndex.java:145)
    at com.intellij.psi.stubs.StubIndex.getElements(StubIndex.java:135)
    at com.jetbrains.php.navigation.PhpGotoClassContributor.getItemsByName(PhpGotoClassContributor.java:34)
    at com.intellij.ide.util.gotoByName.ContributorsBasedGotoByModel$3.process(ContributorsBasedGotoByModel.java:221)
    at com.intellij.ide.util.gotoByName.ContributorsBasedGotoByModel$3.process(ContributorsBasedGotoByModel.java:195)
    at com.intellij.concurrency.ApplierCompleter.b(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:1169)
    at com.intellij.concurrency.ApplierCompleter$2.run(ApplierCompleter.java:94)
    at com.intellij.openapi.progress.impl.CoreProgressManager.a(CoreProgressManager.java:446)
    at com.intellij.openapi.progress.impl.CoreProgressManager.a(CoreProgressManager.java:443)
    at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:392)
    at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:54)
    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:108)

2/2

Error building initial foldings: Not a JSON Object: null
java.lang.IllegalStateException: Not a JSON Object: null
    at com.google.gson.JsonElement.getAsJsonObject(JsonElement.java:90)
    at de.espend.idea.php.toolbox.utils.JsonParseUtil.getDeserializeConfig(JsonParseUtil.java:36)
    at de.espend.idea.php.toolbox.utils.ExtensionProviderUtil$6.compute(ExtensionProviderUtil.java:245)
    at com.intellij.psi.util.CachedValuesManager$1.compute(CachedValuesManager.java:136)
    at com.intellij.psi.impl.PsiCachedValueImpl.doCompute(PsiCachedValueImpl.java:49)
    at com.intellij.util.CachedValueBase.getValueWithLock(CachedValueBase.java:222)
    at com.intellij.psi.impl.PsiCachedValue.getValueWithLock(PsiCachedValue.java:66)
    at com.intellij.psi.impl.PsiCachedValueImpl.getValue(PsiCachedValueImpl.java:38)
    at com.intellij.psi.util.CachedValuesManager.getCachedValue(CachedValuesManager.java:129)
    at de.espend.idea.php.toolbox.utils.ExtensionProviderUtil.getJsonConfigsInner(ExtensionProviderUtil.java:241)
    at de.espend.idea.php.toolbox.utils.ExtensionProviderUtil.access$300(ExtensionProviderUtil.java:36)
    at de.espend.idea.php.toolbox.utils.ExtensionProviderUtil$5.compute(ExtensionProviderUtil.java:226)
    at com.intellij.psi.impl.PsiCachedValueImpl.doCompute(PsiCachedValueImpl.java:49)
    at com.intellij.util.CachedValueBase.getValueWithLock(CachedValueBase.java:222)
    at com.intellij.psi.impl.PsiCachedValue.getValueWithLock(PsiCachedValue.java:66)
    at com.intellij.psi.impl.PsiCachedValueImpl.getValue(PsiCachedValueImpl.java:38)
    at de.espend.idea.php.toolbox.utils.ExtensionProviderUtil.getJsonConfigs(ExtensionProviderUtil.java:233)
    at de.espend.idea.php.toolbox.utils.ExtensionProviderUtil.getTypesInner(ExtensionProviderUtil.java:190)
    at de.espend.idea.php.toolbox.utils.ExtensionProviderUtil.access$200(ExtensionProviderUtil.java:36)
    at de.espend.idea.php.toolbox.utils.ExtensionProviderUtil$4.compute(ExtensionProviderUtil.java:172)
    at com.intellij.psi.impl.PsiCachedValueImpl.doCompute(PsiCachedValueImpl.java:49)
    at com.intellij.util.CachedValueBase.getValueWithLock(CachedValueBase.java:222)
    at com.intellij.psi.impl.PsiCachedValue.getValueWithLock(PsiCachedValue.java:66)
    at com.intellij.psi.impl.PsiCachedValueImpl.getValue(PsiCachedValueImpl.java:38)
    at de.espend.idea.php.toolbox.utils.ExtensionProviderUtil.getTypes(ExtensionProviderUtil.java:179)
    at de.espend.idea.php.toolbox.type.PhpToolboxTypeProvider.getType(PhpToolboxTypeProvider.java:50)
    at com.jetbrains.php.lang.psi.resolve.types.PhpTypeInfo$1.internalCompute(PhpTypeInfo.java:43)
    at com.jetbrains.php.lang.psi.resolve.types.PhpTypeInfo$1.internalCompute(PhpTypeInfo.java:37)
    at com.intellij.openapi.util.Computable$NotNullCachedComputable.compute(Computable.java:52)
    at com.intellij.openapi.util.RecursionManager$2.doPreventingRecursion(RecursionManager.java:112)
    at com.intellij.openapi.util.RecursionManager.doPreventingRecursion(RecursionManager.java:68)
    at com.jetbrains.php.lang.psi.resolve.types.PhpTypeInfo.getType(PhpTypeInfo.java:37)
    at com.jetbrains.php.lang.psi.elements.impl.PhpReferenceImpl.getType(PhpReferenceImpl.java:207)
    at com.jetbrains.php.lang.psi.elements.impl.MemberReferenceImpl.resolveGlobal(MemberReferenceImpl.java:142)
    at com.jetbrains.php.lang.psi.elements.impl.PhpReferenceImpl$1.resolve(PhpReferenceImpl.java:144)
    at com.jetbrains.php.lang.psi.elements.impl.PhpReferenceImpl$1.resolve(PhpReferenceImpl.java:141)
    at com.intellij.psi.impl.source.resolve.ResolveCache$3.compute(ResolveCache.java:142)
    at com.intellij.openapi.util.RecursionManager$2.doPreventingRecursion(RecursionManager.java:112)
    at com.intellij.psi.impl.source.resolve.ResolveCache.a(ResolveCache.java:139)
    at com.intellij.psi.impl.source.resolve.ResolveCache.resolveWithCaching(ResolveCache.java:167)
    at com.intellij.psi.impl.source.resolve.ResolveCache.resolveWithCaching(ResolveCache.java:159)
    at com.jetbrains.php.lang.psi.elements.impl.PhpReferenceImpl.multiResolve(PhpReferenceImpl.java:136)
    at com.jetbrains.php.lang.psi.elements.impl.PhpReferenceImpl.resolve(PhpReferenceImpl.java:122)
    at fr.adrienbrault.idea.symfony2plugin.Symfony2InterfacesUtil.getMultiResolvedMethod(Symfony2InterfacesUtil.java:167)
    at fr.adrienbrault.idea.symfony2plugin.util.MethodMatcher$StringParameterRecursiveMatcher.match(MethodMatcher.java:184)
    at fr.adrienbrault.idea.symfony2plugin.util.MethodMatcher.getMatchedSignatureWithDepth(MethodMatcher.java:41)
    at fr.adrienbrault.idea.symfony2plugin.util.MethodMatcher.getMatchedSignatureWithDepth(MethodMatcher.java:22)
    at fr.adrienbrault.idea.symfony2plugin.navigation.PhpFoldingBuilder.attachModelShortcuts(PhpFoldingBuilder.java:109)
    at fr.adrienbrault.idea.symfony2plugin.navigation.PhpFoldingBuilder.buildFoldRegions(PhpFoldingBuilder.java:54)
    at com.intellij.lang.folding.LanguageFolding.buildFoldingDescriptors(LanguageFolding.java:83)
    at com.intellij.lang.folding.CompositeFoldingBuilder.buildFoldRegions(CompositeFoldingBuilder.java:60)
    at com.intellij.lang.folding.LanguageFolding.buildFoldingDescriptors(LanguageFolding.java:83)
    at com.intellij.codeInsight.folding.impl.FoldingUpdate.a(FoldingUpdate.java:256)
    at com.intellij.codeInsight.folding.impl.FoldingUpdate.getFoldingsFor(FoldingUpdate.java:242)
    at com.intellij.codeInsight.folding.impl.CodeFoldingManagerImpl.buildInitialFoldings(CodeFoldingManagerImpl.java:232)
    at com.intellij.openapi.fileEditor.impl.text.PsiAwareTextEditorProvider.createEditorAsync(PsiAwareTextEditorProvider.java:63)
    at com.intellij.openapi.fileEditor.impl.FileEditorManagerImpl$12.compute(FileEditorManagerImpl.java:836)
    at com.intellij.openapi.fileEditor.impl.FileEditorManagerImpl$12.compute(FileEditorManagerImpl.java:829)
    at com.intellij.openapi.application.impl.ApplicationImpl.runReadAction(ApplicationImpl.java:955)
    at com.intellij.openapi.fileEditor.impl.FileEditorManagerImpl.openFileImpl4(FileEditorManagerImpl.java:829)
    at com.intellij.openapi.fileEditor.impl.FileEditorManagerImpl.openFileImpl3(FileEditorManagerImpl.java:789)
    at com.intellij.openapi.fileEditor.impl.FileEditorManagerImpl$10.run(FileEditorManagerImpl.java:769)
    at com.intellij.openapi.command.impl.CoreCommandProcessor.executeCommand(CoreCommandProcessor.java:117)
    at com.intellij.openapi.command.impl.CoreCommandProcessor.executeCommand(CoreCommandProcessor.java:99)
    at com.intellij.openapi.command.impl.CoreCommandProcessor.executeCommand(CoreCommandProcessor.java:85)
    at com.intellij.openapi.fileEditor.impl.FileEditorManagerImpl.openFileImpl2(FileEditorManagerImpl.java:766)
    at com.intellij.openapi.fileEditor.impl.FileEditorManagerImpl.openFileWithProviders(FileEditorManagerImpl.java:707)
    at com.intellij.openapi.fileEditor.ex.FileEditorManagerEx.openFile(FileEditorManagerEx.java:151)
    at com.intellij.openapi.fileEditor.impl.FileEditorManagerImpl$16.run(FileEditorManagerImpl.java:1143)
    at com.intellij.openapi.command.impl.CoreCommandProcessor.executeCommand(CoreCommandProcessor.java:124)
    at com.intellij.openapi.command.impl.CoreCommandProcessor.executeCommand(CoreCommandProcessor.java:99)
    at com.intellij.openapi.command.impl.CoreCommandProcessor.executeCommand(CoreCommandProcessor.java:85)
    at com.intellij.openapi.fileEditor.impl.FileEditorManagerImpl.openEditor(FileEditorManagerImpl.java:1139)
    at com.intellij.openapi.fileEditor.OpenFileDescriptor.navigateInAnyFileEditor(OpenFileDescriptor.java:146)
    at com.intellij.openapi.fileEditor.OpenFileDescriptor.navigateInEditor(OpenFileDescriptor.java:132)
    at com.intellij.openapi.fileEditor.OpenFileDescriptor.navigateInEditorOrNativeApp(OpenFileDescriptor.java:128)
    at com.intellij.openapi.fileEditor.OpenFileDescriptor.navigate(OpenFileDescriptor.java:115)
    at com.intellij.psi.impl.PsiElementBase.navigate(PsiElementBase.java:197)
    at com.intellij.codeInsight.navigation.NavigationUtil.openFileWithPsiElement(NavigationUtil.java:179)
    at com.intellij.codeInsight.navigation.NavigationUtil.activateFileWithPsiElement(NavigationUtil.java:157)
    at com.intellij.ide.actions.GotoClassAction$1.elementChosen(GotoClassAction.java:120)
    at com.intellij.ide.actions.GotoActionBase$1.elementChosen(GotoActionBase.java:257)
    at com.intellij.ide.util.gotoByName.ChooseByNamePopup.close(ChooseByNamePopup.java:223)
    at com.intellij.ide.util.gotoByName.ChooseByNameBase.doClose(ChooseByNameBase.java:788)
    at com.intellij.ide.util.gotoByName.ChooseByNameBase$8.actionPerformed(ChooseByNameBase.java:641)
    at javax.swing.JTextField.fireActionPerformed(JTextField.java:508)
    at javax.swing.JTextField.postActionEvent(JTextField.java:721)
    at javax.swing.JTextField$NotifyAction.actionPerformed(JTextField.java:836)
    at javax.swing.SwingUtilities.notifyAction(SwingUtilities.java:1663)
    at javax.swing.JComponent.processKeyBinding(JComponent.java:2882)
    at javax.swing.JComponent.processKeyBindings(JComponent.java:2929)
    at javax.swing.JComponent.processKeyEvent(JComponent.java:2845)
    at com.intellij.ide.util.gotoByName.ChooseByNameBase$MyTextField.processKeyEvent(ChooseByNameBase.java:1362)
    at java.awt.Component.processEvent(Component.java:6302)
    at java.awt.Container.processEvent(Container.java:2234)
    at java.awt.Component.dispatchEventImpl(Component.java:4881)
    at java.awt.Container.dispatchEventImpl(Container.java:2292)
    at java.awt.Component.dispatchEvent(Component.java:4703)
    at java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1954)
    at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(DefaultKeyboardFocusManager.java:806)
    at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(DefaultKeyboardFocusManager.java:1074)
    at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:945)
    at java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:771)
    at java.awt.Component.dispatchEventImpl(Component.java:4752)
    at java.awt.Container.dispatchEventImpl(Container.java:2292)
    at java.awt.Window.dispatchEventImpl(Window.java:2750)
    at java.awt.Component.dispatchEvent(Component.java:4703)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
    at java.awt.EventQueue.access$500(EventQueue.java:97)
    at java.awt.EventQueue$3.run(EventQueue.java:709)
    at java.awt.EventQueue$3.run(EventQueue.java:703)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:86)
    at java.awt.EventQueue$4.run(EventQueue.java:731)
    at java.awt.EventQueue$4.run(EventQueue.java:729)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
    at com.intellij.ide.IdeEventQueue.b(IdeEventQueue.java:866)
    at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:623)
    at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:381)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)



java.lang.IllegalStateException: Not a JSON Object: null
    at com.google.gson.JsonElement.getAsJsonObject(JsonElement.java:90)
    at de.espend.idea.php.toolbox.utils.JsonParseUtil.getDeserializeConfig(JsonParseUtil.java:36)
    at de.espend.idea.php.toolbox.utils.ExtensionProviderUtil$6.compute(ExtensionProviderUtil.java:245)
    at com.intellij.psi.util.CachedValuesManager$1.compute(CachedValuesManager.java:136)
    at com.intellij.psi.impl.PsiCachedValueImpl.doCompute(PsiCachedValueImpl.java:49)
    at com.intellij.util.CachedValueBase.getValueWithLock(CachedValueBase.java:222)
    at com.intellij.psi.impl.PsiCachedValue.getValueWithLock(PsiCachedValue.java:66)
    at com.intellij.psi.impl.PsiCachedValueImpl.getValue(PsiCachedValueImpl.java:38)
    at com.intellij.psi.util.CachedValuesManager.getCachedValue(CachedValuesManager.java:129)
    at de.espend.idea.php.toolbox.utils.ExtensionProviderUtil.getJsonConfigsInner(ExtensionProviderUtil.java:241)
    at de.espend.idea.php.toolbox.utils.ExtensionProviderUtil.access$300(ExtensionProviderUtil.java:36)
    at de.espend.idea.php.toolbox.utils.ExtensionProviderUtil$5.compute(ExtensionProviderUtil.java:226)
    at com.intellij.psi.impl.PsiCachedValueImpl.doCompute(PsiCachedValueImpl.java:49)
    at com.intellij.util.CachedValueBase.getValueWithLock(CachedValueBase.java:222)
    at com.intellij.psi.impl.PsiCachedValue.getValueWithLock(PsiCachedValue.java:66)
    at com.intellij.psi.impl.PsiCachedValueImpl.getValue(PsiCachedValueImpl.java:38)
    at de.espend.idea.php.toolbox.utils.ExtensionProviderUtil.getJsonConfigs(ExtensionProviderUtil.java:233)
    at de.espend.idea.php.toolbox.utils.ExtensionProviderUtil.getTypesInner(ExtensionProviderUtil.java:190)
    at de.espend.idea.php.toolbox.utils.ExtensionProviderUtil.access$200(ExtensionProviderUtil.java:36)
    at de.espend.idea.php.toolbox.utils.ExtensionProviderUtil$4.compute(ExtensionProviderUtil.java:172)
    at com.intellij.psi.impl.PsiCachedValueImpl.doCompute(PsiCachedValueImpl.java:49)
    at com.intellij.util.CachedValueBase.getValueWithLock(CachedValueBase.java:222)
    at com.intellij.psi.impl.PsiCachedValue.getValueWithLock(PsiCachedValue.java:66)
    at com.intellij.psi.impl.PsiCachedValueImpl.getValue(PsiCachedValueImpl.java:38)
    at de.espend.idea.php.toolbox.utils.ExtensionProviderUtil.getTypes(ExtensionProviderUtil.java:179)
    at de.espend.idea.php.toolbox.type.PhpToolboxTypeProvider.getType(PhpToolboxTypeProvider.java:50)
    at com.jetbrains.php.lang.psi.resolve.types.PhpTypeInfo$1.internalCompute(PhpTypeInfo.java:43)
    at com.jetbrains.php.lang.psi.resolve.types.PhpTypeInfo$1.internalCompute(PhpTypeInfo.java:37)
    at com.intellij.openapi.util.Computable$NotNullCachedComputable.compute(Computable.java:52)
    at com.intellij.openapi.util.RecursionManager$2.doPreventingRecursion(RecursionManager.java:112)
    at com.intellij.openapi.util.RecursionManager.doPreventingRecursion(RecursionManager.java:68)
    at com.jetbrains.php.lang.psi.resolve.types.PhpTypeInfo.getType(PhpTypeInfo.java:37)
    at com.jetbrains.php.lang.psi.elements.impl.PhpReferenceImpl.getType(PhpReferenceImpl.java:207)
    at com.jetbrains.php.lang.psi.resolve.types.PhpType.add(PhpType.java:153)
    at com.jetbrains.php.lang.psi.elements.impl.FunctionImpl.visitReturn(FunctionImpl.java:191)
    at com.jetbrains.php.lang.psi.elements.impl.FunctionImpl.scanTree(FunctionImpl.java:216)
    at com.jetbrains.php.lang.psi.elements.impl.FunctionImpl.getLocalType(FunctionImpl.java:157)
    at com.jetbrains.php.lang.psi.stubs.PhpMethodElementType.createStub(PhpMethodElementType.java:32)
    at com.jetbrains.php.lang.psi.stubs.PhpMethodElementType.createStub(PhpMethodElementType.java:17)
    at com.intellij.psi.stubs.DefaultStubBuilder.a(DefaultStubBuilder.java:60)
    at com.intellij.psi.stubs.DefaultStubBuilder.buildStubTree(DefaultStubBuilder.java:36)
    at com.intellij.psi.impl.source.PsiFileImpl.calcStubTree(PsiFileImpl.java:1013)
    at com.intellij.psi.stubs.StubProcessingHelperBase.processStubsInFile(StubProcessingHelperBase.java:75)
    at com.intellij.psi.stubs.StubProcessingHelperBase.processStubsInFile(StubProcessingHelperBase.java:52)
    at com.intellij.psi.stubs.StubIndexImpl$1.process(StubIndexImpl.java:231)
    at com.intellij.psi.stubs.StubIndexImpl$StubIdListContainerAction.perform(StubIndexImpl.java:582)
    at com.intellij.psi.stubs.StubIndexImpl$StubIdListContainerAction.perform(StubIndexImpl.java:570)
    at com.intellij.util.indexing.ValueContainer.forEach(ValueContainer.java:81)
    at com.intellij.psi.stubs.StubIndexImpl.a(StubIndexImpl.java:252)
    at com.intellij.psi.stubs.StubIndexImpl.processElements(StubIndexImpl.java:223)
    at com.intellij.psi.stubs.StubIndex.getElements(StubIndex.java:145)
    at com.intellij.psi.stubs.StubIndex.getElements(StubIndex.java:135)
    at com.jetbrains.php.PhpIndexImpl.getByFQN(PhpIndexImpl.java:492)
    at com.jetbrains.php.PhpIndexImpl.getClassesByFQN(PhpIndexImpl.java:507)
    at com.jetbrains.php.lang.psi.elements.impl.PhpClassImpl.getSuperClass(PhpClassImpl.java:322)
    at com.jetbrains.php.PhpClassHierarchyUtils.getImmediateParents(PhpClassHierarchyUtils.java:329)
    at com.jetbrains.php.PhpClassHierarchyUtils.processSuperMembers(PhpClassHierarchyUtils.java:312)
    at com.jetbrains.php.lang.PhpLineMarkerProvider.findParents(PhpLineMarkerProvider.java:92)
    at com.jetbrains.php.lang.PhpLineMarkerProvider.collectSlowLineMarkers(PhpLineMarkerProvider.java:136)
    at com.intellij.codeInsight.daemon.impl.SlowLineMarkersPass.addLineMarkers(SlowLineMarkersPass.java:78)
    at com.intellij.codeInsight.daemon.impl.SlowLineMarkersPass.doCollectInformation(SlowLineMarkersPass.java:65)
    at com.intellij.codeHighlighting.TextEditorHighlightingPass.collectInformation(TextEditorHighlightingPass.java:67)
    at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass$1$1.run(PassExecutorService.java:444)
    at com.intellij.openapi.application.impl.ApplicationImpl.tryRunReadAction(ApplicationImpl.java:1169)
    at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass$1.run(PassExecutorService.java:435)
    at com.intellij.openapi.progress.impl.CoreProgressManager.a(CoreProgressManager.java:446)
    at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:392)
    at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:54)
    at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass.a(PassExecutorService.java:432)
    at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass.run(PassExecutorService.java:408)
    at com.intellij.concurrency.JobLauncherImpl$VoidForkJoinTask$1.exec(JobLauncherImpl.java:206)
    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:108)

Function call turned into variable when autocomplated

I found an issue when trying to type the following code:

<?php

$basename = basename($path);

When I try to autocomplete the function call, it prepends a $ turning the code into:

<?php

$basename = $basename($path);

This happens whenever there's a variable with the same name within the scope of a function you're trying to call, which i think would be quite often.

Add json_file provider

I have translation files.
They are .*/languages/[^/]+\.json (it was path regexp) files located in multiple places across projects.
In simplest use case keys from those files are used as properties of object (using __get() method):

\cs\Language::instance()-><caret>

I imagine this something like:

{
    "name"   : "translations",
    "source" : {
        "contributor" : "json_file",
        "path_mask"   : ".*/languages/[^/]+\\.json",
        "lookup"      : "key",
        "text"        : "value"
    }
}

Where lookup might be key or value (is used as lookup_string). And OPTIONAL text is used as type_text.

When and if this trivial use case I can provide few advanced use cases (nested JSON structures and object's properties with common prefix removed).

Invalid json file fails autocompletion

If one of json files would invalid then autocompletion stops working. IMHO it would possible just skip invalid file and even report an error to user.

Add extra parameter for registrar pipe into all PhpToolboxProviderInterface

Eg symfony.services is possible to provide public and private service, dont what to implement all possible conditions. symfony.translation.keys is able to filter by domain. allow string value but also think of #22. eg use parameter "x" of a function signature

  "registrar":[
    {
      "signatures":[
        {
          "function": "date"
        }
      ],
      "provider":"symfony.services",
      "language":"twig",
      "extra": "foo", ???
      "extra": "private=true,public=true" ? named args?
      "extra_parameter": 2, ??
    }
  ],

targets should be lookup_string aware

Under some circumstances it is necessary to be aware to current provided lookup_string.
e.g.

{
    "providers": [
        {
          "name": "template_files",
            "items": [
                {
                    "type_text": "template filename",
                    "target": "file://app/resources/templates/$1"
                }
            ]
        }
    ]
}

With this example it is possible to strg-click to any template file given by lookup_string available in some directories.

$templateParser->render('index.html.php'); or
$templateParser->render('sub/path/template_file.html.php');

To go more further, it should be also possible to provide target by any other provider function/const/member/field.

e.g.

<?php
class TemplateParser 
{
    public function getRelativeTemplatePath($file = '')
    {
        return "app/resources/templates/$file";
    }
}

thanks!

Allow invoke php code that will rebuild json metadata on code changes

Use case: I have coded console command which extract some information from code (services by tags for example) and generates data for json provider.

For getting it work, we should execute console command each time after xml/yml services changes. Is it possible invoke some php code when files are changed?

Completion spans across multiple classes instead of specified one

{
            "provider": "club-columns",
            "language": "php",
            "signatures": [
                {
                    "class": "App\\Models\\Club",
                    "method": "where"
                }
            ]

also shows the completion for every model - User::where, City::where etc.. Laravel. Does not matter if it's in signatures or signature form.

Worker exited due to exception java.lang.NullPointerException

PhpStorm 2016.1
Build #PS-145.258, built on March 16, 2016
JRE: 1.8.0_05-b13 amd64
JVM: Java HotSpot(TM) 64-Bit Server VM by Oracle Corporation
Worker exited due to exception
java.lang.NullPointerException
    at de.espend.idea.php.toolbox.navigation.PhpToolboxGotoDeclarationHandler.getGotoDeclarationTargets(PhpToolboxGotoDeclarationHandler.java:33)
    at com.intellij.codeInsight.navigation.actions.GotoDeclarationAction.findTargetElementsNoVS(GotoDeclarationAction.java:245)
    at com.intellij.codeInsight.navigation.CtrlMouseHandler.a(CtrlMouseHandler.java:531)
    at com.intellij.codeInsight.navigation.CtrlMouseHandler.a(CtrlMouseHandler.java:510)
    at com.intellij.codeInsight.navigation.CtrlMouseHandler.access$2600(CtrlMouseHandler.java:106)
    at com.intellij.codeInsight.navigation.CtrlMouseHandler$TooltipProvider.a(CtrlMouseHandler.java:846)
    at com.intellij.codeInsight.navigation.CtrlMouseHandler$TooltipProvider.access$2500(CtrlMouseHandler.java:786)
    at com.intellij.codeInsight.navigation.CtrlMouseHandler$TooltipProvider$1.performInReadAction(CtrlMouseHandler.java:831)
    at com.intellij.openapi.progress.util.ReadTask$1.compute(ReadTask.java:70)
    at com.intellij.openapi.progress.util.ReadTask$1.compute(ReadTask.java:67)
    at com.intellij.openapi.application.impl.ApplicationImpl.runReadAction(ApplicationImpl.java:966)
    at com.intellij.openapi.progress.util.ReadTask.runBackgroundProcess(ReadTask.java:67)
    at com.intellij.openapi.progress.util.ProgressIndicatorUtils$7.compute(ProgressIndicatorUtils.java:227)
    at com.intellij.openapi.progress.util.ProgressIndicatorUtils$7.compute(ProgressIndicatorUtils.java:223)
    at com.intellij.openapi.progress.impl.CoreProgressManager$3.run(CoreProgressManager.java:162)
    at com.intellij.openapi.progress.impl.CoreProgressManager$2.run(CoreProgressManager.java:142)
    at com.intellij.openapi.progress.impl.CoreProgressManager.a(CoreProgressManager.java:446)
    at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:392)
    at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:54)
    at com.intellij.openapi.progress.impl.CoreProgressManager.runProcess(CoreProgressManager.java:127)
    at com.intellij.openapi.progress.impl.CoreProgressManager.runProcess(CoreProgressManager.java:159)
    at com.intellij.openapi.progress.util.ProgressIndicatorUtils.a(ProgressIndicatorUtils.java:223)
    at com.intellij.openapi.progress.util.ProgressIndicatorUtils.access$000(ProgressIndicatorUtils.java:45)
    at com.intellij.openapi.progress.util.ProgressIndicatorUtils$6$2.run(ProgressIndicatorUtils.java:188)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)

[Json] Interface provider return provider

Often interfaces returing just its name. we can provide completion for eg $this->getProvider('foo') or in twig foo('foo')

provider::supports { return ['foo', 'dd'] }
provider::getName { return 'foo' }

Something doesn't work

Please, can you suggest what wrong in my config?

// php-toolbox/sonata-admin-toolbox.metadata.json

{
    "registrar": [
        {
            "signature": [
                "Sonata\\AdminBundle\\Datagrid\\ListMapper:addIdentifier:2",
                "Sonata\\AdminBundle\\Datagrid\\ListMapper:add:2",
                "Sonata\\AdminBundle\\Datagrid\\ListMapper:add:1"
            ],
            "provider": "sonata_admin_list_templates",
            "language": "php"
        }
    ],
    "providers": [
        {
            "name": "sonata_admin_list_templates",
            "defaults": {
                "icon": "icons.TwigIcons.TwigFileIcon"
            },
            "items": [
                {
                    "lookup_string": "array"
                },
                {
                    "lookup_string": "boolean"
                },
                {
                    "lookup_string": "date"
                },
                {
                    "lookup_string": "time"
                },
                {
                    "lookup_string": "datetime"
                },
                {
                    "lookup_string": "text"
                },
                {
                    "lookup_string": "textarea"
                },
                {
                    "lookup_string": "email"
                },
                {
                    "lookup_string": "trans"
                },
                {
                    "lookup_string": "string"
                },
                {
                    "lookup_string": "smallint"
                },
                {
                    "lookup_string": "bigint"
                },
                {
                    "lookup_string": "integer"
                },
                {
                    "lookup_string": "decimal"
                },
                {
                    "lookup_string": "identifier"
                },
                {
                    "lookup_string": "currency"
                },
                {
                    "lookup_string": "percent"
                },
                {
                    "lookup_string": "choice"
                },
                {
                    "lookup_string": "url"
                },
                {
                    "lookup_string": "html"
                }
            ]
        }
    ]
}
// ...
class DemandAdmin extends Admin
{
    // ...
    protected function configureListFields(ListMapper $listMapper)
    {
        $listMapper->add('ololo', ''); // no autocomplete here for 2nd argument
    }
}

java.lang.NullPointerException on 0.2 version

null
java.lang.NullPointerException
    at de.espend.idea.php.toolbox.matcher.php.container.ContainerConditions$TypeSignatureCondition.value(ContainerConditions.java:45)
    at de.espend.idea.php.toolbox.matcher.php.container.ContainerConditions$TypeSignatureCondition.value(ContainerConditions.java:36)
    at com.intellij.util.containers.ContainerUtil.find(ContainerUtil.java:883)
    at com.intellij.util.containers.ContainerUtil.find(ContainerUtil.java:854)
    at de.espend.idea.php.toolbox.utils.ExtensionProviderUtil.getTypesInner(ExtensionProviderUtil.java:196)
    at de.espend.idea.php.toolbox.utils.ExtensionProviderUtil.access$100(ExtensionProviderUtil.java:39)
    at de.espend.idea.php.toolbox.utils.ExtensionProviderUtil$4.compute(ExtensionProviderUtil.java:175)
    at com.intellij.psi.impl.PsiCachedValueImpl.doCompute(PsiCachedValueImpl.java:49)
    at com.intellij.util.CachedValueBase.getValueWithLock(CachedValueBase.java:222)
    at com.intellij.psi.impl.PsiCachedValue.getValueWithLock(PsiCachedValue.java:66)
    at com.intellij.psi.impl.PsiCachedValueImpl.getValue(PsiCachedValueImpl.java:38)
    at de.espend.idea.php.toolbox.utils.ExtensionProviderUtil.getTypes(ExtensionProviderUtil.java:182)
    at de.espend.idea.php.toolbox.type.PhpToolboxTypeProvider.getType(PhpToolboxTypeProvider.java:50)
    at com.jetbrains.php.lang.psi.resolve.types.PhpTypeInfo$1.internalCompute(PhpTypeInfo.java:43)
    at com.jetbrains.php.lang.psi.resolve.types.PhpTypeInfo$1.internalCompute(PhpTypeInfo.java:37)
    at com.intellij.openapi.util.Computable$NotNullCachedComputable.compute(Computable.java:52)
    at com.intellij.openapi.util.RecursionManager$2.doPreventingRecursion(RecursionManager.java:112)
    at com.intellij.openapi.util.RecursionManager.doPreventingRecursion(RecursionManager.java:68)
    at com.jetbrains.php.lang.psi.resolve.types.PhpTypeInfo.getType(PhpTypeInfo.java:37)
    at com.jetbrains.php.lang.psi.elements.impl.PhpReferenceImpl.getType(PhpReferenceImpl.java:207)
    at com.jetbrains.php.lang.psi.elements.impl.MemberReferenceImpl.resolveGlobal(MemberReferenceImpl.java:142)
    at com.jetbrains.php.lang.psi.elements.impl.PhpReferenceImpl$1.resolve(PhpReferenceImpl.java:144)
    at com.jetbrains.php.lang.psi.elements.impl.PhpReferenceImpl$1.resolve(PhpReferenceImpl.java:141)
    at com.intellij.psi.impl.source.resolve.ResolveCache$3.compute(ResolveCache.java:142)
    at com.intellij.openapi.util.RecursionManager$2.doPreventingRecursion(RecursionManager.java:112)
    at com.intellij.psi.impl.source.resolve.ResolveCache.a(ResolveCache.java:139)
    at com.intellij.psi.impl.source.resolve.ResolveCache.resolveWithCaching(ResolveCache.java:167)
    at com.intellij.psi.impl.source.resolve.ResolveCache.resolveWithCaching(ResolveCache.java:159)
    at com.jetbrains.php.lang.psi.elements.impl.PhpReferenceImpl.multiResolve(PhpReferenceImpl.java:136)
    at com.jetbrains.php.lang.psi.elements.impl.PhpReferenceImpl.resolve(PhpReferenceImpl.java:122)
    at com.jetbrains.php.lang.annotator.PhpAnnotatorVisitor.checkAccessModifiers(PhpAnnotatorVisitor.java:406)
    at com.jetbrains.php.lang.annotator.PhpAnnotatorVisitor.visitPhpMethodReference(PhpAnnotatorVisitor.java:388)
    at com.jetbrains.php.lang.psi.elements.impl.MethodReferenceImpl.accept(MethodReferenceImpl.java:29)
    at com.jetbrains.php.lang.annotator.PhpAnnotator.annotate(PhpAnnotator.java:19)
    at com.intellij.codeInsight.daemon.impl.DefaultHighlightVisitor.a(DefaultHighlightVisitor.java:162)
    at com.intellij.codeInsight.daemon.impl.DefaultHighlightVisitor.visit(DefaultHighlightVisitor.java:103)
    at com.intellij.codeInsight.daemon.impl.GeneralHighlightingPass.a(GeneralHighlightingPass.java:354)
    at com.intellij.codeInsight.daemon.impl.GeneralHighlightingPass.access$100(GeneralHighlightingPass.java:65)
    at com.intellij.codeInsight.daemon.impl.GeneralHighlightingPass$3.run(GeneralHighlightingPass.java:283)
    at com.intellij.codeInsight.daemon.impl.GeneralHighlightingPass.a(GeneralHighlightingPass.java:308)
    at com.intellij.codeInsight.daemon.impl.GeneralHighlightingPass.access$200(GeneralHighlightingPass.java:65)
    at com.intellij.codeInsight.daemon.impl.GeneralHighlightingPass$4.run(GeneralHighlightingPass.java:314)
    at com.intellij.codeInsight.daemon.impl.analysis.XmlHighlightVisitor.analyze(XmlHighlightVisitor.java:750)
    at com.intellij.codeInsight.daemon.impl.GeneralHighlightingPass.a(GeneralHighlightingPass.java:311)
    at com.intellij.codeInsight.daemon.impl.GeneralHighlightingPass.access$200(GeneralHighlightingPass.java:65)
    at com.intellij.codeInsight.daemon.impl.GeneralHighlightingPass$4.run(GeneralHighlightingPass.java:314)
    at com.intellij.codeInsight.daemon.impl.DefaultHighlightVisitor.analyze(DefaultHighlightVisitor.java:87)
    at com.intellij.codeInsight.daemon.impl.GeneralHighlightingPass.a(GeneralHighlightingPass.java:311)
    at com.intellij.codeInsight.daemon.impl.GeneralHighlightingPass.a(GeneralHighlightingPass.java:280)
    at com.intellij.codeInsight.daemon.impl.GeneralHighlightingPass.collectInformationWithProgress(GeneralHighlightingPass.java:219)
    at com.intellij.codeInsight.daemon.impl.ProgressableTextEditorHighlightingPass.doCollectInformation(ProgressableTextEditorHighlightingPass.java:82)
    at com.intellij.codeHighlighting.TextEditorHighlightingPass.collectInformation(TextEditorHighlightingPass.java:67)
    at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass$1$1.run(PassExecutorService.java:444)
    at com.intellij.openapi.application.impl.ApplicationImpl.tryRunReadAction(ApplicationImpl.java:1177)
    at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass$1.run(PassExecutorService.java:435)
    at com.intellij.openapi.progress.impl.CoreProgressManager.a(CoreProgressManager.java:446)
    at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:392)
    at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:54)
    at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass.a(PassExecutorService.java:432)
    at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass.run(PassExecutorService.java:408)
    at com.intellij.concurrency.JobLauncherImpl$VoidForkJoinTask$1.exec(JobLauncherImpl.java:206)
    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:108)



java.lang.NullPointerException
    at de.espend.idea.php.toolbox.matcher.php.container.ContainerConditions$TypeSignatureCondition.value(ContainerConditions.java:45)
    at de.espend.idea.php.toolbox.matcher.php.container.ContainerConditions$TypeSignatureCondition.value(ContainerConditions.java:36)
    at com.intellij.util.containers.ContainerUtil.find(ContainerUtil.java:883)
    at com.intellij.util.containers.ContainerUtil.find(ContainerUtil.java:854)
    at de.espend.idea.php.toolbox.utils.ExtensionProviderUtil.getTypesInner(ExtensionProviderUtil.java:196)
    at de.espend.idea.php.toolbox.utils.ExtensionProviderUtil.access$100(ExtensionProviderUtil.java:39)
    at de.espend.idea.php.toolbox.utils.ExtensionProviderUtil$4.compute(ExtensionProviderUtil.java:175)
    at com.intellij.psi.impl.PsiCachedValueImpl.doCompute(PsiCachedValueImpl.java:49)
    at com.intellij.util.CachedValueBase.getValueWithLock(CachedValueBase.java:222)
    at com.intellij.psi.impl.PsiCachedValue.getValueWithLock(PsiCachedValue.java:66)
    at com.intellij.psi.impl.PsiCachedValueImpl.getValue(PsiCachedValueImpl.java:38)
    at de.espend.idea.php.toolbox.utils.ExtensionProviderUtil.getTypes(ExtensionProviderUtil.java:182)
    at de.espend.idea.php.toolbox.type.PhpToolboxTypeProvider.getType(PhpToolboxTypeProvider.java:50)
    at com.jetbrains.php.lang.psi.resolve.types.PhpTypeInfo$1.internalCompute(PhpTypeInfo.java:43)
    at com.jetbrains.php.lang.psi.resolve.types.PhpTypeInfo$1.internalCompute(PhpTypeInfo.java:37)
    at com.intellij.openapi.util.Computable$NotNullCachedComputable.compute(Computable.java:52)
    at com.intellij.openapi.util.RecursionManager$2.doPreventingRecursion(RecursionManager.java:112)
    at com.intellij.openapi.util.RecursionManager.doPreventingRecursion(RecursionManager.java:68)
    at com.jetbrains.php.lang.psi.resolve.types.PhpTypeInfo.getType(PhpTypeInfo.java:37)
    at com.jetbrains.php.lang.psi.elements.impl.PhpReferenceImpl.getType(PhpReferenceImpl.java:207)
    at com.jetbrains.php.lang.psi.elements.impl.MemberReferenceImpl.resolveGlobal(MemberReferenceImpl.java:142)
    at com.jetbrains.php.lang.psi.elements.impl.PhpReferenceImpl$1.resolve(PhpReferenceImpl.java:144)
    at com.jetbrains.php.lang.psi.elements.impl.PhpReferenceImpl$1.resolve(PhpReferenceImpl.java:141)
    at com.intellij.psi.impl.source.resolve.ResolveCache$3.compute(ResolveCache.java:142)
    at com.intellij.openapi.util.RecursionManager$2.doPreventingRecursion(RecursionManager.java:112)
    at com.intellij.psi.impl.source.resolve.ResolveCache.a(ResolveCache.java:139)
    at com.intellij.psi.impl.source.resolve.ResolveCache.resolveWithCaching(ResolveCache.java:167)
    at com.intellij.psi.impl.source.resolve.ResolveCache.resolveWithCaching(ResolveCache.java:159)
    at com.jetbrains.php.lang.psi.elements.impl.PhpReferenceImpl.multiResolve(PhpReferenceImpl.java:136)
    at com.jetbrains.php.lang.psi.elements.impl.PhpReferenceImpl.resolve(PhpReferenceImpl.java:122)
    at com.jetbrains.php.lang.annotator.PhpAnnotatorVisitor.checkAccessModifiers(PhpAnnotatorVisitor.java:406)
    at com.jetbrains.php.lang.annotator.PhpAnnotatorVisitor.visitPhpMethodReference(PhpAnnotatorVisitor.java:388)
    at com.jetbrains.php.lang.psi.elements.impl.MethodReferenceImpl.accept(MethodReferenceImpl.java:29)
    at com.jetbrains.php.lang.annotator.PhpAnnotator.annotate(PhpAnnotator.java:19)
    at com.intellij.codeInsight.daemon.impl.DefaultHighlightVisitor.a(DefaultHighlightVisitor.java:162)
    at com.intellij.codeInsight.daemon.impl.DefaultHighlightVisitor.visit(DefaultHighlightVisitor.java:103)
    at com.intellij.codeInsight.daemon.impl.GeneralHighlightingPass.a(GeneralHighlightingPass.java:354)
    at com.intellij.codeInsight.daemon.impl.GeneralHighlightingPass.access$100(GeneralHighlightingPass.java:65)
    at com.intellij.codeInsight.daemon.impl.GeneralHighlightingPass$3.run(GeneralHighlightingPass.java:288)
    at com.intellij.codeInsight.daemon.impl.GeneralHighlightingPass.a(GeneralHighlightingPass.java:308)
    at com.intellij.codeInsight.daemon.impl.GeneralHighlightingPass.access$200(GeneralHighlightingPass.java:65)
    at com.intellij.codeInsight.daemon.impl.GeneralHighlightingPass$4.run(GeneralHighlightingPass.java:314)
    at com.intellij.codeInsight.daemon.impl.analysis.XmlHighlightVisitor.analyze(XmlHighlightVisitor.java:750)
    at com.intellij.codeInsight.daemon.impl.GeneralHighlightingPass.a(GeneralHighlightingPass.java:311)
    at com.intellij.codeInsight.daemon.impl.GeneralHighlightingPass.access$200(GeneralHighlightingPass.java:65)
    at com.intellij.codeInsight.daemon.impl.GeneralHighlightingPass$4.run(GeneralHighlightingPass.java:314)
    at com.intellij.codeInsight.daemon.impl.DefaultHighlightVisitor.analyze(DefaultHighlightVisitor.java:87)
    at com.intellij.codeInsight.daemon.impl.GeneralHighlightingPass.a(GeneralHighlightingPass.java:311)
    at com.intellij.codeInsight.daemon.impl.GeneralHighlightingPass.a(GeneralHighlightingPass.java:280)
    at com.intellij.codeInsight.daemon.impl.GeneralHighlightingPass.collectInformationWithProgress(GeneralHighlightingPass.java:219)
    at com.intellij.codeInsight.daemon.impl.ProgressableTextEditorHighlightingPass.doCollectInformation(ProgressableTextEditorHighlightingPass.java:82)
    at com.intellij.codeHighlighting.TextEditorHighlightingPass.collectInformation(TextEditorHighlightingPass.java:67)
    at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass$1$1.run(PassExecutorService.java:444)
    at com.intellij.openapi.application.impl.ApplicationImpl.tryRunReadAction(ApplicationImpl.java:1177)
    at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass$1.run(PassExecutorService.java:435)
    at com.intellij.openapi.progress.impl.CoreProgressManager.a(CoreProgressManager.java:446)
    at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:392)
    at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:54)
    at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass.a(PassExecutorService.java:432)
    at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass.run(PassExecutorService.java:408)
    at com.intellij.concurrency.JobLauncherImpl$VoidForkJoinTask$1.exec(JobLauncherImpl.java:206)
    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:108)



java.lang.NullPointerException
    at de.espend.idea.php.toolbox.matcher.php.container.ContainerConditions$TypeSignatureCondition.value(ContainerConditions.java:45)
    at de.espend.idea.php.toolbox.matcher.php.container.ContainerConditions$TypeSignatureCondition.value(ContainerConditions.java:36)
    at com.intellij.util.containers.ContainerUtil.find(ContainerUtil.java:883)
    at com.intellij.util.containers.ContainerUtil.find(ContainerUtil.java:854)
    at de.espend.idea.php.toolbox.utils.ExtensionProviderUtil.getTypesInner(ExtensionProviderUtil.java:196)
    at de.espend.idea.php.toolbox.utils.ExtensionProviderUtil.access$100(ExtensionProviderUtil.java:39)
    at de.espend.idea.php.toolbox.utils.ExtensionProviderUtil$4.compute(ExtensionProviderUtil.java:175)
    at com.intellij.psi.impl.PsiCachedValueImpl.doCompute(PsiCachedValueImpl.java:49)
    at com.intellij.util.CachedValueBase.getValueWithLock(CachedValueBase.java:222)
    at com.intellij.psi.impl.PsiCachedValue.getValueWithLock(PsiCachedValue.java:66)
    at com.intellij.psi.impl.PsiCachedValueImpl.getValue(PsiCachedValueImpl.java:38)
    at de.espend.idea.php.toolbox.utils.ExtensionProviderUtil.getTypes(ExtensionProviderUtil.java:182)
    at de.espend.idea.php.toolbox.type.PhpToolboxTypeProvider.getType(PhpToolboxTypeProvider.java:50)
    at com.jetbrains.php.lang.psi.resolve.types.PhpTypeInfo$1.internalCompute(PhpTypeInfo.java:43)
    at com.jetbrains.php.lang.psi.resolve.types.PhpTypeInfo$1.internalCompute(PhpTypeInfo.java:37)
    at com.intellij.openapi.util.Computable$NotNullCachedComputable.compute(Computable.java:52)
    at com.intellij.openapi.util.RecursionManager$2.doPreventingRecursion(RecursionManager.java:112)
    at com.intellij.openapi.util.RecursionManager.doPreventingRecursion(RecursionManager.java:68)
    at com.jetbrains.php.lang.psi.resolve.types.PhpTypeInfo.getType(PhpTypeInfo.java:37)
    at com.jetbrains.php.lang.psi.elements.impl.PhpReferenceImpl.getType(PhpReferenceImpl.java:207)
    at com.jetbrains.php.lang.psi.elements.impl.MemberReferenceImpl.resolveGlobal(MemberReferenceImpl.java:142)
    at com.jetbrains.php.lang.psi.elements.impl.PhpReferenceImpl$1.resolve(PhpReferenceImpl.java:144)
    at com.jetbrains.php.lang.psi.elements.impl.PhpReferenceImpl$1.resolve(PhpReferenceImpl.java:141)
    at com.intellij.psi.impl.source.resolve.ResolveCache$3.compute(ResolveCache.java:142)
    at com.intellij.openapi.util.RecursionManager$2.doPreventingRecursion(RecursionManager.java:112)
    at com.intellij.psi.impl.source.resolve.ResolveCache.a(ResolveCache.java:139)
    at com.intellij.psi.impl.source.resolve.ResolveCache.resolveWithCaching(ResolveCache.java:167)
    at com.intellij.psi.impl.source.resolve.ResolveCache.resolveWithCaching(ResolveCache.java:159)
    at com.jetbrains.php.lang.psi.elements.impl.PhpReferenceImpl.multiResolve(PhpReferenceImpl.java:136)
    at com.jetbrains.php.lang.psi.elements.impl.PhpReferenceImpl.resolve(PhpReferenceImpl.java:122)
    at com.kalessil.phpStorm.phpInspectionsEA.inspectors.codeSmell.CallableReferenceNameMismatchInspector$1.inspectCaseIdentity(CallableReferenceNameMismatchInspector.java:42)
    at com.kalessil.phpStorm.phpInspectionsEA.inspectors.codeSmell.CallableReferenceNameMismatchInspector$1.visitPhpMethodReference(CallableReferenceNameMismatchInspector.java:32)
    at com.jetbrains.php.lang.psi.elements.impl.MethodReferenceImpl.accept(MethodReferenceImpl.java:29)
    at com.intellij.codeInspection.InspectionEngine.acceptElements(InspectionEngine.java:81)
    at com.intellij.codeInspection.InspectionEngine.createVisitorAndAcceptElements(InspectionEngine.java:69)
    at com.intellij.codeInsight.daemon.impl.LocalInspectionsPass.a(LocalInspectionsPass.java:294)
    at com.intellij.codeInsight.daemon.impl.LocalInspectionsPass.access$200(LocalInspectionsPass.java:73)
    at com.intellij.codeInsight.daemon.impl.LocalInspectionsPass$2.process(LocalInspectionsPass.java:261)
    at com.intellij.codeInsight.daemon.impl.LocalInspectionsPass$2.process(LocalInspectionsPass.java:256)
    at com.intellij.concurrency.ApplierCompleter.c(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:1177)
    at com.intellij.concurrency.ApplierCompleter$2.run(ApplierCompleter.java:94)
    at com.intellij.openapi.progress.impl.CoreProgressManager.a(CoreProgressManager.java:446)
    at com.intellij.openapi.progress.impl.CoreProgressManager.a(CoreProgressManager.java:443)
    at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:392)
    at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:54)
    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:108)

allow index for signatures type "type"

{
    "registrar": [{
        "language": "php",
        "signatures": [{
            "class": "Mockery",
            "method": "namedMock",
            "type": "type",
            "index": 1
        }]
    }]
}

It looks like the index is ignored, example:

$m = \Mockery::namedMock('stack', 'SplStack');
$m->add(/* .. */); // does not autocomplete

PhpDoc hashes don't work for constructor parameters

It looks like, the hashes "registration" doesn't work for constructor parameters:

Class Car
{
   /**
    * @param string $foo my Var #Class
    * @param string $bar my car #<ProviderName> foo bar
    */
   public function __construct($foo, $bar) {}
}

$bla = new Car('<CARET>');

How to access Symfony Plugin source provider?

I got the Toolbox and the Symfony plugin installed.

{
    "registrar": [{
        "language": "php",
        "provider": "template",
        "signature": [
            "Application\\Bundle\\AppBundle\\View\\RenderResult::__construct"
        ]
    }]
}

I want to make use of the Twig template naming provider, within the Symfony plugin it's called template however it's not working when used on a __construct, thought I could make it work this way around.

Provide access to data which collected from providers

I need get all classes implements WidgetInterface, process this list (call method getName, for example) and generate json for new provider. Currently I should process all classes recursively by hand and check if class implements interface. It is better access data from native provider sub_classes. Can you generate json files with collected data?

Add argument provider

My use case:

\cs\Event::instance()->on('<caret>');
\cs\Event::instance()->once('<caret>');
\cs\Event::instance()->off('<caret>');

are all dependent on $event argument used in following call:

\cs\Event::instance()->fire($event, ...);

So basically I need to find all ->fire() calls with events names and be able to use them for autocompletion in ->on(), ->once() and ->off() calls.

I imagine this something like:

{
    "name"   : "events",
    "source" : {
        "contributor" : "argument",
        "parameter"   : "cs\\Event::fire",
        "index"       : 0
    }
}

which means that argument with index 0 of method cs\\Event::fire.

Doc link doesn't work

Dear Daniel,

the link that you provided on the home page of github about document doesn't work. Also, could you please provide a sample guide to use this plugin in PhpStorm? It doesn't matter German or English, we can translate.

Specify provider for array key => value

This is one neat plugin, but it would be amazing if I could specify a provider for array value, is this possible? The documentation is hard to understand which part goes where.

"providers": [
        {
            "name": "array_key_value",
            "items": [
                {
                    "lookup_string": "date",
                    // I want to show specific values for ['date' => '<caret>']
                }
            ]
        }
    ]

Support getMockForAbstractClass()

Hi, thank you for the plugin!

I noticed that while getMock() works in PHPUnit (the return type is correctly "enhanced"), it doesn't do the same for getMockForAbstractClass().

Add class generator for json and xml files

Generate classes out of json data, xml files or comma fields.

  • key-value with type detection
  • key only
  • comma
  • "createdAt" and other common var names should auto add doc types and parameter hints

Add quick doc support

Some strings are too long and was stripped on autocompletion:

"lookup_string": "notification",
"type_text": "A callable to be called when an event occurs on a stream.",

For this cases better add support of the quck doc by ctrl+q with full description.

Add directory provider

My use case if following:

\cs\Config::instance()->module('<caret>')

I want to autocomplete there names of directories, which are all located in components/modules directory (from the root of the project, but paths relative to .ide-toolbox.metadata.json file and/or just filtering any in-project path by mask components/modules might be fine too).

Improve signature shortcuts

Currently there are two properties: signatures and signature. Why create two separate properties? Better use only one:

"signatures": [
    {
        "class": "Symfony\\Component\\HttpFoundation\\Response",
        "method": "__construct",
        "type": "array_key",
        "index": 2
    },
    "Symfony\\Component\\HttpFoundation\\HeaderBag:set"
]

Resolve release blocker

some unordered todo list based on https://github.com/Haehnchen/idea-php-symfony2-plugin/milestones/Plugin%20Cleanup :

nice2have:

Add more autocomplete for json files

  1. signature does not autocopletes class and method names, ctrl+click also doesn't work here
  2. provider does not autocomplete providers created by me. Only core providers are present in list it doesn't work because of missconfigured

Provide class/class constant completion

  1. For some cases better add constant completion instead of plain strings (in this case we should import class maybe before completion):
  2. Starting from php 5.5 we could use ::class magic constant and better use this reference in some cases like behat context classes or form types. But maybe it should be configurable

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.