Code
Explorer
You are a developer and looking for Shopware projects?
Apply Now!
isWeak example
private
function
checkOutEdges
(
array
$edges
)
: void
{
foreach
(
$edges
as
$edge
)
{
$node
=
$edge
->
getDestNode
(
)
;
$id
=
$node
->
getId
(
)
;
if
(
empty
(
$this
->checkedNodes
[
$id
]
)
)
{
// Don't check circular references for lazy edges
if
(
!
$node
->
getValue
(
)
||
(
!
$edge
->
isLazy
(
)
&& !
$edge
->
isWeak
(
)
)
)
{
$searchKey
=
array_search
(
$id
,
$this
->currentPath
)
;
$this
->currentPath
[
]
=
$id
;
if
(
false !==
$searchKey
)
{
throw
new
ServiceCircularReferenceException
(
$id
, \
array_slice
(
$this
->currentPath,
$searchKey
)
)
;
}
$this
->
checkOutEdges
(
$node
->
getOutEdges
(
)
)
;
}
$this
->checkedNodes
[
$id
]
= true;
return
false;
}
if
(
!
$definition
->
isShared
(
)
)
{
if
(
!
$this
->graph->
hasNode
(
$id
)
)
{
return
true;
}
foreach
(
$this
->graph->
getNode
(
$id
)
->
getInEdges
(
)
as
$edge
)
{
$srcId
=
$edge
->
getSourceNode
(
)
->
getId
(
)
;
$this
->connectedIds
[
$srcId
]
= true;
if
(
$edge
->
isWeak
(
)
||
$edge
->
isLazy
(
)
)
{
return
!
$this
->connectedIds
[
$id
]
= true;
}
}
return
true;
}
if
(
$definition
->
isPublic
(
)
)
{
return
false;
}
return
false;
}
if
(
!
$definition
->
isShared
(
)
)
{
if
(
!
$this
->graph->
hasNode
(
$id
)
)
{
return
true;
}
foreach
(
$this
->graph->
getNode
(
$id
)
->
getInEdges
(
)
as
$edge
)
{
$srcId
=
$edge
->
getSourceNode
(
)
->
getId
(
)
;
$this
->connectedIds
[
$srcId
]
= true;
if
(
$edge
->
isWeak
(
)
||
$edge
->
isLazy
(
)
)
{
return
!
$this
->connectedIds
[
$id
]
= true;
}
}
return
true;
}
if
(
$definition
->
isPublic
(
)
)
{
return
false;
}
private
function
checkOutEdges
(
array
$edges
)
: void
{
foreach
(
$edges
as
$edge
)
{
$node
=
$edge
->
getDestNode
(
)
;
$id
=
$node
->
getId
(
)
;
if
(
empty
(
$this
->checkedNodes
[
$id
]
)
)
{
// Don't check circular references for lazy edges
if
(
!
$node
->
getValue
(
)
||
(
!
$edge
->
isLazy
(
)
&& !
$edge
->
isWeak
(
)
)
)
{
$searchKey
=
array_search
(
$id
,
$this
->currentPath
)
;
$this
->currentPath
[
]
=
$id
;
if
(
false !==
$searchKey
)
{
throw
new
ServiceCircularReferenceException
(
$id
, \
array_slice
(
$this
->currentPath,
$searchKey
)
)
;
}
$this
->
checkOutEdges
(
$node
->
getOutEdges
(
)
)
;
}
$this
->checkedNodes
[
$id
]
= true;
$this
->container->
getCompiler
(
)
->
getServiceReferenceGraph
(
)
->
clear
(
)
;
$this
->singleUsePrivateIds =
array_diff_key
(
$this
->singleUsePrivateIds,
$this
->circularReferences
)
;
}
private
function
collectCircularReferences
(
string
$sourceId
, array
$edges
, array &
$checkedNodes
, array &
$loops
=
[
]
, array
$path
=
[
]
, bool
$byConstructor
= true
)
: void
{
$path
[
$sourceId
]
=
$byConstructor
;
$checkedNodes
[
$sourceId
]
= true;
foreach
(
$edges
as
$edge
)
{
$node
=
$edge
->
getDestNode
(
)
;
$id
=
$node
->
getId
(
)
;
if
(
$sourceId
===
$id
|| !
$node
->
getValue
(
)
instanceof Definition ||
$edge
->
isLazy
(
)
||
$edge
->
isWeak
(
)
)
{
continue
;
}
if
(
isset
(
$path
[
$id
]
)
)
{
$loop
= null;
$loopByConstructor
=
$edge
->
isReferencedByConstructor
(
)
;
$pathInLoop
=
[
$id
,
[
]
]
;
foreach
(
$path
as
$k
=>
$pathByConstructor
)
{
if
(
null !==
$loop
)
{
$loop
[
]
=
$k
;
$pathInLoop
[
1
]
[
$k
]
=
$pathByConstructor
;
$this
->container->
getCompiler
(
)
->
getServiceReferenceGraph
(
)
->
clear
(
)
;
$this
->singleUsePrivateIds =
array_diff_key
(
$this
->singleUsePrivateIds,
$this
->circularReferences
)
;
}
private
function
collectCircularReferences
(
string
$sourceId
, array
$edges
, array &
$checkedNodes
, array &
$loops
=
[
]
, array
$path
=
[
]
, bool
$byConstructor
= true
)
: void
{
$path
[
$sourceId
]
=
$byConstructor
;
$checkedNodes
[
$sourceId
]
= true;
foreach
(
$edges
as
$edge
)
{
$node
=
$edge
->
getDestNode
(
)
;
$id
=
$node
->
getId
(
)
;
if
(
$sourceId
===
$id
|| !
$node
->
getValue
(
)
instanceof Definition ||
$edge
->
isWeak
(
)
)
{
continue
;
}
if
(
isset
(
$path
[
$id
]
)
)
{
$loop
= null;
$loopByConstructor
=
$edge
->
isReferencedByConstructor
(
)
&& !
$edge
->
isLazy
(
)
;
$pathInLoop
=
[
$id
,
[
]
]
;
foreach
(
$path
as
$k
=>
$pathByConstructor
)
{
if
(
null !==
$loop
)
{
$loop
[
]
=
$k
;
$pathInLoop
[
1
]
[
$k
]
=
$pathByConstructor
;
$this
->container->
getCompiler
(
)
->
getServiceReferenceGraph
(
)
->
clear
(
)
;
$this
->singleUsePrivateIds =
array_diff_key
(
$this
->singleUsePrivateIds,
$this
->circularReferences
)
;
}
private
function
collectCircularReferences
(
string
$sourceId
, array
$edges
, array &
$checkedNodes
, array &
$loops
=
[
]
, array
$path
=
[
]
, bool
$byConstructor
= true
)
: void
{
$path
[
$sourceId
]
=
$byConstructor
;
$checkedNodes
[
$sourceId
]
= true;
foreach
(
$edges
as
$edge
)
{
$node
=
$edge
->
getDestNode
(
)
;
$id
=
$node
->
getId
(
)
;
if
(
$sourceId
===
$id
|| !
$node
->
getValue
(
)
instanceof Definition ||
$edge
->
isWeak
(
)
)
{
continue
;
}
if
(
isset
(
$path
[
$id
]
)
)
{
$loop
= null;
$loopByConstructor
=
$edge
->
isReferencedByConstructor
(
)
&& !
$edge
->
isLazy
(
)
;
$pathInLoop
=
[
$id
,
[
]
]
;
foreach
(
$path
as
$k
=>
$pathByConstructor
)
{
if
(
null !==
$loop
)
{
$loop
[
]
=
$k
;
$pathInLoop
[
1
]
[
$k
]
=
$pathByConstructor
;