0
我在寫一個Eclipse ASTVisitor。如何判斷一個字段是讀取還是寫入方法?Eclipse JDT ASTVisitor - 如何判斷一個字段是讀取還是寫入方法?
提供的想法是:「您需要先分配賦值節點。LHS中的字段被寫入,而RHS表達式中的字段被讀取。」
當我訪問作業並獲得兩個表達式的LHS和RHS後,如何判斷表達式是否包含該字段?
我在寫一個Eclipse ASTVisitor。如何判斷一個字段是讀取還是寫入方法?Eclipse JDT ASTVisitor - 如何判斷一個字段是讀取還是寫入方法?
提供的想法是:「您需要先分配賦值節點。LHS中的字段被寫入,而RHS表達式中的字段被讀取。」
當我訪問作業並獲得兩個表達式的LHS和RHS後,如何判斷表達式是否包含該字段?
如果您在做AST工作,我建議您使用AST View plugin。這是理解JDT AST的非常方便的工具。
你的方法可行。我在訪問者中使用一個變量來表示我正在分配任務。
public boolean visit(final Assignment node) {
inVariableAssignment = true;
node.getLeftHandSide().accept(this);
inVariableAssignment = false;
node.getRightHandSide().accept(this);
return false;
}
現在,當訪問一個SimpleName
或QualifiedName
我做這樣的事情:
public boolean visit(final SimpleName node) {
if (!node.isDeclaration()) {
final IBinding nodeBinding = node.resolveBinding();
if (nodeBinding instanceof IVariableBinding) {
...
}
}
return false;
}
省略號(...)將根據其價值處理場訪問的代碼來代替您的inVariableAssignment
。這會讓你開始。
哦,別忘了PostfixExpression
和PrefixExpression
...
謝謝!你的意思是「哦,別忘了PostfixExpression和PrefixExpression」?以及如何處理未在我的項目中聲明的字段?我不希望他們被發現。例如。 System.out.println中的字段「out」被檢測爲字段讀取。 – yeeen 2009-10-18 10:35:33
爲什麼字段像「out」在System.out.println中被檢測爲字段讀取,cos我使用了一個布爾值(即。ur inVariableAssignment)。現在我改爲int,初始化爲-1。如果出現在LHS上,則設置爲0;如果出現在RHS集上,則爲1.當分配節點的結束訪問時,我將其重置爲-1,問題就解決了。 – yeeen 2009-10-18 10:47:01
我可以知道你做「(!node.isDeclaration())」的理由嗎?在我看來,我可以被刪除。但是不管是否刪除它,還有另一個問題。當它是初始化的一部分時,它無法檢測到該字段。例如int y = x + 15,其中x是一個字段。 – yeeen 2009-10-18 11:01:26