Completed
Push — refactor-04-parser-tests ( dc4950...bd4663 )
by John
06:06
created

FieldParserFactory   A

Complexity

Total Complexity 8

Size/Duplication

Total Lines 42
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 1

Test Coverage

Coverage 91.67%

Importance

Changes 0
Metric Value
wmc 8
lcom 0
cbo 1
dl 0
loc 42
ccs 22
cts 24
cp 0.9167
rs 10
c 0
b 0
f 0

1 Method

Rating   Name   Duplication   Size   Complexity  
C getFieldParser() 0 35 8
1
<?php
2
3
namespace Graze\CiffRenderer\Parser\FieldParser;
4
5
use Graze\CiffRenderer\Parser\SimpleXmlElement\SimpleXmlElementInterface;
6
use Graze\CiffRenderer\Parser\FieldType;
7
use Graze\CiffRenderer\Parser\FieldParser\FieldParserFixedText;
8
use Graze\CiffRenderer\Parser\FieldParser\FieldParserBarcode;
9
use Graze\CiffRenderer\Parser\FieldParser\FieldParserDate;
10
use Graze\CiffRenderer\Parser\FieldParser\FieldParserDateOffset;
11
use Graze\CiffRenderer\Parser\FieldParser\FieldParserStaticGraphic;
12
use Graze\CiffRenderer\Parser\FieldParser\FieldParserGraphicPrimitive;
13
use Graze\CiffRenderer\Exception\UnsupportedFieldTypeException;
14
15
class FieldParserFactory
16
{
17
    /**
18
     * @param SimpleXmlElementInterface $xml
19
     * @return FieldParserInterface
20
     */
21 7
    public function getFieldParser(SimpleXmlElementInterface $xml)
22
    {
23 7
        switch ((string) $xml->FldType) { // @codingStandardsIgnoreLine
0 ignored issues
show
Bug introduced by
Accessing FldType on the interface Graze\CiffRenderer\Parse...mpleXmlElementInterface suggest that you code against a concrete implementation. How about adding an instanceof check?

If you access a property on an interface, you most likely code against a concrete implementation of the interface.

Available Fixes

  1. Adding an additional type check:

    interface SomeInterface { }
    class SomeClass implements SomeInterface {
        public $a;
    }
    
    function someFunction(SomeInterface $object) {
        if ($object instanceof SomeClass) {
            $a = $object->a;
        }
    }
    
  2. Changing the type hint:

    interface SomeInterface { }
    class SomeClass implements SomeInterface {
        public $a;
    }
    
    function someFunction(SomeClass $object) {
        $a = $object->a;
    }
    
Loading history...
24 7
            case FieldType::FIELD_FIXED_TEXT:
25 6
            case FieldType::FIELD_MERGE_FIELD:
26 2
                $className = FieldParserFixedText::class;
27 2
                break;
28
29 5
            case FieldType::FIELD_BARCODE:
30 1
                $className = FieldParserBarcode::class;
31 1
                break;
32
33 4
            case FieldType::FIELD_DATE:
34 1
                $className = FieldParserDate::class;
35 1
                break;
36
37 3
            case FieldType::FIELD_OFFSET_DATE:
38 1
                $className = FieldParserDateOffset::class;
39 1
                break;
40
41 2
            case FieldType::FIELD_STATIC_GRAPHIC:
42 1
                $className = FieldParserStaticGraphic::class;
43 1
                break;
44
45 1
            case FieldType::FIELD_GRAPHIC_PRIMITIVE:
46 1
                $className = FieldParserGraphicPrimitive::class;
47 1
                break;
48
49
            default:
50
                throw new UnsupportedFieldTypeException($fieldType);
51
                break;
0 ignored issues
show
Unused Code introduced by
break; does not seem to be reachable.

This check looks for unreachable code. It uses sophisticated control flow analysis techniques to find statements which will never be executed.

Unreachable code is most often the result of return, die or exit statements that have been added for debug purposes.

function fx() {
    try {
        doSomething();
        return true;
    }
    catch (\Exception $e) {
        return false;
    }

    return false;
}

In the above example, the last return false will never be executed, because a return statement has already been met in every possible execution path.

Loading history...
52
        }
53
54 7
        return $className::factory();
55
    }
56
}
57