Esempio n. 1
0
def link_to_table(type_, table_name):

    # search all tables or views with table_name as name
    tables = external_link.find_objects(table_name, filter.tables_or_views)

    # the position of the link will be the position of the class
    position = type_.get_position()
    for table in tables:
        create_link('useLink', type_, table, position)
Esempio n. 2
0
def link_to_table(type_, table_name):

    # search all tables or views with table_name as name
    tables = external_link.find_objects(table_name, filter.tables_or_views)
    
    # the position of the link will be the position of the class
    position = type_.get_position()
    for table in tables:
        create_link('useLink', type_, table, position)
Esempio n. 3
0
    def end_analysis(self):
        X.debug("****************")
        for fromObjs, fromURIs in fromRef.items():
            for toObjs, toURIs in toRef.items():
                if (toURIs[1] == fromURIs[1]):
                    X.debug("&&&&&&&&&")
                    create_link('callLink', fromObjs, toObjs,
                                Bookmark(toObjs.parent, 1, 1, -1, -1))
                    X.debug("__________")

            #X.debug(str(keys))
            #X.debug(str(values[1]))

        pass
    def add_sqlnamedquery(sqltable, sql_queries, resultMaps, typeAliases, file,
                          namespace):
        for sqlid, node in sqltable.items():
            log.info('NEW Named Query - %s' % sqlid)

            sqlquery = CustomObject()
            sqlquery.set_name(sqlid)
            sqlquery.set_type('CAST_SQL_NamedQuery')
            sqlquery.set_parent(file)
            sqlquery.save()

            #Get SQL from node
            sql = node.text
            for sub_node in node:
                if 'refid' in sub_node.attrib and sub_node.attrib[
                        'refid'] in sql_queries:
                    sql += sql_queries[sub_node.attrib['refid']].text.strip()
                if sub_node.tail:
                    sql += sub_node.tail

            #log.info('SQL: %s' % sql)
            sqlquery.save_property('CAST_SQL_MetricableQuery.sqlQuery', sql)

            log.info(' - creating links...')
            for embedded in external_link.analyse_embedded(sql):
                for t in embedded.types:
                    #log.info(' - link to : %s' % embedded.callee.get_name())
                    link = create_link(t, sqlquery, embedded.callee)
                    link.mark_as_not_sure()

            #Save all potential properties for later use
            CommonParsing.add_property(sqlquery, node, 'parameterClass',
                                       typeAliases)
            CommonParsing.add_property(sqlquery, node, 'parameterType',
                                       typeAliases)
            CommonParsing.add_property(sqlquery, node, 'resultClass',
                                       typeAliases)
            CommonParsing.add_property(sqlquery, node, 'listClass',
                                       typeAliases)
            CommonParsing.add_property(sqlquery, node, 'resultMap',
                                       typeAliases)
            CommonParsing.add_property(sqlquery, node, 'resultType',
                                       typeAliases)
            CommonParsing.add_property(sqlquery, node, 'parameterMap',
                                       typeAliases)

            if (namespace != ''):
                log.debug('Habemus namespacus!')
                sqlquery.save_property('iBatisProperties.namespace', namespace)

            for mapId, mapClass in resultMaps.items():
                if 'resultMap' in node.attrib and node.attrib[
                        'resultMap'] == mapId:
                    log.debug(' - class: %s' % mapClass)
                    sqlquery.save_property('iBatisProperties.class', mapClass)
    def end_application3(self, application):
        variables = application.objects().has_type(
            "CAST_DotNet_MethodCSharp")  #get all the variables
        for link in application.links().has_callee(variables).load_positions():
            #             print(link.get_caller().get_name())
            try:

                code = link.get_code(3)  #get the multiline code
                #                 #print("test11")
                #                 print(link.get_caller().get_name())
                #                 print(code)
                #                 print()
                sql, b = testifsql(code)

                #                 print(sql)
                if (sql == "nothing"):
                    continue
                try:
                    c, a = b.split(
                        "=")  # if there is an equal, take everything before it
                    b = c
                except:
                    pass
