実現したいこと
ここに実現したいことを箇条書きで書いてください。
- importでの他クラスのメソッドの実装の仕方が知りたい
前提
kotlinコンパイラの改変を行っている者です。
Javaで抽象構文木を操作するプログラムを記述しています。
kotlin
1val size = 999999992while(i <= size+1){3 処理 4}
上記のサンプルコードをコンパイルするときのお話です。
サンプルコードのwhile文の継続条件(i <= size+1)の抽象構文木を生成したとき、その抽象構文木を操作する機能を実装中に以下のエラーメッセージが発生しました。
具体的には、他ディレクトリに存在しているソースコードにgetPsiElement(){...}というメソッドが存在します。
そのソースコードが存在しているディレクトリの絶対パスとファイル名、メソッドの行数は、以下の通りです。
/home/user/intellij-community/plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/psi/impl/PropertyImpl.java:373: public PsiElement getPsiElement() {
発生している問題・エラーメッセージ
下記のソースコードをビルドすると、以下のようなエラーが発生します。
/home/hide/kotlin/compiler/psi/src/org/jetbrains/kotlin/psi/KtWhileExpressionBase.java:19: error: package com.intellij.lang.properties.psi.impl does not exist import com.intellij.lang.properties.psi.impl.PropertyImpl;
該当のソースコード
java
1package org.jetbrains.kotlin.psi;2 3//エラー箇所4import com.intellij.lang.properties.psi.impl.PropertyImpl;5import com.intellij.lang.ASTNode;6...7省略 8...9 10public abstract class KtWhileExpressionBase extends KtLoopExpression {11 public KtWhileExpressionBase(@NotNull ASTNode node) {12 super(node);13 14 }15 16 @Nullable17 public KtExpression getCondition() {18 KtExpression o = findExpressionUnder(KtNodeTypes.CONDITION);19 20 //この行のgetPsiElement()を実装したい21 PsiBinaryExpression binaryExpression = (PsiBinaryExpression) o.getPsiElement();22 }23}24 25
試したこと
webで検索し、importの機能や使い方を調べました。
いろいろ読み漁った結果、原因の候補として、コンパイラの起点からのパス表記が間違っている(import com.からではなく、import src.com.と記述しなければならない)かもなあ、と考えました。
しかし、他のimport(ソースコード中のimport com.intellij.lang.ASTNode;とか)はちゃんと動作しているので、わけがわからなくなってます。
補足情報(FW/ツールのバージョンなど)
VMware Workstation Player 16 上の Ubuntu 22.01 live-server 64bit に Kotlinコンパイラ を保存しています。(ubuntu上でgit cloneコマンドで複製、保存しました。)
0 コメント