本申請涉及計算機技術領域,尤其涉及信息查詢方法及裝置。
背景技術:
在java等編程語言中提供了注解(annotation)的語言特性。注解通常聲明在包、類、字段、方法、局部變量、方法參數(shù)等程序元素的前面,用來對這些元素進行說明或注釋,并與這些元素信息關聯(lián)。因此,注解可以認為是一個接口,程序可以通過反射機制來獲取指定程序元素的注解,然后獲取注解所關聯(lián)的程序元素的信息,開發(fā)人員則可以利用注解跟蹤源代碼中的依賴性或執(zhí)行基本編譯時檢查代碼等。然而,相關技術中如objective-c等多種編程語言并沒有提供注解功能。
技術實現(xiàn)要素:
為克服相關技術中存在的問題,本申請?zhí)峁┝诵畔⒉樵兎椒把b置。
根據(jù)本申請實施例的第一方面,提供一種信息查詢方法,所述方法包括:
從源代碼中識別出元素的注解;其中,所述注解為所述源代碼中按預設協(xié)議編寫的代碼;
根據(jù)所述注解獲取所述元素的相關信息;
生成包含所述元素的相關信息的配置文件;
當接收到對所述元素的查詢請求時,通過所述配置文件查詢所述元素的相關信息。
根據(jù)本申請實施例的第二方面,提供一種信息查詢裝置,所述裝置包括:
注解識別模塊,用于從源代碼中識別出元素的注解;其中,所述注解為所述源代碼中按預設協(xié)議編寫的代碼;
信息獲取模塊,用于根據(jù)所述注解獲取所述元素的相關信息;
文件生成模塊,用于生成包含所述元素的相關信息的配置文件;
信息查詢模塊,用于當接收到對所述元素的查詢請求時,通過所述配置文件查詢所述元素的相關信息。
本申請的實施例提供的技術方案可以包括以下有益效果:
本申請實施例所提供的方案,可以在使用編程語言編寫程序的源代碼時,首先按照預設協(xié)議編寫用于對元素進行注解的注解代碼。后續(xù),利用預設協(xié)議,可以從源代碼中識別出所有注解,從而根據(jù)注解獲取到被注解的元素的相關信息。將每個注解所對應的元素的相關信息都寫入至配置文件中,則可以通過配置文件查詢到元素的相關信息,因此本申請實施例所提供的方案實現(xiàn)了利用注解查詢元素信息的功能,為開發(fā)人員提供了較多便利。
應當理解的是,以上的一般描述和后文的細節(jié)描述僅是示例性和解釋性的,并不能限制本申請。
附圖說明
此處的附圖被并入說明書中并構成本說明書的一部分,示出了符合本申請的實施例,并與說明書一起用于解釋本申請的原理。
圖1是本申請根據(jù)一示例性實施例示出的一種信息查詢方法的流程圖。
圖2是本申請根據(jù)一示例性實施例示出的一種終端的結構示意圖。
圖3是本申請根據(jù)一示例性實施例示出的一種信息查詢裝置的框圖。
具體實施方式
這里將詳細地對示例性實施例進行說明,其示例表示在附圖中。下面的描述涉及附圖時,除非另有表示,不同附圖中的相同數(shù)字表示相同或相似的要素。以下示例性實施例中所描述的實施方式并不代表與本申請相一致的所有實施方 式。相反,它們僅是與如所附權利要求書中所詳述的、本申請的一些方面相一致的裝置和方法的例子。
在本申請使用的術語是僅僅出于描述特定實施例的目的,而非旨在限制本申請。在本申請和所附權利要求書中所使用的單數(shù)形式的“一種”、“所述”和“該”也旨在包括多數(shù)形式,除非上下文清楚地表示其他含義。還應當理解,本文中使用的術語“和/或”是指并包含一個或多個相關聯(lián)的列出項目的任何或所有可能組合。
應當理解,盡管在本申請可能采用術語第一、第二、第三等來描述各種信息,但這些信息不應限于這些術語。這些術語僅用來將同一類型的信息彼此區(qū)分開。例如,在不脫離本申請范圍的情況下,第一信息也可以被稱為第二信息,類似地,第二信息也可以被稱為第一信息。取決于語境,如在此所使用的詞語“如果”可以被解釋成為“在……時”或“當……時”或“響應于確定”。
計算機程序(computerprogram),也稱為軟件(software),簡稱程序(program)是指一組指示計算機或其他具有信息處理能力裝置每一步動作的指令,通常用某種程序設計語言編寫,運行于某種目標體系結構上。源代碼即是指采用某種語言編寫的最原始程序的代碼。
本申請實施例所提供的方案,可以應用在objective-c等沒有提供注解能力的編程語言中,開發(fā)人員可以在使用此類編程語言編寫程序的源代碼時,首先按照預設協(xié)議編寫用于對元素進行注解的注解代碼。后續(xù),利用預設協(xié)議,可以從源代碼中識別出所有注解,從而根據(jù)注解獲取到被注解的元素的相關信息。將每個注解所對應的元素的相關信息都寫入至配置文件中,則可以通過配置文件查詢到元素的相關信息,因此本申請實施例所提供的方案實現(xiàn)了利用注解查詢元素信息的功能,為開發(fā)人員提供了較多便利。
如圖1所示,圖1是本申請根據(jù)一示例性實施例示出的一種信息查詢方法的流程圖,包括以下步驟101至104:
在步驟101中,從源代碼中識別出元素的注解;其中,所述注解為所述源代碼中按預設協(xié)議編寫的代碼。
在步驟102中,根據(jù)所述注解獲取所述元素的相關信息。
在步驟103中,生成包含所述元素的相關信息的配置文件。
在步驟104中,當接收到對所述元素的查詢請求時,通過所述配置文件查詢所述元素的相關信息。
其中,元素是指程序元素,可以包括包、類、字段、方法、局部變量或方法參數(shù)等。
當采用objective-c等沒有提供注解能力的編程語言編寫程序時,開發(fā)人員可以在編寫源代碼階段,按照預設協(xié)議編寫元素的注解。預設協(xié)議主要用于區(qū)分注解代碼與其他代碼,并且還可以用于在源代碼中,根據(jù)協(xié)議的具體規(guī)定識別出注解代碼。因此,預設協(xié)議的具體規(guī)定可以根據(jù)實際需要而設定,例如采用預先約定的特殊的標識、或者編寫在預先約定的特殊的位置、或者其他預先約定的語法規(guī)則等。
在一個可選的實現(xiàn)方式中,預設協(xié)議可以包括如下一種或多種協(xié)議:所述注解按注釋格式編寫、所述注解中包括預設的注解標識、所述注解編寫在所述元素的聲明之前或所述注解編寫在一行代碼中。在實際應用中,這幾種協(xié)議可以擇其一種實施,也可以選擇多種組合實施。
其中,注解按注釋格式編寫,可以使源代碼在編譯時,注解代碼不會參與到編譯中,即注解不會影響程序代碼的執(zhí)行,無論增加或刪除注解,代碼都始終如一地執(zhí)行。常見的編程語言中都包括注釋語法,注釋一般包括行注釋或塊注釋,通常采用符號“//”來編寫單行注釋,或者使用“/*”和“*/”來編寫大的注釋塊。
注解中包括預設的注解標識,因此可以根據(jù)注解標識從源代碼中快速地識別出注解代碼。注解標識可以靈活配置,例如可以采用特殊的字符表示注解代碼的開始和結束,則注解代碼的具體內容可以編寫在開始標識及結束標識之間,后續(xù)可以結合注釋符號、開始標識或結束標識等能快速地從源代碼識別出注解代碼。
注解編寫在所述元素的聲明之前,則后續(xù)在從源代碼識別注解時,由于注 解代碼后即是元素的聲明代碼,因此可以快速獲取到被注解的元素的名稱或其他相關信息。
注解都編寫在一行代碼中,可以提高從源代碼中識別出注釋代碼的效率。
在其他可選的實現(xiàn)方式中,預設協(xié)議還可以包括:在注解中編寫元素的屬性信息,注解中包括預設的用于標識屬性信息的屬性標識,則元素的相關信息可包括所述元素的屬性信息。利用該協(xié)議,開發(fā)人員在編寫注解時,可以將被注解的元素的屬性信息都編寫在注解代碼中,則后續(xù)在識別出注解后能快速便捷地獲取到元素的屬性信息。其中,注解代碼可以采用預先設定的屬性標識,被注解元素的屬性信息采用該屬性標識進行標記,則后續(xù)可以根據(jù)屬性標識快速地獲取到注解代碼中攜帶的屬性信息。
例如,以下述一段源代碼為例進行說明:
上述示例中,以采用objective-c語言編寫的一段源代碼為例,在該源代碼中第二行代碼@implementationasappdelegate表示聲明了一個名為asappdelegate的類,后面的幾行代碼表示編寫了該asappdelegate類的一些相關信息。
其中,第一行代碼//#pragmaannotion(param1:“classparam1”,param2:“classparam2”)即表示一個針對名為asappdelegate類的注解,asappdelegate類即被注解的元素。
上述例子的注解,所采用的協(xié)議包括:
注解編寫在注釋符號//之后。
注解的標識采用#pragmaannotation和括號,其中#pragmaannotation表示注解的開始標識,以右括號表示注解代碼的結束標識。
注解編寫在被注解元素:asappdelegate類的聲明之前。
整個注解編寫在一行代碼中。
注解中已編寫了元素的屬性信息:括號中的param1:“classparam1”,param2:“classparam2”表示該asappdelegate類的兩個參數(shù),其中一個是名為classparam1的參數(shù),另一個是名為classparam2的參數(shù)。該屬性信息的編寫采用括號作為屬性信息標記,被注解元素的屬性信息編寫在括號之間。
上述示例只示出了源代碼中asappdelegate類的其中一個注解,可以理解的是,每個元素的代碼中可以編寫多個注解。例如,仍以asappdelegate類的源代碼為例,以下示例中編寫了3個用于對asappdelegate類的一些相關信息進行標記的注解:
上述例子中的三個注解分別是:
//#pragmaannotation(type:“default”,param1:“valuehaha”,param2:“value2”)
//#pragmaannotation(param1:“classparam1”,param2:“classparam2”)
//#pragmaannotation(type:“default”,param1:“methodvalue1”,param2:“methodvalue2”)
根據(jù)上述對預設協(xié)議的規(guī)定,從源代碼中即可快速高效地識別出注解代碼。其中,在識別注解代碼時,不僅可以識別出注解代碼的具體內容,還可以結合注解所在位置的上下文環(huán)境,識別出更多有關被注解元素的相關信息。
在本申請實施例中,所述元素的相關信息還可包括源代碼文件名,所述源代碼文件名可以通過讀取編寫有所述注解的源代碼文件的名稱而獲得,通過獲取該源代碼文件名,開發(fā)人員可以快速地獲取到被注解元素所在的文件,為開發(fā)人員提供較多的便利。
所述元素的相關信息還可包括所述元素的名稱,所述元素的名稱在所述預設協(xié)議包括所述注解編寫在所述元素的聲明之前時,從所述注解所編寫的位置的下一行代碼中獲取得到。本申請實施例中,若預設協(xié)議中規(guī)定注解編寫在所述元素的聲明之前,由于元素的聲明中都寫有元素的名稱,則元素的名稱可以從所述注解所編寫的位置的下一行代碼中快速獲取得到。
具體的,注解代碼的識別可以是在源代碼編寫結束,且編譯之前進行。上述識別過程,可以根據(jù)預設協(xié)議的具體規(guī)定,采用腳本語言預先編寫相應的識別邏輯。在識別注解時調用該預先編寫的腳本文件掃描全部源代碼文件, 最終可識別出源代碼文件中的每個注解,并獲得被注解元素的相關信息??梢岳斫獾氖牵创a文件中可以包括一個或多個注解,并且,每個元素也可以對應多個注解,這些被注解元素的相關信息都可以寫入至同一個配置文件中。配置文件的具體格式可以根據(jù)實際的開發(fā)環(huán)境和開發(fā)需求而設定,例如可以是plist等格式的配置文件。
以下示出了配置文件中記載的被注解元素的一些相關信息。
上述示例中,第一行代碼“@../sources/asappdelegate.m”表示注解是從名為asappdelegate.m的源代碼文件中識別出來的。
后續(xù)的以“@{”開頭,及“},\”結束之間的代碼,即表示一個注解及其所對應的元素的相關信息。上述示例中包括了2個注解所對應的元素的相關信息。
上述示例中示出的2個注解中,其元素的classname都為asappdelegate,其表示上述2個注解都編寫在名為asappdelegate的類下,也即是2個注解都是asappdelegate類的相關信息。
上述示例僅以配置文件所記載的2個注解所對應的元素的相關信息為例進行說明,在實際應用中,配置文件中可以包括應用程序源代碼中所有注解所對應的信息。
在生成配置文件后,可以將配置文件添加到源代碼文件中進行編譯,源代碼文件中可以根據(jù)相關技術預先編寫查詢功能代碼,將源代碼編譯后能獲得應用程序,通過應用程序所提供的查詢功能,當接收到對所述被注解元素的查詢請求時,可以調用所述配置文件查詢所述被注解元素的相關信息。
具體的,所述調用所述配置文件查詢所述被注解元素的相關信息,包括:
獲取所述查詢請求中攜帶的查詢對象的字符串。
在配置文件中,利用字符串匹配方式查找出包含有所述字符串的被注解元素的相關信息。
例如,仍以上述配置文件的示例進行說明,當開發(fā)人員需要查詢有關asappdelegate類的相關信息時,可以輸入“asappdelegate”,根據(jù)字符串“asappdelegate”,采用字符串匹配的方法,可以從配置文件查詢到有2個注解所對應的元素的相關信息包含有該字符串“asappdelegate”,即可輸出上述示例的2個注解所對應的信息,從而實現(xiàn)在不支持注解功能的編程語言中提供信息查詢的能力。利用這些元素的相關信息,開發(fā)人員可以跟蹤源代碼中的依賴性或者檢查代碼等,因此可以為開發(fā)人員提供很多便利。
對應于上述的信息查詢方法,如圖2所示,是本申請根據(jù)一示例性實施 例示出的一種終端的結構示意圖。請參考圖2,在硬件層面,該終端包括處理器、內部總線、網(wǎng)絡接口、內存以及非易失性存儲器,當然還可能包括其他業(yè)務所需要的硬件。處理器從非易失性存儲器中讀取對應的計算機程序到內存中然后運行,在邏輯層面上形成數(shù)據(jù)業(yè)務處理裝置。當然,除了軟件實現(xiàn)方式之外,本申請并不排除其他實現(xiàn)方式,比如邏輯器件抑或軟硬件結合的方式等等,也就是說以下處理流程的執(zhí)行主體并不限定于各個邏輯單元,也可以是硬件或邏輯器件。
請參考圖3,在軟件實施方式中,該信息查詢裝置可以包括:注解識別模塊31、信息獲取模塊32、文件生成模塊33和信息查詢模塊34。其中:
注解識別模塊31,用于從源代碼中識別出元素的注解;其中,所述注解為所述源代碼中按預設協(xié)議編寫的代碼。
信息獲取模塊32,用于根據(jù)所述注解獲取所述元素的相關信息。
文件生成模塊33,用于生成包含所述元素的相關信息的配置文件。
信息查詢模塊34,用于當接收到對所述元素的查詢請求時,通過所述配置文件查詢所述元素的相關信息。
在一個可選的實現(xiàn)方式中,所述預設協(xié)議包括以下一種或多種協(xié)議:
所述注解按注釋格式編寫、所述注解中包括預設的注解標識、所述注解編寫在所述元素的聲明之前或所述注解編寫在一行代碼中。
在一個可選的實現(xiàn)方式中,所述預設協(xié)議還包括:所述注解中包括所述元素的屬性信息,所述注解中包括預設的屬性標識;
所述元素的相關信息包括所述元素的屬性信息。
在一個可選的實現(xiàn)方式中,所述元素的相關信息還包括源代碼文件名,所述源代碼文件名通過讀取編寫有所述注解的源代碼文件的名稱而獲得。
在一個可選的實現(xiàn)方式中,所述元素的相關信息還包括所述元素的名稱,所述元素的名稱在所述預設協(xié)議包括所述注解編寫在所述元素的聲明之前時,從所述注解所編寫的位置之后的下一行代碼中獲取得到。
在一個可選的實現(xiàn)方式中,所述信息查詢模塊24,包括:
字符串獲取子模塊(圖3未示出),用于獲取所述查詢請求中攜帶的字符串;
信息查詢子模塊(圖3未示出),用于在所述配置文件中,利用字符串匹配的方式查找出包含所述字符串的所述元素的相關信息。
上述裝置中各個模塊的功能和作用的實現(xiàn)過程具體詳見上述方法中對應步驟的實現(xiàn)過程,在此不再贅述。
對于裝置實施例而言,由于其基本對應于方法實施例,所以相關之處參見方法實施例的部分說明即可。以上所描述的裝置實施例僅僅是示意性的,其中所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個地方,或者也可以分布到多個網(wǎng)絡單元上??梢愿鶕?jù)實際的需要選擇其中的部分或者全部模塊來實現(xiàn)本申請方案的目的。本領域普通技術人員在不付出創(chuàng)造性勞動的情況下,即可以理解并實施。
本領域技術人員在考慮說明書及實踐這里申請的發(fā)明后,將容易想到本申請的其它實施方案。本申請旨在涵蓋本申請的任何變型、用途或者適應性變化,這些變型、用途或者適應性變化遵循本申請的一般性原理并包括本申請未申請的本技術領域中的公知常識或慣用技術手段。說明書和實施例僅被視為示例性的,本申請的真正范圍和精神由下面的權利要求指出。
應當理解的是,本申請并不局限于上面已經(jīng)描述并在附圖中示出的精確結構,并且可以在不脫離其范圍進行各種修改和改變。本申請的范圍僅由所附的權利要求來限制。
以上所述僅為本申請的較佳實施例而已,并不用以限制本申請,凡在本申請的精神和原則之內,所做的任何修改、等同替換、改進等,均應包含在本申請保護的范圍之內。