#                 print("test1 = ",b)
                print("b = " + b)

                objet = re.split("[^\w]+", b)  #split at \"

                for obj in objet:
                    #                     print("objet         = "+ obj)
                    if (obj != ""):
                        for f in application.objects():
                            #                         #print("name =" + f.get_name() + "<=>" + objet[t] + "!")
                            try:
                                if (f.get_name() == obj
                                        and f.get_type() == "SQLScriptTable"):
                                    #                                 print(f.get_name()+ "        " +f.get_type())
                                    try:
                                        #                     #print("getting positions")

                                        positions = str(
                                            link.get_caller().get_positions())
                                        #print(positions)
                                        pos = ""
                                        for i in range(len(positions) - 2):
                                            pos += positions[i + 1]
                                        #print("testa")
                                        arr = pos.split(",")
                                        file = arr[0].split("(")
                                        #print("testb")
                                        line = int(arr[2]) + 2

                                        for ds in application.objects():
                                            if (ds.get_name() == file[2]):
                                                #print("file found")
                                                asd = ds

                                        hg = 0
                                        tes = 0
                                        if (sql == "select"):
                                            code = code.split("{")[1]
        #                                     print("done")
                                        for lo in range(len(code)):
                                            #                                     try:
                                            #                                         print(str(hg)+"    "+obj[hg]+"    "+str(lo)+"    "+code[lo])
                                            #                                     except:
                                            #                                         print("fail:", sys.exc_info()[0])
                                            if (hg < len(obj)):
                                                if (code[lo] == obj[hg]):
                                                    hg += 1
                                                    continue
                                                else:
                                                    hg = 0
                                            else:
                                                tes = 1
                                                column = lo - len(obj)
                                                break

                                    except:
                                        print("Unexpected error:",
                                              sys.exc_info()[0])

                                    #print("test1")
                                    print("creating a link from " +
                                          link.get_caller().get_name() +
                                          " to " + f.get_name())

                                    bookmark = Bookmark(
                                        asd, line, column, line,
                                        column + len(obj))

                                    #print("test1")
                                    print("type : ", end="")
                                    print(sql)
                                    if (sql == "insert"):
                                        create_link("useInsertLink",
                                                    link.get_caller(), f,
                                                    bookmark)

                                    if (sql == "insert into"):
                                        create_link("useInsertLink",
                                                    link.get_caller(), f,
                                                    bookmark)

                                    if (sql == "select"):
                                        create_link("useSelectLink",
                                                    link.get_caller(), f,
                                                    bookmark)

                                    if (sql == "update"):
                                        create_link("useUpdateLink",
                                                    link.get_caller(), f,
                                                    bookmark)

                                    if (sql == "select count"):
                                        create_link("useSelectLink",
                                                    link.get_caller(), f,
                                                    bookmark)
                                    qwe = 1
                            except:
                                print("error get_name")
                                pass
            except:
                print("Unexpected error 2:", sys.exc_info()[0])
Esempio n. 6
0
 def checkOnmessage(self, bpel_invoke, operation_type, namespace_port,
                    onmessage_count):
     flag_link = 0
     for reference in bpel_onmessage_data:
         for data in bpel_onmessage_data[reference]:
             onmessage_data = str(data)
             onmessage_data = re.sub('(\[)|(\])|(\')|(\s+)', '',
                                     onmessage_data)
             onmessage_port_type = ""
             onmessage_operation_type = ""
             onmessage_namespace_port = ""
             process_data = ""
             for ele in list(onmessage_data.split(',')):
                 if "portType:" in ele:
                     onmessage_port_type = ele[ele.find(':') + 1:]
                 elif "operation:" in ele:
                     onmessage_operation_type = ele[ele.find(':') + 1:]
             if ':' in onmessage_port_type:
                 onmessage_namespace_port = onmessage_port_type[:
                                                                onmessage_port_type
                                                                .find(':') +
                                                                1]
             process_data = str(bpel_process_data[reference])
             process_data = re.sub('(\[)|(\])|(\')|(\s+)', '', process_data)
             process_data = process_data.replace('xmlns:map:', '')
             for ele in list(process_data.split(',')):
                 if onmessage_namespace_port in ele:
                     onmessage_namespace_port = ele[ele.find(':') + 1:]
                     onmessage_namespace_port = onmessage_namespace_port + onmessage_port_type[
                         onmessage_port_type.find(':') + 1:]
                     break
             if operation_type == onmessage_operation_type and namespace_port == onmessage_namespace_port:
                 if reference in wsdl_obj_reference:
                     #CAST.debug(onmessage_operation_type)
                     file_name = wsdl_obj_reference[
                         reference].parent.get_path()
                     wsdl_operation = CustomObject()
                     onmessage_count = onmessage_count + 1
                     self.saveObject(
                         wsdl_operation, onmessage_operation_type,
                         file_name + onmessage_operation_type,
                         "WSDL_Operation",
                         wsdl_obj_reference[reference].parent, file_name +
                         "WSDL_Operation" + str(onmessage_count))
                     wsdl_operation.save()
                     wsdl_operation.save_position(
                         Bookmark(reference.parent, 1, 1, -1, -1))
                     create_link('callLink', bpel_invoke, wsdl_operation,
                                 Bookmark(reference.parent, 1, 1, -1, -1))
                     create_link('callLink', wsdl_operation,
                                 wsdl_obj_reference[reference],
                                 Bookmark(reference.parent, 1, 1, -1, -1))
                     flag_link = 1
                     break
                 else:
                     pass
             else:
                 pass
         if flag_link == 1:
             break
     return onmessage_count
     pass
