package Ġcom . jz bro ok s . v go . core . optimization Ċ Ċ import Ġcom . jz bro ok s . v go . core . graphic . Clip Path Ċ import Ġcom . jz bro ok s . v go . core . graphic . Container Element Ċ import Ġcom . jz bro ok s . v go . core . graphic . Extra Ċ import Ġcom . jz bro ok s . v go . core . graphic . Graphic Ċ import Ġcom . jz bro ok s . v go . core . graphic . Group Ċ import Ġcom . jz bro ok s . v go . core . graphic . Path Ċ import Ġcom . jz bro ok s . v go . core . util . math . Matrix 3 Ċ Ċ /** Ċ Ġ* ĠCol lapse Ġunnecessary Ġnested Ġgroups Ġinto Ġa Ġsingle Ġgroup Ċ Ġ*/ Ċ class ĠCol lapse Groups Ġ: ĠBottom Up Optimization Ġ{ ĊĊĠĠĠ Ġprivate Ġval ĠGroup . is Merge able : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhas Valid Clip Path Ġ= Ġelements . any Ġ{ Ġit Ġis ĠClip Path Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhas Attributes Ġ= Ġid Ġ!= Ġnull Ġ|| Ġ! transform . contents Equal ( Matrix 3 . IDENTITY ) Ġ|| Ġforeign . isNotEmpty () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ! has Valid Clip Path Ġ&& Ġelements . isNotEmpty () Ġ&& Ġ! has Attributes ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġvisit ( graphic : ĠGraph ic ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmerge Child Groups ( graphic ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġvisit ( group : ĠGroup ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmerge Child Groups ( group ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġvisit ( clip Path : ĠClip Path ) Ġ{} ĊĠĠĠ Ġoverride Ġfun Ġvisit ( extra : ĠExtra ) Ġ{} ĊĠĠĠ Ġoverride Ġfun Ġvisit ( path : ĠPath ) Ġ{} ĊĊĠĠĠ Ġprivate Ġfun Ġmerge Child Groups ( container Element : ĠContainer Element ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcontainer Element . elements Ġ= Ġcontainer Element . elements . flatMap Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġis ĠGroup Ġ&& Ġit . is Merge able ) Ġit . elements Ġelse ĠlistOf ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