Skip to content

Commit

Permalink
Merge pull request #6 from PruneMazui/develop
Browse files Browse the repository at this point in the history
Absorb the difference in language specification
  • Loading branch information
PruneMazui committed Nov 15, 2017
2 parents 6acdc67 + 55efdcf commit 41c920f
Show file tree
Hide file tree
Showing 4 changed files with 61 additions and 5 deletions.
12 changes: 9 additions & 3 deletions src/Element/ArgumentElement.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,12 @@ class ArgumentElement extends AbstractNamedElement implements EncodableInterface
{
const TYPE = 'parameter';

private static $excludeDataTypeMap = [
'variable'
private static $dataTypeConvertMap = [
'variable' => null,
'object' => null,
'resource' => null,
'long' => 'int',
'double' => 'float',
];

private $dataType = null;
Expand Down Expand Up @@ -67,7 +71,9 @@ public static function factory($params): self
}

$data_type = $params['data-type'] ?? null;
if (! in_array($data_type, self::$excludeDataTypeMap)) {
if (array_key_exists($data_type, self::$dataTypeConvertMap)) {
$ret->dataType = self::$dataTypeConvertMap[$data_type];
} else {
$ret->dataType = $data_type;
}

Expand Down
1 change: 1 addition & 0 deletions src/Element/MethodElement.php
Original file line number Diff line number Diff line change
Expand Up @@ -197,6 +197,7 @@ public static function factoryAllPropertyShortCuts(array $params): array
break;

case 'toString':
case '__toString':
$elem = new self();
$elem->name = '__toString';
$ret[] = $elem;
Expand Down
8 changes: 7 additions & 1 deletion src/Element/NamespaceElement.php
Original file line number Diff line number Diff line change
Expand Up @@ -166,8 +166,14 @@ public function encode(): string
{
$content = 'namespace ' . $this->getName() . "\n{\n";

$exclude_map = [];
foreach ($this->classes as $class) {
$exclude_map[] = $class->getName();
}

foreach ($this->uses as $use) {
$content .= Util::indent($use->encode());
$content .= Util::indent($use->setExcludeConflictMap($exclude_map)->encode());
$exclude_map = array_merge($exclude_map, $use->getUniqueNames());
}

if (count($this->uses)) {
Expand Down
45 changes: 44 additions & 1 deletion src/Element/UseElement.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,23 @@ class UseElement implements EncodableInterface
*/
private $aliases = [];

/**
* @var string[]
*/
private $uniqueNames = [];

private $excludeConflictMap = [];

/**
* @param array $exclude_conflict_map
* @return self
*/
public function setExcludeConflictMap(array $exclude_conflict_map): self
{
$this->excludeConflictMap = $exclude_conflict_map;
return $this;
}

/**
* @return string[]
*/
Expand All @@ -21,6 +38,14 @@ public function getAliases(): array
return $this->aliases;
}

/**
* @var string[]
*/
public function getUniqueNames(): array
{
return $this->uniqueNames;
}

/**
* @param array $param
* @throws DefinitionException
Expand All @@ -44,11 +69,16 @@ public static function factory(array $param): self

$content = $aliase['name'];

$name_separated = explode('\\', $aliase['name']);
$unique_name = end($name_separated);

if (! empty($aliase['alias'])) {
$content .= ' as ' . $aliase['alias'];
$unique_name = $aliase['alias'];
}

$ret->aliases[] = $content;
$ret->uniqueNames[] = $unique_name;
}

if (empty($ret->aliases)) {
Expand All @@ -64,6 +94,19 @@ public static function factory(array $param): self
*/
public function encode(): string
{
return 'use ' . implode(', ', $this->getAliases()) . ";\n";
$aliases = $this->getAliases();

foreach ($this->uniqueNames as $key => $unique_name) {
if (in_array($unique_name, $this->excludeConflictMap)) {
unset($aliases[$key]);
}
}


if (! count($aliases)) {
return '';
}

return 'use ' . implode(', ', $aliases) . ";\n";
}
}

0 comments on commit 41c920f

Please sign in to comment.