Esempio n. 7
0
    def end_analysis(self):
        for child in bpel_process_data:
            bpel_target_name = ""
            bpel_name = ""
            for ele in bpel_process_data[child]:
                if "targetNamespace:" in ele:
                    bpel_target_name = ele[ele.find(':') + 1:]
                elif "name:" in ele:
                    bpel_name = ele[ele.find(':') + 1:]

            for ele in wsdl_file_data:
                wsdl_target_name = ""
                wsdl_name = ""
                for subele in wsdl_file_data[ele]["definitions"]:
                    if "targetNamespace:" in subele:
                        wsdl_target_name = subele[subele.find(':') + 1:]
                    elif "name:" in subele:
                        wsdl_name = subele[subele.find(':') + 1:]
                #CAST.debug(wsdl_name)
                if wsdl_target_name == bpel_target_name:
                    create_link('callLink', ele, child,
                                Bookmark(child.parent, 1, 1, -1, -1))
                    wsdl_obj_reference[child] = ele
                elif wsdl_name == bpel_name and len(wsdl_name) != 0 and len(
                        bpel_name) != 0:
                    #CAST.debug(bpel_name+wsdl_name)
                    create_link('callLink', ele, child,
                                Bookmark(child.parent, 1, 1, -1, -1))
                    wsdl_obj_reference[child] = ele
        invoke_count = 0
        operation_count = 0
        onmessage_count = 0
        for child in bpel_invoke_data:
            invoke_index = 0
            for ele in bpel_invoke_data[child]:
                port_type = ""
                operation_type = ""
                namespace_port = ""
                invoke_name = "null"
                patnerlink_name = ""
                ele_data = str(ele)
                ele_data = re.sub('(\[)|(\])|(\')|(\s+)', '', ele_data)
                bpel_invoke_list = []
                bpel_invoke_list = ele_data.split(',')
                for subele in bpel_invoke_list:
                    if 'portType:' in subele:
                        port_type = subele[subele.find(':') + 1:]
                    elif 'operation:' in subele:
                        operation_type = subele[subele.find(':') + 1:]
                    elif 'name:' in subele:
                        invoke_name = subele[subele.find(':') + 1:]
                    elif 'partnerLink:' in subele:
                        patnerlink_name = subele[subele.find(':') + 1:]
                filename = child.parent.get_path()
                invoke_fullname = ''
                if invoke_name == "null":
                    invoke_name = patnerlink_name
                    invoke_fullname = filename + '--null'
                else:
                    invoke_fullname = filename + '--' + invoke_name

                bpel_invoke = CustomObject()
                invoke_count = invoke_count + 1
                self.saveObject(bpel_invoke, invoke_name, invoke_fullname,
                                "BPEL_Invoke", child.parent,
                                filename + "BPEL_Invoke" + str(invoke_count))
                bpel_invoke.save()
                try:
                    bpel_invoke.save_position(
                        bpel_bookmark_data[str(child) +
                                           "invoke.bookmark"][invoke_index])
                except:
                    bpel_invoke.save_position(
                        Bookmark(child.parent, 1, 1, -1, -1))
                invoke_index = invoke_index + 1
                create_link('callLink', child, bpel_invoke,
                            Bookmark(child.parent, 1, 1, -1, -1))
                if not ("null" in port_type and "null" in operation_type):
                    if ':' in port_type:
                        namespace_port = port_type[:port_type.find(':') + 1]
                    ele_data = str(bpel_process_data[child])
                    ele_data = re.sub('(\[)|(\])|(\')|(\s+)', '', ele_data)
                    ele_data = ele_data.replace('xmlns:map:', '')
                    #CAST.debug(ele_data)
                    for invoke_data in list(ele_data.split(',')):
                        if namespace_port in invoke_data:
                            namespace_port = invoke_data[invoke_data.
                                                         find(':') + 1:]
                            namespace_port = namespace_port + port_type[
                                port_type.find(':') + 1:]
                            break
                    flag_link = 0
                    '''
                    CAST.debug(ele_data)
                    CAST.debug(operation_type+"--"+namespace_port)
                    CAST.debug('--XD')
                    '''
                    for subele in bpel_receive_data:
                        for bpel_ele in bpel_receive_data[subele]:
                            ele_data = str(bpel_ele)
                            ele_data = re.sub('(\[)|(\])|(\')|(\s+)', '',
                                              ele_data)
                            bpel_receive_list = []
                            bpel_receive_list = ele_data.split(',')
                            receive_port_type = ""
                            receive_operation_type = ""
                            receive_namespace_port = ""
                            for receive_data in bpel_receive_list:
                                if 'portType:' in receive_data:
                                    receive_port_type = receive_data[
                                        receive_data.find(':') + 1:]
                                elif 'operation:' in receive_data:
                                    receive_operation_type = receive_data[
                                        receive_data.find(':') + 1:]
                            if ':' in receive_port_type:
                                receive_namespace_port = receive_port_type[:
                                                                           receive_port_type
                                                                           .
                                                                           find(
                                                                               ':'
                                                                           ) +
                                                                           1]
                            ele_data = str(bpel_process_data[subele])
                            ele_data = re.sub('(\[)|(\])|(\')|(\s+)', '',
                                              ele_data)
                            ele_data = ele_data.replace('xmlns:map:', '')
                            for receive_data in list(ele_data.split(',')):
                                if receive_namespace_port in receive_data:
                                    receive_namespace_port = receive_data[
                                        receive_data.find(':') + 1:]
                                    receive_namespace_port = receive_namespace_port + receive_port_type[
                                        receive_port_type.find(':') + 1:]
                                    break
                            '''
                            for process_data in bpel_process_data[subele].split(','):
                                CAST.debug(str(process_data))
                            '''

                            if namespace_port == receive_namespace_port and operation_type == receive_operation_type:
                                if subele in wsdl_obj_reference:
                                    CAST.debug('Object linking.....')
                                    '''
                                    CAST.debug('XC')
                                    CAST.debug(filename)
                                    CAST.debug(invoke_name)
                                    CAST.debug(receive_namespace_operation+"--"+receive_namespace_port)
                                    '''
                                    file_name = wsdl_obj_reference[
                                        subele].parent.get_path()
                                    wsdl_operation = CustomObject()
                                    operation_count = operation_count + 1
                                    self.saveObject(
                                        wsdl_operation, receive_operation_type,
                                        file_name + receive_operation_type,
                                        "WSDL_Operation",
                                        wsdl_obj_reference[subele].parent,
                                        file_name + "WSDL_Operation" +
                                        str(operation_count))
                                    wsdl_operation.save()
                                    wsdl_operation.save_position(
                                        Bookmark(subele.parent, 1, 1, -1, -1))
                                    create_link(
                                        'callLink', bpel_invoke,
                                        wsdl_operation,
                                        Bookmark(subele.parent, 1, 1, -1, -1))
                                    create_link(
                                        'callLink', wsdl_operation,
                                        wsdl_obj_reference[subele],
                                        Bookmark(subele.parent, 1, 1, -1, -1))
                                    flag_link = 1
                                    break
                                else:
                                    pass
                            else:
                                pass
                        if flag_link == 1:
                            break
                    if flag_link != 1:
                        onmessage_count = self.checkOnmessage(
                            bpel_invoke, operation_type, namespace_port,
                            onmessage_count)
                else:
                    pass
        CAST.debug('End!!')
        '''               
        for child in bpel_file_data:
            for subchild in bpel_file_data[child]:
                CAST.debug(subchild+"->")
                for j in bpel_file_data[child][subchild]:
                    CAST.debug(str(j))           
        #for child in wsdl_file_data:
            #for subchild in wsdl_file_data[child]:
        #    CAST.debug(str(wsdl_file_data[child]))
        '''
        pass
