2009-10-18 74 views

回答

0

如果您在做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; 
} 

現在,當訪問一個SimpleNameQualifiedName我做這樣的事情:

public boolean visit(final SimpleName node) { 
    if (!node.isDeclaration()) { 
     final IBinding nodeBinding = node.resolveBinding(); 
     if (nodeBinding instanceof IVariableBinding) { 
      ... 
     } 
    } 
    return false; 
} 

省略號(...)將根據其價值處理場訪問的代碼來代替您的inVariableAssignment。這會讓你開始。

哦,別忘了PostfixExpressionPrefixExpression ...

+0

謝謝!你的意思是「哦,別忘了PostfixExpression和PrefixExpression」?以及如何處理未在我的項目中聲明的字段?我不希望他們被發現。例如。 System.out.println中的字段「out」被檢測爲字段讀取。 – yeeen 2009-10-18 10:35:33

+0

爲什麼字段像「out」在System.out.println中被檢測爲字段讀取,cos我使用了一個布爾值(即。ur inVariableAssignment)。現在我改爲int,初始化爲-1。如果出現在LHS上,則設置爲0;如果出現在RHS集上,則爲1.當分配節點的結束訪問時,我將其重置爲-1,問題就解決了。 – yeeen 2009-10-18 10:47:01

+0

我可以知道你做「(!node.isDeclaration())」的理由嗎?在我看來,我可以被刪除。但是不管是否刪除它,還有另一個問題。當它是初始化的一部分時,它無法檢測到該字段。例如int y = x + 15,其中x是一個字段。 – yeeen 2009-10-18 11:01:26

相關問題