<?xml version="1.0" encoding="UTF-8"?>
<files psalm-version="4.6.4@97fe86c4e158b5a57c5150aa5055c38b5a809aab">
  <file src="src/Collection.php">
    <DocblockTypeContradiction occurrences="1">
      <code>is_array($items)</code>
    </DocblockTypeContradiction>
    <MissingClosureParamType occurrences="9">
      <code>$filtered</code>
      <code>$filtered</code>
      <code>$item</code>
      <code>$item</code>
      <code>$item</code>
      <code>$key</code>
      <code>$key</code>
      <code>$key</code>
      <code>$results</code>
    </MissingClosureParamType>
    <MixedArrayAssignment occurrences="3">
      <code>$filtered[$key]</code>
      <code>$filtered[$key]</code>
      <code>$results[$key]</code>
    </MixedArrayAssignment>
    <MixedArrayOffset occurrences="3">
      <code>$filtered[$key]</code>
      <code>$filtered[$key]</code>
      <code>$results[$key]</code>
    </MixedArrayOffset>
    <MixedAssignment occurrences="7">
      <code>$accumulator</code>
      <code>$accumulator</code>
      <code>$filtered[$key]</code>
      <code>$filtered[$key]</code>
      <code>$item</code>
      <code>$item</code>
      <code>$results[$key]</code>
    </MixedAssignment>
    <MixedInferredReturnType occurrences="3">
      <code>static</code>
      <code>static</code>
      <code>static</code>
    </MixedInferredReturnType>
    <MixedReturnStatement occurrences="3"/>
    <UnsafeInstantiation occurrences="5">
      <code>new static($items)</code>
      <code>new static([])</code>
      <code>new static([])</code>
      <code>new static([])</code>
      <code>new static(array_unique($this-&gt;items))</code>
    </UnsafeInstantiation>
  </file>
  <file src="src/ComponentInstaller.php">
    <InvalidScalarArgument occurrences="1">
      <code>$default</code>
    </InvalidScalarArgument>
    <LessSpecificReturnStatement occurrences="1">
      <code>$dependencies-&gt;getArrayCopy()</code>
    </LessSpecificReturnStatement>
    <MissingClosureParamType occurrences="24">
      <code>$allowed</code>
      <code>$ask</code>
      <code>$configKey</code>
      <code>$configKey</code>
      <code>$configOption</code>
      <code>$index</code>
      <code>$injector</code>
      <code>$key</code>
      <code>$module</code>
      <code>$module</code>
      <code>$modules</code>
      <code>$option</code>
      <code>$option</code>
      <code>$option</code>
      <code>$packages</code>
      <code>$packages</code>
      <code>$registered</code>
      <code>$registered</code>
      <code>$type</code>
      <code>$type</code>
      <code>$type</code>
      <code>$type</code>
      <code>$valid</code>
      <code>$value</code>
    </MissingClosureParamType>
    <MissingClosureReturnType occurrences="5">
      <code>function ($allowed, $option) {</code>
      <code>function ($configOption) {</code>
      <code>function ($injector) use ($packageTypes) {</code>
      <code>function ($module) use ($options) {</code>
      <code>function ($modules, $configKey, $type) use ($extra, $supportedTypes) {</code>
    </MissingClosureReturnType>
    <MixedArgument occurrences="12">
      <code>$ask</code>
      <code>$ask</code>
      <code>$configKey</code>
      <code>$index</code>
      <code>$injector</code>
      <code>$item</code>
      <code>$module</code>
      <code>$option-&gt;getPromptText()</code>
      <code>$packageType</code>
      <code>$packageTypes[$module]</code>
      <code>$supportedTypes</code>
      <code>$value</code>
    </MixedArgument>
    <MixedArgumentTypeCoercion occurrences="1">
      <code>$extra</code>
    </MixedArgumentTypeCoercion>
    <MixedArrayAssignment occurrences="2">
      <code>$ask[]</code>
      <code>$ask[]</code>
    </MixedArrayAssignment>
    <MixedArrayOffset occurrences="1">
      <code>$extra[$configKey]</code>
    </MixedArrayOffset>
    <MixedAssignment occurrences="4">
      <code>$ask</code>
      <code>$injector</code>
      <code>$packageType</code>
      <code>$supportedTypes</code>
    </MixedAssignment>
    <MixedInferredReturnType occurrences="4">
      <code>Collection</code>
      <code>Collection</code>
      <code>InjectorInterface</code>
      <code>bool</code>
    </MixedInferredReturnType>
    <MixedMethodCall occurrences="16">
      <code>getInjector</code>
      <code>getInjector</code>
      <code>getInjector</code>
      <code>getInjector</code>
      <code>getInjector</code>
      <code>getInjector</code>
      <code>getInjector</code>
      <code>getPromptText</code>
      <code>getTypesAllowed</code>
      <code>isRegistered</code>
      <code>merge</code>
      <code>merge</code>
      <code>registersType</code>
      <code>toArray</code>
      <code>unique</code>
      <code>unique</code>
    </MixedMethodCall>
    <MixedReturnStatement occurrences="5">
      <code>$options[1]-&gt;getInjector()</code>
      <code>isset($options[2]) ? $options[2]-&gt;getInjector() : $options[1]-&gt;getInjector()</code>
    </MixedReturnStatement>
    <MoreSpecificReturnType occurrences="1">
      <code>array&lt;non-empty-string,list&lt;non-empty-string&gt;&gt;</code>
    </MoreSpecificReturnType>
    <PossiblyNullArgument occurrences="1">
      <code>$this-&gt;io-&gt;ask(implode($ask), 'y')</code>
    </PossiblyNullArgument>
    <PropertyNotSetInConstructor occurrences="4">
      <code>$composer</code>
      <code>$io</code>
      <code>$packageProviderFactory</code>
      <code>$projectRoot</code>
    </PropertyNotSetInConstructor>
    <RedundantConditionGivenDocblockType occurrences="3">
      <code>is_string($module)</code>
      <code>is_string($projectRoot)</code>
      <code>is_string($this-&gt;projectRoot)</code>
    </RedundantConditionGivenDocblockType>
  </file>
  <file src="src/ConfigDiscovery.php">
    <InvalidArgument occurrences="1">
      <code>$injectorClass</code>
    </InvalidArgument>
    <MissingClosureParamType occurrences="9">
      <code>$discovery</code>
      <code>$discovery</code>
      <code>$discoveryClass</code>
      <code>$file</code>
      <code>$file</code>
      <code>$flag</code>
      <code>$injector</code>
      <code>$injector</code>
      <code>$type</code>
    </MissingClosureParamType>
    <MissingClosureReturnType occurrences="2">
      <code>function ($discovery) {</code>
      <code>function ($injector) use ($availableTypes) {</code>
    </MissingClosureReturnType>
    <MixedArgument occurrences="2">
      <code>$file</code>
      <code>$injector</code>
    </MixedArgument>
    <MixedArrayOffset occurrences="1">
      <code>$this-&gt;injectors[$file]</code>
    </MixedArrayOffset>
    <MixedMethodCall occurrences="3">
      <code>locate</code>
      <code>new $discoveryClass($projectRoot)</code>
      <code>registersType</code>
    </MixedMethodCall>
  </file>
  <file src="src/ConfigDiscovery/AbstractDiscovery.php">
    <PossiblyNullArgument occurrences="1">
      <code>$this-&gt;configFile</code>
    </PossiblyNullArgument>
    <PropertyNotSetInConstructor occurrences="2">
      <code>$configFile</code>
      <code>$expected</code>
    </PropertyNotSetInConstructor>
    <UninitializedProperty occurrences="1">
      <code>$this-&gt;configFile</code>
    </UninitializedProperty>
  </file>
  <file src="src/ConfigDiscovery/DiscoveryChain.php">
    <MissingClosureParamType occurrences="2">
      <code>$discovery</code>
      <code>$discoveryClass</code>
    </MissingClosureParamType>
    <MissingClosureReturnType occurrences="1">
      <code>function ($discovery) {</code>
    </MissingClosureReturnType>
    <MixedMethodCall occurrences="2">
      <code>locate</code>
      <code>new $discoveryClass($projectDirectory)</code>
    </MixedMethodCall>
  </file>
  <file src="src/Injector/AbstractInjector.php">
    <MixedArgument occurrences="3">
      <code>$dependency</code>
      <code>$module</code>
      <code>$module</code>
    </MixedArgument>
    <MixedAssignment occurrences="4">
      <code>$dependency</code>
      <code>$first</code>
      <code>$last</code>
      <code>$module</code>
    </MixedAssignment>
    <MixedInferredReturnType occurrences="2">
      <code>string</code>
      <code>string|null</code>
    </MixedInferredReturnType>
    <MixedReturnStatement occurrences="3">
      <code>$first</code>
      <code>$last</code>
      <code>reset($dependencies)</code>
    </MixedReturnStatement>
    <NullableReturnStatement occurrences="1">
      <code>$last</code>
    </NullableReturnStatement>
  </file>
  <file src="src/Injector/ConditionalDiscoveryTrait.php">
    <InvalidStringClass occurrences="1">
      <code>new $discoveryClass($this-&gt;getProjectRoot())</code>
    </InvalidStringClass>
    <MixedInferredReturnType occurrences="1">
      <code>bool</code>
    </MixedInferredReturnType>
    <MixedMethodCall occurrences="1">
      <code>locate</code>
    </MixedMethodCall>
    <MixedOperand occurrences="1">
      <code>static::DEFAULT_CONFIG_FILE</code>
    </MixedOperand>
  </file>
  <file src="src/Injector/ConfigAggregatorInjector.php">
    <MissingParamType occurrences="1">
      <code>$projectRoot</code>
    </MissingParamType>
    <MixedArgument occurrences="1">
      <code>$projectRoot</code>
    </MixedArgument>
  </file>
  <file src="src/Injector/ConfigInjectorChain.php">
    <MissingClosureParamType occurrences="8">
      <code>$file</code>
      <code>$flag</code>
      <code>$injector</code>
      <code>$injector</code>
      <code>$injector</code>
      <code>$injector</code>
      <code>$injector</code>
      <code>$type</code>
    </MissingClosureParamType>
    <MissingClosureReturnType occurrences="1">
      <code>function ($injector) use ($availableTypes) {</code>
    </MissingClosureReturnType>
    <MixedArgument occurrences="1">
      <code>$file</code>
    </MixedArgument>
    <MixedAssignment occurrences="1">
      <code>$injector</code>
    </MixedAssignment>
    <MixedInferredReturnType occurrences="2">
      <code>inject</code>
      <code>remove</code>
    </MixedInferredReturnType>
    <MixedMethodCall occurrences="5">
      <code>getTypesAllowed</code>
      <code>inject</code>
      <code>new $injector($projectRoot)</code>
      <code>registersType</code>
      <code>remove</code>
    </MixedMethodCall>
    <MixedOperand occurrences="1">
      <code>$injector-&gt;getTypesAllowed()</code>
    </MixedOperand>
    <MixedReturnStatement occurrences="2">
      <code>$injected</code>
      <code>$removed</code>
    </MixedReturnStatement>
  </file>
  <file src="src/Injector/MezzioConfigInjector.php">
    <MissingParamType occurrences="1">
      <code>$projectRoot</code>
    </MissingParamType>
    <MixedArgument occurrences="1">
      <code>$projectRoot</code>
    </MixedArgument>
  </file>
  <file src="src/PackageProvider/ComposerV2.php">
    <InvalidPropertyAssignmentValue occurrences="1">
      <code>$installedRepository</code>
    </InvalidPropertyAssignmentValue>
    <MixedInferredReturnType occurrences="1">
      <code>array</code>
    </MixedInferredReturnType>
    <MixedReturnStatement occurrences="1">
      <code>$this-&gt;installedRepository-&gt;findPackagesWithReplacersAndProviders($packageName)</code>
    </MixedReturnStatement>
    <UndefinedInterfaceMethod occurrences="1">
      <code>findPackagesWithReplacersAndProviders</code>
    </UndefinedInterfaceMethod>
  </file>
  <file src="src/PackageProvider/PackageProviderDetectionFactory.php">
    <MixedArgument occurrences="2">
      <code>$event-&gt;getPool()</code>
      <code>$platformOverrides</code>
    </MixedArgument>
    <MixedAssignment occurrences="1">
      <code>$platformOverrides</code>
    </MixedAssignment>
    <UndefinedMethod occurrences="1">
      <code>getPool</code>
    </UndefinedMethod>
  </file>
  <file src="test/ComponentInstallerTest.php">
    <MissingParamType occurrences="1">
      <code>$argument</code>
    </MissingParamType>
    <MixedArgument occurrences="2">
      <code>$configName</code>
      <code>$pathToModule</code>
    </MixedArgument>
    <MixedAssignment occurrences="4">
      <code>$config</code>
      <code>$configName</code>
      <code>$dependencies</code>
      <code>$dependencies</code>
    </MixedAssignment>
    <MixedInferredReturnType occurrences="1">
      <code>array</code>
    </MixedInferredReturnType>
    <PossiblyUndefinedVariable occurrences="2">
      <code>$autoload</code>
      <code>$pathToModule</code>
    </PossiblyUndefinedVariable>
  </file>
  <file src="test/ConfigDiscoveryTest.php">
    <InternalClass occurrences="6">
      <code>new ExpectationFailedException('Options array does not contain a NoopInjector!')</code>
      <code>new ExpectationFailedException('Options array is empty; no NoopInjector found!')</code>
    </InternalClass>
    <InvalidPropertyAssignmentValue occurrences="1">
      <code>new ConfigDiscovery()</code>
    </InvalidPropertyAssignmentValue>
    <MixedArgument occurrences="4">
      <code>$options</code>
      <code>$options</code>
      <code>$options</code>
      <code>$options</code>
    </MixedArgument>
    <MixedAssignment occurrences="2">
      <code>$options</code>
      <code>$options</code>
    </MixedAssignment>
    <MixedMethodCall occurrences="1">
      <code>getInjector</code>
    </MixedMethodCall>
    <UndefinedDocblockClass occurrences="5">
      <code>$this-&gt;discovery</code>
      <code>$this-&gt;discovery</code>
      <code>$this-&gt;discovery</code>
      <code>$this-&gt;discovery</code>
      <code>ConfigDiscovery\</code>
    </UndefinedDocblockClass>
  </file>
  <file src="test/Injector/AbstractInjectorTestCase.php">
    <InvalidStringClass occurrences="1"/>
    <PropertyTypeCoercion occurrences="1"/>
  </file>
</files>