Esempio n. 8
0
 def end_type(self, _type):
     class_bookmark = _type.get_positions()
     name=str(_type.get_name())                                                      # fetching name of class or interface
     path = _type. get_position().get_file().get_path()                              # fetching path of required file
     CAST.debug("-----"+str(path)+"-----")                                           
     self.object_names=[]
     self.objects = []
     method_range = [[x,y[0].get_begin_line(),y[0].get_end_line()] for x,y in self.bookmarks.items()]
     CAST.debug("Method_range: "+str(method_range)+"     Class Bookmark: "+str(class_bookmark[0]))
     Result= parser(path,method_range,class_bookmark[0])
     if Result:
         CAST.debug(" Creating Objects:    ")                                  # Creating objects for producer, consumer variables and queue name
         for key in Result.keys():
             if "MessageProducer" in Result[key][0] or "JMSProducer" in Result[key][0] or "QueueSender" in Result[key][0] or "TopicPublisher" in Result[key][0]:
                 o = CustomObject()
                 Object_created = True
                 parent_link = list(filter(lambda x: Result[key][1] in range(x[1],x[2]),method_range))
                 if parent_link: self.createObj(o,name+"_"+str(key),parent_link[0][0],"obj"+str(key),"MOM_Producer")  
                 elif Result[key][1] in range(class_bookmark[0].get_begin_line(),class_bookmark[0].get_end_line()):   self.createObj(o,name+"_"+str(key),_type,"obj"+str(key),"MOM_Producer")
                 else: Object_created = False
                 if Object_created:
                     self.object_names.append(key)
                     self.objects.append(o)
             elif "TopicSubscriber" in Result[key][0] or "JMSConsumer" in Result[key][0] or "MessageConsumer" in Result[key][0] or "QueueReceiver" in Result[key][0]:
                 o = CustomObject()
                 Object_created = True
                 parent_link = list(filter(lambda x: Result[key][1] in range(x[1],x[2]),method_range))
                 if parent_link: self.createObj(o,name+"_"+str(key),parent_link[0][0],"obj"+str(key),"MOM_Consumer") 
                 elif Result[key][1] in range(class_bookmark[0].get_begin_line(),class_bookmark[0].get_end_line()):   self.createObj(o,name+"_"+str(key),_type,"obj"+str(key),"MOM_Consumer")
                 else: Object_created = False
                 if Object_created:
                     self.object_names.append(key)
                     self.objects.append(o)
             if Result[key][-1] not in self.object_names:
                 p = CustomObject()
                 Object_created = True
                 parent_link = list(filter(lambda x: Result[key][1] in range(x[1],x[2]),method_range)) 
                 if parent_link: self.createObj(p,name+"_"+str(Result[key][-1]),parent_link[0][0],"obj"+str(key),"MOM_Queue")
                 elif Result[key][1] in range(class_bookmark[0].get_begin_line(),class_bookmark[0].get_end_line()):   self.createObj(p,name+"_"+str(Result[key][-1]),_type,"obj"+str(key),"MOM_Queue")
                 else: Object_created = False
                 if Object_created:
                     self.object_names.append(str(Result[key][-1]))
                     self.objects.append(p)   
         CAST.debug(" Creating Links:    ")
         if self.objects:
             for key in Result.keys():
                 class_variable = True
                 for bk in self.bookmarks.keys():                                                # for linking Method objects with producer and consumer objects
                     x,y = self.bookmarks[bk][0].get_begin_line() , self.bookmarks[bk][0].get_end_line()
                     if Result[key][1] in range(x,y+1):
                         obj1 = bk
                         obj2 = self.objects[self.object_names.index(key)]
                         create_link('useLink',obj1,obj2)
                         class_variable = False
                         CAST.debug(str(obj1)+" --links with-- "+obj2.name)
                 if class_variable == True:
                     obj1 = _type
                     obj2 = self.objects[self.object_names.index(key)]
                     create_link('useLink',obj1,obj2)
                     CAST.debug(str(obj1)+" --links with-- "+obj2.name)
             for key in Result.keys():                                                                        # for linking producer or consumer objects with queue object
                 obj1 = self.objects[self.object_names.index(key)]
                 obj2 = self.objects[self.object_names.index(Result[key][-1])]
                 if "MessageProducer" in Result[key][0] or "QueueSender" in Result[key][0] or "JMSProducer" in Result[key][0] or "TopicPublisher" in Result[key][0]:
                     create_link('useLink', obj1, obj2)
                     CAST.debug(obj1.name+" --linked with-- "+obj2.name)
                 else:
                     create_link('useLink', obj2, obj1)
                     CAST.debug(obj2.name+" --linked with-- "+obj1.name)   
             self.bookmarks={}    
