2014-04-21 1 views
0

코드를 클래스를 인스턴스화 할 수 있도록 노드를 만드는 방법을 알고 싶습니다. 현재 코드를 수정하면 노드를 인식 할 수 없습니다. 나는 다음과 같은 노드를 생성하고 매개 변수scala AST에서 클래스를 호출 할 수 없습니다. 클래스를 찾을 수 없습니다.

val newRhs = Select(New(Ident("pra")),newTermName("<init>")); 
retTree = treeCopy.ValDef(vd, mods, name, tpt, newRhs); 

나는 다음과 같은 오류

받고 있어요위한 ValDef 노드를 교체 한 AST에서

object Test{ 
def main(args: Array[String]) { 
    val a= new Avi; 
} 

}

class Avi{} 
class pra{} 

error: not found: value pra 

나는 알고 싶습니다. 노드를 만든 방식이 잘못되어 내가해야 할 일이 있습니다. 이 retTree를 Transformer 클래스에 전달하여 AST를 변환합니다. 유형이 컴파일러의 Typer 단계에서 발견되지 않았습니다. 어떤 도움이라도 대단히 감사하겠습니다.

+0

github에서 end-to-end 예제를 게시 할 수 있습니까? –

+0

@EugeneBurmako이 레포에 파일을 추가했습니다. https://github.com/bnavarma/ScalaAst Explugin.scala에는 플러그인 코드가 들어 있으며 asdf.scala는 내가 실행중인 파일입니다. Avi가 asdf.scala에서 호출되고 있지만 플러그인에서 pra 클래스를 호출하려고합니다. 이를 위해 노드를 변형했지만 기호를 선택하지 않고 값 대신 pra를 확인하고 오류를 던집니다. –

답변

0

Ident("pra")에서 Ident(newTypeName("pra"))으로 변경하십시오.

관련 문제