Closed kazurayam closed 3 months ago
Java言語ならメソッド呼び出しなら必ずメソッド名に続けて(を書くことになっている。プロパティの参照なら(がないはずだ。だからメソッド呼び出しとプロパティ参照を字句的パターン照合によって見分けることができる。
いっぽう、VBではプロシージャーの呼び出しとObjectのプロパティの参照とを字句的なパターンによって見分けることができない。字句的なパターンマッチングでは力不足だ。
Dim dicSize As Long: dicSize = dic.Count
この1行において Count
という字句がプロシジャの呼び出しではなくdic変数のプロパティ参照である、と見分けなければならない。ANTLRとかの言語解析の手法を持ち込む必要がある。
ずるい手を思いついた。Optionsクラスをこういうふうに変更した。
public class Options {
public static Options KAZURAYAM =
new Options.Builder()
.excludeModule(ModuleToBeExcluded.プロシージャー一覧を作る.getPattern())
.excludeModule(ModuleToBeExcluded.プロシージャ一覧を作る.getPattern())
.excludeModule(ModuleToBeExcluded.プロシジャ一覧を作る.getPattern())
.ignoreRefereeProcedure(VBAModule.ModuleType.Standard, "プロシージャー一覧を作る")
.ignoreRefereeProcedure(VBAModule.ModuleType.Standard, "プロシージャ一覧を作る")
.ignoreRefereeProcedure(VBAModule.ModuleType.Standard, "プロシジャ一覧を作る")
.ignoreRefereeProcedure(VBAModule.ModuleType.Standard, "KzCls")
.ignoreRefereeProcedure(VBAModule.ModuleType.Class, "ToString")
.ignoreRefereeProcedure(VBAModule.ModuleType.Class, "Count")
.ignoreRefereeProcedure(VBAModule.ModuleType.Class, "Items")
.build();
KzCls
, ToString
, Count
, Items
ーーー これらRefereeプロシジャをignoreする。するとdiagramの中で矢印線がグッと少なくなった。クラス図のノイズが少なくなった。わたしkazurayamはこれらのプロシジャのことを覚えておこう、うっかり削除したりしないように気をつけよう。
もういいと思う
https://github.com/kazurayam/VBAProcedureUsageAnalyzer/blob/0.1.3/lib/src/test/java/com/kazurayam/vba/FindUsagesAppTest.java を実行すると puファイルができてその中にこう書いてる
参照している、というふうに読めるがどうなのか?実はこのような参照関係は実際には存在しない。私の書いたプログラムが間違えているのだ。
DicSortModuleのソースコードにはこう書いてある
でえええ!困ったなあ。
プロシージャーの呼び出しとObjectのプロパティの参照と、構文的に見分けることができない、というVB言語のカスな性質のせいだ。どうにもならない気がする。