Esempio n. 9
0
    def start_file(self, file):
        Print.info("Start f!")
        contentList = []
        #self.file = file
        #self.filename = "C:/Users/Angelin.mariya/Desktop/app.module.ts";
        self.filename = file.get_path()
        self.file = file
        #Print.info("###############printing file name############")
        #Print.info("FileName--" + str(self.filename))
        file_ref = open(self.filename, encoding='UTF_8')
        #contentList=[];
        for i in file_ref:
            contentList.append(str(i))

        indexOfClass = self.findIndex(contentList, "[c][l][a][s][s][\s]*.*[{]",
                                      0)
        indexOfFunction = self.findIndex(
            contentList,
            "([v][o][i][d][\s]*|[s][t][r][i][n][g][\s]*|[i][n][t][\s]*).*[(].*[)][\s]+[{]",
            0)
        Print.info(str(indexOfFunction))
        classNameLine = contentList[indexOfClass]
        #className=classNameLine.replace('{',' ');
        className = classNameLine.split("{")
        className = className[0].split(" ")
        classObject = "NA"
        abstractClassObject = "NA"
        functionConnections = []
        if className[0].strip() == "class":
            classObject = className[1]
            finalData["classObject"].append([classObject, indexOfClass])
            Groovy_class = CustomObject()
            self.saveObject(Groovy_class, str(classObject),
                            self.filename + str(classObject), "Groovy_class",
                            self.file, self.filename + "Groovy_class")
            Groovy_class.save()
            Groovy_class.save_position(
                Bookmark(self.file, indexOfClass + 1, 1, indexOfClass + 1, -1))
            functionList, functionConnections = self.getFunctionList(
                contentList,
                "([v][o][i][d][\s]*|[s][t][r][i][n][g][\s]*|[i][n][t][\s]*).*[(].*[)][\s]+[{]"
            )
            for i in functionConnections:
                finalData["functionLink"].append(i)
            for i in functionList:
                Groovy_Function = CustomObject()
                self.saveObject(Groovy_Function, str(i[0]),
                                self.filename + str(i[0]), "Groovy_Function",
                                self.file, self.filename + str(i[0]))
                Groovy_Function.save()
                Groovy_Function.save_position(
                    Bookmark(self.file, i[1], 1, i[1], -1))
                create_link('containLink', Groovy_class, Groovy_Function)
        elif className[0].strip() == "abstract":
            abstractClassObject = className[2]
            finalData["abstractObject"].append(
                [abstractClassObject, indexOfClass])
            Groovy_AbstractClass = CustomObject()
            self.saveObject(Groovy_AbstractClass, str(abstractClassObject),
                            self.filename + str(abstractClassObject),
                            "Groovy_AbstractClass", self.file,
                            self.filename + "Groovy_AbstractClass")
            Groovy_AbstractClass.save()
            Groovy_AbstractClass.save_position(
                Bookmark(self.file, indexOfClass + 1, 1, indexOfClass + 1, -1))
            functionList, functionConnections = self.getFunctionList(
                contentList,
                "([v][o][i][d][\s]*|[s][t][r][i][n][g][\s]*|[i][n][t][\s]*).*[(].*[)][\s]+[{]"
            )
            for i in functionConnections:
                finalData["functionLink"].append(i)
            for i in functionList:
                Groovy_Function = CustomObject()
                self.saveObject(Groovy_Function, str(i[0]),
                                self.filename + str(i[0]), "Groovy_Function",
                                self.file, self.filename + str(i[0]))
                print("groovy object saved")
                Groovy_Function.save()
                Groovy_Function.save_position(
                    Bookmark(self.file, i[1], 1, i[1], -1))
                create_link('containLink', Groovy_AbstractClass,
                            Groovy_Function)
        in1 = self.findIndex(
            contentList,
            "([v][o][i][d][\s]*|[s][t][r][i][n][g][\s]*|[i][n][t][\s]*).*[(].*[)][\s]+[{]",
            0)
        print("sad", in1)
        #print("to",functionList);
        # save violation rule
        Groovy_Function.save_violation(
            "Groovy_CustomMetrics.AssertWithinFinallyBlock",
            Bookmark(file, 1, 1, -1, -1),
            additional_bookmarks=None)

        Print.info('Groovy  Violation  Saved for demo')

        self.validate(file)
        Print.info(str(functionList))
        return contentList