Explorar o código

Don't show Ambiguous class resolution warning if class when not ambiguous
if a class or interface is defined twice in the same class, this should not produce a warning

Daniel Karp %!s(int64=11) %!d(string=hai) anos
pai
achega
e3be04c443

+ 1 - 1
src/Composer/Autoload/ClassMapGenerator.php

@@ -84,7 +84,7 @@ class ClassMapGenerator
             foreach ($classes as $class) {
                 if (!isset($map[$class])) {
                     $map[$class] = $filePath;
-                } elseif ($io) {
+                } elseif ($io && $map[$class] !== $filePath) {
                     $io->write(
                         '<warning>Warning: Ambiguous class resolution, "'.$class.'"'.
                         ' was found in both "'.$map[$class].'" and "'.$filePath.'", the first will be used.</warning>'

+ 21 - 0
tests/Composer/Test/Autoload/ClassMapGeneratorTest.php

@@ -133,6 +133,27 @@ class ClassMapGeneratorTest extends \PHPUnit_Framework_TestCase
         $this->assertTrue(in_array($msg, $messages, true), $msg.' not found in expected messages ('.var_export($messages, true).')');
     }
 
+    /**
+     * If one file has a class or interface defined more than once,
+     * an ambiguous reference warning should not be produced
+     */
+    public function testUnambiguousReference()
+    {
+        $this->checkIfFinderIsAvailable();
+
+        $finder = new Finder();
+        $finder->files()->in(__DIR__ . '/Fixtures/Unambiguous');
+
+        $io = $this->getMockBuilder('Composer\IO\ConsoleIO')
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        $io->expects($this->never())
+            ->method('write');
+
+        ClassMapGenerator::createMap($finder, null, $io);
+    }
+
     /**
      * @expectedException \RuntimeException
      * @expectedExceptionMessage Could not scan for classes inside

+ 6 - 0
tests/Composer/Test/Autoload/Fixtures/Unambiguous/A.php

@@ -0,0 +1,6 @@
+<?php
+if (PHP_VERSION_ID < 50400) {
+    interface A extends Iterator, ArrayAccess { }
+} else {
+    interface A extends Iterator, ArrayAccess, JsonSerializable { }
+}