def countunbalanced(): import xmllexer import xmlfixup unbalancedcg = 0 brokenmarkup = 0 for cg in clones.clonegroups: bmp = False (ifn, ib, ie) = cg.instances[0] ifl = clones.inputfiles[ifn] il = ie - ib + 1 covint, bf, bl = xmllexer.find_covered_intervals( ib, il, ifl.lexintervals) if bf and covint[0].int_type != xmllexer.IntervalType.general \ or bl and covint[-1].int_type != xmllexer.IntervalType.general: brokenmarkup += 1 bmp = True if not bmp: pb, ab, pr, ar = xmlfixup.balance_unbalanced_text(covint) if len(pb) != 0 or len(ab) != 0: unbalancedcg += 1 return brokenmarkup, unbalancedcg
def countunbalanced(): import xmllexer import xmlfixup unbalancedcg = 0 brokenmarkup = 0 for cg in clones.clonegroups: bmp = False (ifn, ib, ie) = cg.instances[0] ifl = clones.inputfiles[ifn] il = ie - ib + 1 covint, bf, bl = xmllexer.find_covered_intervals(ib, il, ifl.lexintervals) if bf and covint[0].int_type != xmllexer.IntervalType.general \ or bl and covint[-1].int_type != xmllexer.IntervalType.general: brokenmarkup += 1 bmp = True if not bmp: pb, ab, pr, ar = xmlfixup.balance_unbalanced_text(covint) if len(pb) != 0 or len(ab) != 0: unbalancedcg += 1 return brokenmarkup, unbalancedcg
def create_reuse_entry(tinput: "str", clone_desc: "str", drl_elt_type: "str") -> "tuple(str, str)": """ Converts clone instances to dictionary entry references :param tinput: input DRL source :param clone_desc: clone group descriptor :return: tuple of output text and dictionary element source """ cd = CandidateDescriptor(clone_desc) drl_elts = { "dict": ("""<d:Entry id="%s">%s</d:Entry>""", """<d:DictRef entryid="%s" dictid="doc_clone_finder" />%s"""), "infelt": ("""<d:InfElement id="%s">%s</d:InfElement>""", """<d:InfElemRef infelemid="%s">%s</d:InfElemRef>"""), } drl_defs, drl_refs = drl_elts[drl_elt_type] if drl_elt_type != "infelt" and cd.variative: logging.fatal("Requested to refactor variative unit, but not information element") assert False def xs(xel): return "".join([el.srepr for el in xel]) eid = str(uuid.uuid4()) whole_instances = cd.get_whole_instances(tinput) # outer balancing using outer instance #0 outer_def_prepend, outer_def_append, outer_ref_prepend, outer_ref_append = xmlfixup.balance_unbalanced_text( xmllexer.lex(whole_instances[0]) ) # prepend and appends for extension points vps_pa = [] vps = cd.get_variative_parts(tinput) for vp in vps: # balancing using variative part #0 vps_pa.append(xmlfixup.balance_unbalanced_text(xmllexer.lex(vp[0]))) # definition vardefs = [] cnt = 0 for inner_def_prepend, inner_def_append, inner_ref_prepend, inner_ref_append in vps_pa: cnt += 1 vardefs.append(xs(inner_ref_prepend) + ("""<d:Nest id="%s.%d"/>""" % (eid, cnt)) + xs(inner_ref_append)) condefs = cd.get_constant_parts(tinput) bodydef = "".join([cv[0] + cv[1] for cv in zip(condefs, vardefs + [""])]) complete_def = drl_defs % (eid, xs(outer_def_prepend) + bodydef + xs(outer_def_append)) # reference vrefs = [] for vpv in vps: replace_nests = [] cnt = 0 for vp, pa in zip(vpv, vps_pa): cnt += 1 inner_def_prepend, inner_def_append, inner_ref_prepend, inner_ref_append = pa replace_nests.append( ("""<d:Replace-Nest nestid="%s.%d">""" % (eid, cnt)) + xs(inner_ref_prepend) + vp + xs(inner_ref_append) + """</d:Replace-Nest>""" ) vrefs.append(xs(outer_ref_prepend) + drl_refs % (eid, "".join(replace_nests)) + xs(outer_ref_append)) if not len(vrefs): # non-variative one vrefs = [xs(outer_ref_prepend) + (drl_refs % (eid, "")) + xs(outer_ref_append)] # instance intervals intervals = cd.get_whole_instance_coordinates(tinput) restext = replace_str_intervals_with(tinput, vrefs, intervals) return restext, complete_def
def create_reuse_entry(tinput: 'str', clone_desc: 'str', drl_elt_type: 'str') -> 'tuple(str, str)': """ Converts clone instances to dictionary entry references :param tinput: input DRL source :param clone_desc: clone group descriptor :return: tuple of output text and dictionary element source """ cd = CandidateDescriptor(clone_desc) drl_elts = { "dict": ("""<d:Entry id="%s">%s</d:Entry>""", """<d:DictRef entryid="%s" dictid="doc_clone_finder" />%s"""), "infelt": ("""<d:InfElement id="%s">%s</d:InfElement>""", """<d:InfElemRef infelemid="%s">%s</d:InfElemRef>""") } drl_defs, drl_refs = drl_elts[drl_elt_type] if drl_elt_type != 'infelt' and cd.variative: logging.fatal( "Requested to refactor variative unit, but not information element" ) assert False def xs(xel): return ''.join([el.srepr for el in xel]) eid = str(uuid.uuid4()) whole_instances = cd.get_whole_instances(tinput) # outer balancing using outer instance #0 outer_def_prepend, outer_def_append, outer_ref_prepend, outer_ref_append = \ xmlfixup.balance_unbalanced_text(xmllexer.lex(whole_instances[0])) # prepend and appends for extension points vps_pa = [] vps = cd.get_variative_parts(tinput) for vp in vps: # balancing using variative part #0 vps_pa.append(xmlfixup.balance_unbalanced_text(xmllexer.lex(vp[0]))) # definition vardefs = [] cnt = 0 for inner_def_prepend, inner_def_append, inner_ref_prepend, inner_ref_append in vps_pa: cnt += 1 vardefs.append( xs(inner_ref_prepend) + ("""<d:Nest id="%s.%d"/>""" % (eid, cnt)) + xs(inner_ref_append)) condefs = cd.get_constant_parts(tinput) bodydef = ''.join([cv[0] + cv[1] for cv in zip(condefs, vardefs + [''])]) complete_def = drl_defs % (eid, xs(outer_def_prepend) + bodydef + xs(outer_def_append)) # reference vrefs = [] for vpv in vps: replace_nests = [] cnt = 0 for vp, pa in zip(vpv, vps_pa): cnt += 1 inner_def_prepend, inner_def_append, inner_ref_prepend, inner_ref_append = pa replace_nests.append(("""<d:Replace-Nest nestid="%s.%d">""" % (eid, cnt)) + xs(inner_ref_prepend) + vp + xs(inner_ref_append) + """</d:Replace-Nest>""") vrefs.append( xs(outer_ref_prepend) + drl_refs % (eid, ''.join(replace_nests)) + xs(outer_ref_append)) if not len(vrefs): # non-variative one vrefs = [ xs(outer_ref_prepend) + (drl_refs % (eid, '')) + xs(outer_ref_append) ] # instance intervals intervals = cd.get_whole_instance_coordinates(tinput) restext = replace_str_intervals_with(tinput, vrefs, intervals) return restext, complete_def