JP6568605B2 - 大規模ソースコードリポジトリにおける自動インポートおよびディペンデンシー - Google Patents

大規模ソースコードリポジトリにおける自動インポートおよびディペンデンシー Download PDF

Info

Publication number
JP6568605B2
JP6568605B2 JP2017564873A JP2017564873A JP6568605B2 JP 6568605 B2 JP6568605 B2 JP 6568605B2 JP 2017564873 A JP2017564873 A JP 2017564873A JP 2017564873 A JP2017564873 A JP 2017564873A JP 6568605 B2 JP6568605 B2 JP 6568605B2
Authority
JP
Japan
Prior art keywords
qualified
name
list
source code
names
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2017564873A
Other languages
English (en)
Other versions
JP2018519592A (ja
JP2018519592A5 (ja
Inventor
グルシュコ,カルミ
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Google LLC
Original Assignee
Google LLC
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Google LLC filed Critical Google LLC
Publication of JP2018519592A publication Critical patent/JP2018519592A/ja
Publication of JP2018519592A5 publication Critical patent/JP2018519592A5/ja
Application granted granted Critical
Publication of JP6568605B2 publication Critical patent/JP6568605B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/33Intelligent editors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • G06F8/433Dependency analysis; Data or control flow analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/16File or folder operations, e.g. details of user interfaces specifically adapted to file systems
    • G06F16/164File meta data generation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/01Input arrangements or combined input and output arrangements for interaction between user and computer
    • G06F3/048Interaction techniques based on graphical user interfaces [GUI]
    • G06F3/0481Interaction techniques based on graphical user interfaces [GUI] based on specific properties of the displayed interaction object or a metaphor-based environment, e.g. interaction with desktop elements like windows or icons, or assisted by a cursor's changing behaviour or appearance
    • G06F3/0482Interaction with lists of selectable items, e.g. menus
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/74Reverse engineering; Extracting design information from source code

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Stored Programmes (AREA)

Description

背景
開発者は、外部コードまたはライブラリを組み込んだ複雑なソフトウェアアプリケーションをビルドすることが多い。たとえば、開発者は、人のリストを自分のアプリケーションに含めようとすることがある。開発者は、自分自身のリストオブジェクトを定義する代わりに、外部パッケージからリストクラスを含めることがある。図1に示すようなこの例では、開発者は、自分のコード内の標準ライブラリから、「java.util.List」などのリストを含めることがある。「java.util.List」は、java.utilパッケージを通じて公的に利用可能な、順序付けられたコレクションのクラスである。リストが開発者のソースコードファイルにインポートされると、開発者は、リストがインスタンス化されるまたは使用される場合はいつでも、完全修飾名「java.util.List」を用いる必要はなく、リストを単に単純名「List」で参照することが可能になる。たとえば、図1の3行目で、コードは、修飾名「java.util.List」ではなく、ただ単に単純名「List」を参照する。
パッケージ、ライブラリ、または修飾名を定義する外部コードをソースコードにインポートするプロセスは、標準統合開発環境(IDEs: integrated development environments)を用いた小規模なコードベースにとっては簡単であり得るが、大規模なコードベースは、標準的なIDEsが修飾名と呼ばれる適切な完全名、またはディペンデンシーに関して適切なビルドシステム構築物を効率的に探索するには、あまりに多くの外部ディペンデンシーを有している。
従来のシステムは、全コードベースを眺めて適切なパッケージ、ライブラリ、または他の外部コードを決定しようとすることによって、リアルタイムで修飾名を探索しようとする。このプロセスは時間がかかる。大量のソースコードをこのアプローチを用いて妥当な時間で処理することはどうしてもできない。
発明者によって認識されているように、ソースコードに存在する単純名の参照および修飾名を設けるビルドシステムディペンデンシーに関して適切なパッケージ、ライブラリ、または外部コードをインポートするために、修飾名の候補を素早く探索することが望ましいであろう。
概要
本明細書は、ソースコードファイル、たとえばJava(登録商標)言語のソースコードファイル内の少なくとも1つの単純名の修飾名の候補を探索することに関する技術を説明する。
一般に、本明細書で説明される主題の一態様は、ソースコードファイル内の少なくとも1つの単純名の修飾名の候補を探索するためのシステムにおいて具体化できる。システムの例は、1つ以上の処理装置と、方法の例を実現する命令を格納する1つ以上の記憶装置とを備え得る。方法の例は、対応する修飾名が求められている少なくとも1つの単純名を有するソースコードファイルを受信するステップと、ソースコードファイルをパースしてファイル内の単純名およびファイル内の修飾名を決定するステップと、対応する修飾名が必要とされる少なくとも1つの単純名に関して、ソースコードグラフを検索して少なくとも1つの単純名に対応する、可能性のある修飾名を検索するステップと、ソースコードグラフから可能性のある候補修飾名のリストを受信すると、リストを出力するステップとを含み得る。
これらおよび他の実施形態は、以下の特徴のうちの1つ以上を任意に含み得る。可能性のある候補修飾名のリストを、リストの出力に先立って、付加情報でフィルタリングまたはエンリッチメントし得る。修飾名が選択されると、特定の修飾名に関するビルドディペンデンシーおよびビルドターゲットを決定し得る。リストの出力に先立って特定の種類の修飾名が他のソースコードファイルによって使用された回数に基づいて、可能性のある候補修飾名のリストのフィルタリングを行ない得る。特定の修飾名がソースコードリポジトリの他の部分において使用された頻度に基づいて、リストのランク付けを行ない得る。リストが1つの可能性のある修飾名しか含まない場合、ユーザの対話なしで当該名前を修飾名として自動的に選択し得る。ユーザが可能性のある候補修飾名のリストから修飾名の選択を受信するように、インターフェースを提供し得る。フィルタリングは、修飾名に対応する可能性のある単純名が現在参照されているソースコードファイルから修飾名パッケージが可視であるかどうかを判断することと、修飾名パッケージがソースコードファイルから可視であるという判断に応じて、修飾名パッケージの名前を可能性のある候補修飾名として設けることとを含み得る。フィルタリングは、ソースコードファイルのビルドのために、時間またはリソースの増加を含む、修飾名パッケージがビルドプロセスに追加し得るコンプリケーション量を判断することと、修飾名パッケージがビルドプロセスに追加したコンプリケーション量が適切な量であるという判断に応じて、修飾名パッケージの名前を可能性のある候補修飾名のリストに追加することとを含み得る。
修飾名と単純名とを含むソースコードの例を示す図である。 ソースコードファイル内の単純名の修飾された名前を決定するシステムの例を示すブロック図である。 コンピューティングデバイスの例を示すブロック図である。 ソフトウェアパッケージのホスティングおよびパブリッシングのために配置 されたコンピュータの例を示すハイレベルブロック図である。
詳細な説明
ある実施形態例によると、特定のソースコードリポジトリまたは複数のリポジトリについて全てのソースコードを示す分散システムには大規模グラフが存在する場合がある。ソースコードがインデックス化されてグラフを作成し得る。いくつかの実施態様では、このグラフは、グラフが個別の開発者のマシンで実行されず同時に複数の開発者によってアクセス可能になるように、開発者によってリモートアクセスされる1台または複数のマシン上に存在し得る。最もシンプルな形式において、グラフは2つの表であり得、1つの表は単純名を修飾名にマッピングし、もう1つの表は修飾名をビルドシステムディペンデンシーにマッピングする。分散システムまたはクラウド環境でグラフを作成することおよびグラフにアクセスすることによって、開発者の間で計算のキャッシュおよび再利用が可能である。他の実施形態では、グラフは開発者自身のマシン上に存在し得る。
図2に示すように、ソースコードファイルの例(201)には、3行目の「Bar」と5行目の「Foo」という2つの単純名がある。「Bar」の修飾名は、1行目の「com.sourcecode.Bar」としてコードに設けられている。しかしながら、「Foo」の修飾名は設けられていない。
システムのある例では、開発者のマシンで実行される統合開発環境(IDE)が、特定のソースコードファイルで使用される単純名のリストを設け得るパーサ(203)を有し得る。また、パーサ(203)は、ソースコードファイル内の修飾名のリストを設け得る。図2に示すソースコードファイルの場合、単純名のリストは[Foo, Bar]となり得る。修飾名のリストは、[com.sourcecode.Bar]となり得る。図示するように、単純名に対応する修飾名は設けなくてもよい。修飾名、および対応した修飾名が設けられていないソースコード内の単純名の修飾名を設けるビルドシステム構築物を探索するために、ソースコードグラフ(205)に、単純名の修飾名への可能性のある拡張についてクエリし得る。示された例では、ソースコードグラフ(205)に、「Foo」の修飾名および「Foo」と関連付けられたビルドディペンデンシーについてクエリし得る。この例で修飾名が「Bar」などのインポートとして設けられる場合、ビルドシステムディペンデンシーは存在するかもしれず、または存在しないかもしれない。したがって、完全修飾名がソースコードに設けられている場合であっても、ソースコードグラフ(205)にビルドシステムディペンデンシーについてクエリすることもある。
たとえば、「Foo」を探している場合、ソースコードグラフ(205)の検索は、名前「Foo」を含むクラスおよびビルドシステムアーティファクトに一致し得る。いくつかの実施形態では、結果は、単純名がコードにおいて使用される態様によってフィルタリングされる。たとえば、仮に「Foo」の特定の方法が呼び出されると、その方法を含まない完了に関する完全修飾の可能性のある候補が、可能性のある候補のリストからフィルタリングされ得る。その後、クエリは、インポートおよびビルドシステムディペンデンシーのリストを戻す。当業者によって理解されるように、このリストの順序付けおよびフィルタリングを行なうさまざまな方法が存在する。
ソースコードグラフ(205)は、ファイルで探索された単純名に関するビルドシステムディペンデンシーなどの情報を得るようにトラバースされ得る。たとえば、ソースコードグラフは、ソースコードがオブジェクトファイルにコンパイル可能になるように、ディペンデンシーのターゲットを単純名「Foo」の修飾名に設けることが可能である。
ソースコードグラフ(205)をトラバースすることによって得られる所与の単純名の可能性のある修飾名のリストを、他のデータでエンリッチし、さらにフィルタリングすることが可能である(213)。エンリッチメントデータは、(ランキングを可能にするために)修飾名がリポジトリにおいて使用される回数と、修飾名が推奨しないようにマークされたかどうか、仮にマークされた場合は、何という修飾名を代わりに使用するべきかと、修飾名パッケージが現在参照されているソースコードから可視かどうか(いくつかのクラスを、意図的に特定のソフトウェアパッケージに限定し得る)と、ソースコードのビルドのために、この修飾名が、時間および/またはリソースの増加を含む、ビルドプロセスに追加可能なコンプリケーションの量とを含み得る。リストは、たとえば、特定の種類の修飾名が他のソースコードファイルによって使用された回数に基づいてフィルタリング可能である。フィルタリングは、すべての非可視クラスを除去すること、または、コード内の特定のコンテキスト内に適合しないであろうすべてのクラスを除去することも含み得る。たとえば、「Foo」は、ソースコードファイル内の特定の方法を呼び出し得るため、この方法を有さないすべての一致する「Foo」ライブラリは、可能性のある候補リストからフィルタリングされ得る。完了およびディペンデンシーの可能性のある候補のリストを検討のためにユーザ(215)に戻す場合、システムの例が、特定の修飾名がソースコードリポジトリの他の部分において他の開発者によって使用された頻度に基づいて、戻された結果のランク付けを行ない得る。
いくつかの実施形態では、頻繁に使用された修飾名が、開発者のソースコードファイルにおいて開発者によって最も使用される可能性のある名前である。また、他のランキングのうち、名前は、それらの使用が考慮されているソースコードファイルにとって可視であるかどうか、名前が示すクラスがソースコードファイルにおいて使用されている方法を有するかどうか、および、クラスが推奨しないものであるかどうかによって、ランク付けし得る。推奨しないクラスは、名前のランキングにおいて降格可能である。その後、ユーザ(215)に、コード内の特定の単純名の参照のために可能性のある修飾名候補の、エンリッチメントおよびフィルタリングされたリストを見せることが可能であり、ユーザは、単純名をつけられたオブジェクトに関する最も適切なパッケージ、ライブラリ、または他の外部コードソースを選択し得る。ユーザ(215)が修飾名の候補からソースコード内の単純名の適切な修飾名を選択すると、特定の修飾名に関するビルドルールディペンデンシーおよびビルドターゲットを操作するために、選択された修飾名がソースグラフ(205)に再び送信されてビルドシステムディペンデンシーに関する情報を取得し得る。いくつかの実施形態では、クエリが最も一致する可能性のあるインポートおよびビルドシステムディペンデンシーを戻すことしか行なわないように、完了およびビルドシステムディペンデンシーの可能性のある候補のリストをフィルタリングし得る。
図2に示すように、固有の修飾名(207、209)がソースコードグラフ(205)で探索されると、または、ファイル自体からパースされて(203)ソースコードファイル(201)において使用される単純名と一致すると、これらの修飾名をファイル(201)内に追加/インポートし得る。ソースグラフは、どのクラス/ビルドディペンデンシーが最も頻繁に使用されるかを判断するために、周期的に再作成可能である。
図3に示すような方法の例が、対応する修飾名が探索されるべき(または、要求される)少なくとも1つの単純名を有するソースコードファイルの受信と共に開始する(301)。その後、ソースコードファイルはパースされて、ファイル内で使用される単純名のリストおよびファイル内のすべての修飾名の別のリストを探索し得る(303)。対応する修飾名が探索されるべき少なくとも1つの単純名に関して、すべてのソースコードのグラフを検索して単純名の可能性のある候補修飾名を探索可能である(305)。いくつかの実施形態では、名前の候補リストを付加情報でフィルタリングまたはエンリッチメントし得る。このリストを、ユーザが所与の単純名の適切な修飾名を選択するためにユーザに提供し得る(309)。いくつかの実施形態では、1つの候補修飾名しかない場合、ユーザは修飾名を選択する必要がないこともあり、その修飾名が自動的に選択され得る。他の実施形態では、1つの候補修飾名しかない場合、ユーザは修飾名が単純名に適切に一致するものだと確かめるだけでよい。修飾名が選択されると、方法の例が特定の修飾名に関するビルドディペンデンシーおよびビルドターゲットを決定し得る。ソースコードファイル内の単純名に一致する修飾名を、ソースファイルに追加し得る。その後、ソースコードグラフは再作成されてもよく、単純名/修飾名/ビルドディペンデンシー頻度に関する情報を今後の分析において使用して、修飾名およびビルドディペンデンシーを探索可能である。
図4は、ソフトウェアパッケージのホスティングおよびパブリッシングのために配置されたコンピュータの例(400)を示すハイレベルブロック図である。きわめて基本的な構成(401)において、コンピューティングデバイス(400)は、1つ以上のプロセッサ(410)とシステムメモリ(420)とを備えることが典型的である。メモリバス(430)を、プロセッサ(410)とシステムメモリ(420)との間の通信のために使用できる。
所望の構成に応じて、プロセッサ(410)は、マイクロプロセッサ(μP)、マイクロコントローラ(μC)、デジタル信号プロセッサ(DSP)、またはこれらの任意の組合せを含む任意の種類であり得るが、これらに限定されない。プロセッサ(410)は、レベル1キャッシュ(411)およびレベル2キャッシュ(412)などの1つ以上のレベルのキャッシング、プロセッサコア(413)、およびレジスタ(414)を備え得る。プロセッサコア(413)は、算術論理演算装置(ALU)、浮動小数点演算ユニット(FPU)、デジタル信号処理コア(DSP Core)、またはそれらの任意の組合せを含み得る。メモリコントローラ(416)もプロセッサ(410)と共に使用可能であり、またはいくつかの実施態様では、メモリコントローラ(415)はプロセッサ(410)の内部部品であり得る。
所望の構成に応じて、システムメモリ(420)は、揮発性メモリ(RAMなど)、不揮発性メモリ(ROM、フラッシュメモリなど)、またはこれらの任意の組合せを含むいかなる種類でもよいが、これらに限定されない。システムメモリ(420)は、オペレーティングシステム(421)、1つ以上のアプリケーション(422)、およびプログラムデータ(424)を含むことが典型的である。アプリケーション(422)は、ソフトウェアパッケージのホスティングおよびパブリッシングのための方法を含み得る。プログラムデータ(424)は、1つ以上の処理装置によって実行されると、ソフトウェアパッケージのホスティングおよびパブリッシングのための方法(423)を実行する命令の格納を含む。いくつかの実施形態では、アプリケーション(422)をオペレーティングシステム(421)上でプログラムデータ(424)と共に動作するように配置可能である。
コンピューティングデバイス(400)は、付加的な特徴または機能、ならびに基本構成(401)と任意の必要とされるデバイスおよびインターフェースとの間の通信を容易にするように、付加的なインターフェースを有し得る。
システムメモリ(420)は、コンピュータ記憶媒体の例である。コンピュータ記憶媒体は、RAM、ROM、EEPROM、フラッシュメモリもしくは他のメモリ技術、CD−ROM、デジタル多用途ディスク(DVD)もしくは他の光学記憶装置、磁気カセット、磁気テープ、磁気ディスク記憶装置、もしくは他の磁気記憶装置、または所望の情報の格納に使用可能でありコンピューティングデバイス400によってアクセス可能な他の媒体を含むが、これらに限定されない。そのようないかなるコンピュータ記憶媒体も、デバイス(400)の一部であり得る。
コンピューティングデバイス(400)は、上述の機能のうちのいずれかを含む携帯電話、スマートフォン、携帯情報端末(PDA)、パーソナルメディアプレーヤデバイス、タブレット型コンピュータ(タブレット)、無線ウェブウォッチ(web-watch)デバイス、パーソナルヘッドセットデバイス、アプリケーション向けデバイス、またはハイブリッドデバイスなどの、スモールフォームファクタ携帯用(モバイル)電子デバイスの一部として実現可能である。また、コンピューティングデバイス(400)は、ラップトップコンピュータ構成とラップトップコンピュータでない構成との双方を備えるパーソナルコンピュータとして実現可能である。
上記の詳細な説明は、ブロック図、フローチャートおよび/または例の使用を介してデバイスおよび/またはプロセスのさまざまな実施形態を記載した。そのようなブロック図、フローチャートおよび/または例が1つ以上の機能および/またはオペレーションを含んでいる限りにおいて、当業者は、そのようなブロック図、フローチャートまたは例における各機能および/またはオペレーションは、広範囲のハードウェア、ソフトウェア、ファームウェアまたはそれの実質的に任意の組合せによって個々におよび/または集合的に実現され得るということを理解するであろう。一実施形態では、本明細書において記載される主題のいくつかの部分は、特定用途向け集積回路(ASIC: Application Specific Integrated Circuit)、フィールドプログラマブルゲートアレイ(FPGA: Field Programmable Gate Array)、デジタル信号プロセッサ(DSP: digital signal processor)、他の集積フォーマットを介して、またはウェブサービスとして実現され得る。しかしながら、当業者は、本明細書において開示される実施形態のいくつかの局面が、全体的または部分的に、1つ以上のコンピュータ上で動作する1つ以上のコンピュータプログラムとして、1つ以上のプロセッサ上で動作する1つ以上のプログラムとして、ファームウェアとして、または、それの実質的に任意の組合せとして、集積回路において均等に実現され得るということと、回路を設計すること、ならびに/または、ソフトウェアおよび/もしくはファームウェアのためのコードを記述することがこの開示を考慮して当業者の技能の範囲内であるということとを認識するであろう。加えて、当業者は、本明細書において記載される主題のメカニズムは、さまざまな形態のプログラムプロダクトとして配布可能であり、この配布を実際に行なうために使用される特定のタイプの非一時的な信号担持媒体にかかわらず、本明細書において記載される主題の例示的な実施形態が適用されるということを認識するであろう。非一時的な信号担持媒体の例は、フロッピーディスク(登録商標)、ハードディスクドライブ、コンパクトディスク(CD)、デジタルビデオディスク(DVD)、デジタルテープ、コンピュータメモリなどといった記録可能なタイプの媒体と、(たとえば光ファイバケーブル、導波路、有線通信リンク、無線通信リンクなどといった)デジタルおよび/またはアナログ通信媒体のような伝送タイプの媒体とを含むが、これらに限定されない。
実質的に本明細書における任意の複数および/または単数の用語の使用に関しては、当業者は、必要に応じて、複数から単数におよび/または単数から複数に、文脈および/または用途に合わせて変更可能である。さまざまな単数/複数の並べ替えは、理解しやすいように本明細書では明白に説明可能である。
このように、主題の特定の実施形態について説明が行なわれた。他の実施形態は、以下の特許請求の範囲内にある。いくつかの場合において、請求項において記載される動作は、異なる順序で実行可能であり、なお望ましい結果を達成可能である。加えて、添付の図において示されるプロセスは、望ましい結果を達成するために、示された特定の順序または連続した順序を必ずしも必要としない。特定の実施態様において、マルチタスキングおよび並列処理が有利であり得る。

Claims (13)

  1. コンパイルすべきソースコードファイル内の少なくとも1つの単純名の修飾名の候補を探索するための、コンピュータによって実現される方法であって、
    コンパイルすべきソースコードファイルを受信するステップを備え、前記ソースコードファイルは、対応する修飾名がコンパイラによって必要とされる少なくとも1つの単純名を含み、前記方法は、
    前記ソースコードファイルをパースして前記ソースコードファイル内の前記単純名および前記修飾名を決定するステップと、
    対応する修飾名が必要とされる前記少なくとも1つの単純名に関して、ソースコードグラフを検索して前記少なくとも1つの単純名に対応する、可能性のある候補修飾名を探索するステップと、
    前記ソースコードグラフから可能性のある候補修飾名のリストを受信すると、追加情報を有する、前記可能性のある候補修飾名のリストのエンリッチメントを行なうステップとを備え、前記可能性のある候補修飾名のリストのエンリッチメントを行なうステップは、 前記可能性のある候補修飾名のリストに含まれる、可能性のある候補修飾名に対応する修飾名パッケージがビルドプロセスに追加する前記ソースコードをビルドする時間の増加を判断することと、
    前記修飾名パッケージの名前を前記可能性のある候補修飾名のリストに追加することと、
    前記リストを出力することとを含み、前記方法は、
    修飾名が前記可能性のある候補修飾名のリストから選択されると、特定の修飾名に関するビルドディペンデンシーおよびビルドターゲットを決定するステップと、
    前記決定されたビルドディペンデンシーおよびビルドターゲットに基づいて前記ソースコードをコンパイルするステップと、
    を備える、方法。
  2. 前記リストのエンリッチメントを行なうステップは、前記リストの出力に先立って特定の種類の可能性のある候補修飾名が他のソースコードファイルによって使用された回数を含むように前記リストのエンリッチメントを行なうことを含む、請求項1に記載のコンピュータによって実現される方法。
  3. 前記リストのエンリッチメントを行なうステップは、特定の可能性のある候補修飾名がソースコードリポジトリの他の部分において使用された頻度に基づいて前記リストのランク付けを行なうことを含む、請求項1に記載のコンピュータによって実現される方法。
  4. 前記リストが1つの可能性のある修飾名しか含まない場合、ユーザの対話なしで前記修飾名を自動的に選択するステップをさらに備える、請求項1〜3のいずれかに記載のコンピュータによって実現される方法。
  5. インターフェースを提供して前記可能性のある候補修飾名のリストから修飾名の選択を受信するステップをさらに備える、請求項1〜4のいずれかに記載のコンピュータによって実現される方法。
  6. 前記リストのエンリッチメントを行なうステップは、
    修飾名パッケージが、前記修飾名パッケージに対応する可能性のある単純名が現在参照されている前記ソースコードファイルから可視であるかどうかを判断することと、
    前記修飾名パッケージが前記ソースコードファイルから可視であるという判断に応じて、前記修飾名パッケージの名前を可能性のある候補修飾名として設けることと、
    を含む、請求項1〜5のいずれかに記載のコンピュータによって実現される方法。
  7. コンパイルすべきソースコードファイル内の少なくとも1つの単純名の修飾名の候補を探索するためのシステムであって、
    1つ以上の処理装置と、
    複数の命令を格納する1つ以上の記憶装置とを備え、前記複数の命令は、前記1つ以上の処理装置によって実行されると、前記1つ以上の処理装置に、
    コンパイルすべきソースコードファイルを受信することを行なわせ、前記ソースコードファイルは対応する修飾名がコンパイラによって必要とされる少なくとも1つの単純名を含み、前記複数の命令は、さらに、前記1つ以上の処理装置によって実行されると、前記1つ以上の処理装置に、
    前記ソースコードファイルをパースして前記ソースコードファイル内の前記単純名および修飾名を決定することと、
    対応する修飾名が必要とされる前記少なくとも1つの単純名に関して、ソースコードグラフを検索して前記少なくとも1つの単純名に対応する、可能性のある修飾名を探索することと、
    前記ソースコードグラフから可能性のある候補修飾名のリストを受信すると、追加情報を有する、可能性のある候補修飾名のリストのエンリッチメントを行なうこととを備え、前記可能性のある候補修飾名のリストのエンリッチメントを行なうことは、
    前記可能性のある候補修飾名のリストに含まれる、可能性のある候補修飾名に対応する修飾名パッケージがビルドプロセスに追加する前記ソースコードをビルドする時間の増加を判断することと、
    前記修飾名パッケージの名前を前記可能性のある候補修飾名のリストに追加することと、
    前記リストを出力することと、
    修飾名が前記可能性のある候補修飾名のリストから選択されると、特定の修飾名に関するビルドディペンデンシーおよびビルドターゲットを決定することと、
    前記決定されたビルドディペンデンシーおよびビルドターゲットに基づいて前記ソースコードをコンパイルすることと、
    を行なわせる、システム。
  8. 前記リストのエンリッチメントを行なうことは、前記リストの出力に先立って特定の種類の可能性のある候補修飾名が他のソースコードファイルによって使用された回数を含むように前記リストのエンリッチメントを行なうことを含む、請求項7に記載のシステム。
  9. 前記リストのエンリッチメントを行なうことは、特定の可能性のある候補修飾名がソースコードリポジトリの他の部分において使用された頻度に基づいて前記リストのランク付けを行なうことを含む、請求項7に記載のシステム。
  10. 前記リストが1つの可能性のある修飾名しか含まない場合、ユーザの対話なしで前記修飾名を自動的に選択することをさらに備える、請求項7〜9のいずれかに記載のシステム。
  11. インターフェースを提供して前記可能性のある候補修飾名のリストから修飾名の選択を受信することをさらに備える、請求項7〜10のいずれかに記載のシステム。
  12. 前記リストのエンリッチメントを行なうことは、
    修飾名パッケージが、前記修飾名パッケージに対応する可能性のある単純名が現在参照されている前記ソースコードファイルから可視であるかどうかを判断することと、
    前記修飾名パッケージが前記ソースコードファイルから可視であるという判断に応じて、前記修飾名パッケージの名前を可能性のある候補修飾名として設けることと、を含む、請求項7〜11のいずれかに記載のシステム。
  13. コンピュータに請求項1〜6のいずれか1項に記載の方法を実行させるプログラム。
JP2017564873A 2015-07-10 2016-06-27 大規模ソースコードリポジトリにおける自動インポートおよびディペンデンシー Active JP6568605B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/796,695 2015-07-10
US14/796,695 US10120679B2 (en) 2015-07-10 2015-07-10 Automatic imports and dependencies in large-scale source code repositories
PCT/US2016/039561 WO2017011176A1 (en) 2015-07-10 2016-06-27 Automatic imports and dependencies in large-scale source code repositories

Publications (3)

Publication Number Publication Date
JP2018519592A JP2018519592A (ja) 2018-07-19
JP2018519592A5 JP2018519592A5 (ja) 2019-06-27
JP6568605B2 true JP6568605B2 (ja) 2019-08-28

Family

ID=56360528

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2017564873A Active JP6568605B2 (ja) 2015-07-10 2016-06-27 大規模ソースコードリポジトリにおける自動インポートおよびディペンデンシー

Country Status (8)

Country Link
US (1) US10120679B2 (ja)
EP (1) EP3320430B1 (ja)
JP (1) JP6568605B2 (ja)
KR (1) KR101990603B1 (ja)
CN (1) CN107810474B (ja)
DE (2) DE202016008044U1 (ja)
GB (1) GB2556481A (ja)
WO (1) WO2017011176A1 (ja)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10437568B1 (en) * 2017-05-18 2019-10-08 Palantir Technologies Inc. Real-time rendering based on efficient device and server processing of content updates
US10671383B2 (en) * 2017-12-04 2020-06-02 Oracle International Corporation Inferring code deprecation from module deprecation
US11062385B2 (en) * 2018-08-21 2021-07-13 International Business Machines Corporation Providing code offerings inside code

Family Cites Families (24)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8365153B2 (en) * 2007-10-26 2013-01-29 Qualcomm Incorporated Server-based code compilation
US9424339B2 (en) * 2008-08-15 2016-08-23 Athena A. Smyros Systems and methods utilizing a search engine
US20100146481A1 (en) * 2008-12-09 2010-06-10 Microsoft Corporation Developing applications at runtime
US8364696B2 (en) * 2009-01-09 2013-01-29 Microsoft Corporation Efficient incremental parsing of context sensitive programming languages
US10175848B2 (en) * 2009-02-09 2019-01-08 Nokia Technologies Oy Displaying a display portion including an icon enabling an item to be added to a list
US8352913B2 (en) 2009-08-07 2013-01-08 Adobe Systems Incorporated Generating and resolving component names in an integrated development environment
DE102009059939A1 (de) * 2009-12-22 2011-06-30 Giesecke & Devrient GmbH, 81677 Verfahren zum Komprimieren von Bezeichnern
US9298427B2 (en) * 2010-01-06 2016-03-29 Microsoft Technology Licensing, Llc. Creating inferred symbols from code usage
US20110296386A1 (en) * 2010-05-28 2011-12-01 Salesforce.Com, Inc. Methods and Systems for Validating Changes Submitted to a Source Control System
US20110302565A1 (en) * 2010-06-07 2011-12-08 Ferris Michael S Implicit workspace dependencies
US8635204B1 (en) * 2010-07-30 2014-01-21 Accenture Global Services Limited Mining application repositories
CN101968736A (zh) * 2010-09-13 2011-02-09 杭州元睿信息技术有限公司 一种应用于Java到C++语言程序翻译中外部引用的翻译方法
US8584079B2 (en) * 2010-12-16 2013-11-12 Sap Portals Israel Ltd Quality on submit process
US20130326479A1 (en) * 2012-06-01 2013-12-05 Qnx Software Systems Limited System and method for tracking compliance information for a build-system product
WO2014041561A2 (en) * 2012-08-31 2014-03-20 Iappsecure Solutions Pvt. Ltd. A system for analyzing applications accurately for finding security and quality issues
US20140201709A1 (en) * 2013-01-15 2014-07-17 Martin Carl Euerle JavaScript™ Deployment Build Tool for software code that uses an object literal to define meta data and system code.
US8972975B1 (en) * 2013-04-01 2015-03-03 Google Inc. Bounded installation time optimization of applications
US9244658B2 (en) * 2013-06-04 2016-01-26 Microsoft Technology Licensing, Llc Multi-step auto-completion model for software development environments
US9244679B1 (en) * 2013-09-12 2016-01-26 Symantec Corporation Systems and methods for automatically identifying changes in deliverable files
CN105335137B (zh) * 2014-07-23 2019-01-18 国际商业机器公司 用于处理源文件的方法和装置
US10210211B2 (en) * 2014-08-26 2019-02-19 Codota Dot Com Ltd. Code searching and ranking
US20160117154A1 (en) * 2014-10-23 2016-04-28 Telefonaktiebolaget L M Ericsson (Publ) Automated software include graph and build environment analysis and optimization in compiled language
US20160196204A1 (en) * 2015-01-04 2016-07-07 International Business Machines Corporation Smart Validated Code Searching System
US9612821B2 (en) * 2015-07-02 2017-04-04 International Business Machines Corporation Predicting the success of a continuous software deployment pipeline

Also Published As

Publication number Publication date
EP3320430B1 (en) 2022-05-11
GB2556481A (en) 2018-05-30
US10120679B2 (en) 2018-11-06
DE202016008044U1 (de) 2017-01-27
GB201720895D0 (en) 2018-01-31
EP3320430A1 (en) 2018-05-16
CN107810474B (zh) 2020-12-29
CN107810474A (zh) 2018-03-16
JP2018519592A (ja) 2018-07-19
KR101990603B1 (ko) 2019-06-18
WO2017011176A1 (en) 2017-01-19
DE112016003130T5 (de) 2018-03-22
US20170010888A1 (en) 2017-01-12
KR20180008709A (ko) 2018-01-24

Similar Documents

Publication Publication Date Title
JP6349395B2 (ja) コールパスファインダ
US8056047B2 (en) System and method for managing resources using a compositional programming model
JP7096762B2 (ja) コントロールを使用して汎用プログラムを構成する技法
Price C# 8.0 and. NET Core 3.0–Modern Cross-Platform Development: Build applications with C#,. NET Core, Entity Framework Core, ASP. NET Core, and ML. NET using Visual Studio Code
JP6568605B2 (ja) 大規模ソースコードリポジトリにおける自動インポートおよびディペンデンシー
Chaffer et al. Jquery reference guide: a comprehensive exploration of the popular javascript library
Guihot Pro Android apps performance optimization
US20150081690A1 (en) Network sourced enrichment and categorization of media content
CN107391528B (zh) 前端组件依赖信息搜索方法及设备
Libes Obfuscated C and other mysteries
US20140324839A1 (en) Determining candidate scripts from a catalog of scripts
Kumar Apache Solr search patterns
WO2019128317A1 (zh) 物品推送方法、装置及服务器、计算设备及存储介质
RU2016147085A (ru) Осуществление доступа к семантическому контенту в системе разработки
US20150178075A1 (en) Enhancing understandability of code using code clones
JP2018519592A5 (ja)
CN105426541B (zh) 一种通用数据的存储方法和装置
US20130067338A1 (en) Dynamic navigation region based on site usage
Lång et al. Parallel graph-based stateless model checking
JP2018045619A (ja) 解析プログラム、解析方法、及び解析装置
Weiher iOS and macOS Performance Tuning: Cocoa, Cocoa Touch, Objective-C, and Swift
Li et al. CSlicerCloud: a web-based semantic history slicing framework
Doglio Mastering Python High Performance
US10620922B2 (en) Compiler platform for test method
JP6926921B2 (ja) コンパイルプログラム、コンパイル方法及び並列処理装置

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20180611

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20180611

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20190426

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20190524

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20190604

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20190704

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20190802

R150 Certificate of patent or registration of utility model

Ref document number: 6568605

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250