1
에 기반을 다시 나는 내가 o
변수에 정의 된 문자열이 사용되는 동기화 블록을 찾는 XPath 쿼리를 만들려고의 XPath 찾기 요소는 상위 요소
public class Test {
String o = new String("hh");
public void wrong1() {
synchronized(o) {
// huhu
}
}
}
에서 만든 자바 AST 있습니다. 내 문제는 조상 ClassOrInterfaceBody 부분을 해결하는 방법은, 그것은 SynchronizedStatement의 조상 위의 정의로
입니다,하지만 난/SynchronizedStatement[Expression/PrimaryExpression/PrimaryPrefix/Name[@Image=
이 올 것을 알고
//SynchronizedStatement[Expression/PrimaryExpression/PrimaryPrefix/Name[@Image=ancestor::ClassOrInterfaceBody[ClassOrInterfaceBodyDeclaration/FieldVariableDeclaratorId/@Image]]]
작업을 얻을니까.
내가 두 @image이 동일한 지 테스트하려면 ;-)
감사
감사 :
원래의 XPath에서 @image는 "문자열"의 경우
. 또 다른 문제 - 기본적으로 변수가 String 인 경우에만 두 개의 @Image가 동일하다는 것을 확인하고 싶습니다. 그래서 Object o = new Object(); 일치하지 않아야합니다 ... 어떻게 이러한 두 조건을 결합 할 수 있습니까? @Image 검사와 발견 된 조상 요소도 String 유형입니다. 나는 그 문자열이 있는지 확인하는 방법을 알고 있지만 검색과 결합하는 방법은 아닙니다 (그들은 같은 노드에서 작업 중입니다). 고맙습니다 – martymcfly@martymcfly String 유형 및 노드 테스트는 어떻게됩니까? 기본적으로 위와 같은 조상에 –
이 있습니다. Image' ClassOrInterfaceBody/ClassOrInterfaceBodyDeclaration/FieldDeclaration/VariableDeclarator/VariableDeclaratorId/@ 및 문자열 비교는 그 조상 '조상 :: ClassOrInterfaceBody/ClassOrInterfaceBodyDeclaration /에 구성됩니다 의사 같은 이미지가 '조상과 비교 FieldDeclaration/Type/ReferenceType/ClassOrInterfaceType [@ Image = 'String']' 기본적으로'FieldDeclaration'은 String과 Name에 대한 정보를 포함하고있는 노드입니다. 그러나 ClassOrInterfaceBody는 이것과 Synchron.Statements에 대한 공통 조상입니다 – martymcfly