2017-01-08 6 views
1

내가 pkg2pkg1에서 다음 Class AClass B을 다음과 같이 기능 calculate()pkg2class B에 정의되어 가정하자. 예를 들어 여기에 pkg1.Apkg1.A이 표시되고 class Apkg1에 속합니다.java-parser 및 java-symbol-solver를 사용하여 함수의 모든 매개 변수 유형을 추론하는 방법은 무엇입니까?</p> <pre><code>B.calculate(A a1, A a2); </code></pre> <p>내가 매개 변수 <code>a1</code> 및 <code>a2</code>의 유형을 식별 할 :

내 관심사는 프로젝트를 빌드하고 싶지 않아 정적 분석을하고 싶습니다 (모든 소스 파일이 있습니다).

Eclipse JDT를 사용하여 매개 변수 유형을 추론하는 방법을 알고 있지만 javaparser (https://github.com/javaparser/javaparser) 및 javasymbolsolver (https://github.com/javaparser/javasymbolsolver)를 사용하여 매개 변수 유형을 추정하는 방법을 알고 있습니다.

이클립스 JDT에서는 파서 환경에서 소스 파일의 경로를 설정하고 작동했습니다. 하지만 javasymbolsolver에서 typesolver에 소스 파일을 추가 한 후에도 작동하지 않습니다.

CombinedTypeSolver combinedTypeSolver = new CombinedTypeSolver(); 
combinedTypeSolver.add(new JavaParserTypeSolver("path to the sourcefiles")); 
JavaParserFacade j=JavaParserFacade.get(combinedTypeSolver); 
SymbolReference<MethodDeclaration> ref = j.solve((MethodCallExpr) n); 

답변

0

종속성에 대한 경로도 지정해야합니다. CombinedTypeSolver는 소스 파일뿐만 아니라 모든 jar도 찾을 수 있어야합니다.

이런 식으로 뭔가 작업을해야합니다 :

combinedTypeSolver.add (새 JarTypeSolver (새 파일 ("libs와/mylib.jar")));

자료 : 나는

+0

내가 프로젝트의 항아리가없는 JavaSymbolSolver의 mantainer 오전, 내가 가진 모든 소스 코드 (내가이 일을 갖고 있기 때문에 나는이 프로젝트를 빌드 할 의도가없는 것입니다 여러 프로젝트에 대한). javasymbolsolver에서 해결되지 않았습니까? 내가 EclipseJDT'astParser.setEnvironment ("pathTojreLib", "pathToSourceFiles", new String [] ("UTF-8"), true); – AmeyaKetkar

+0

에서 이와 같은 작업을 수행했다. 도서관과 관련이 없다. 하지만 클래스 X가 라이브러리의 클래스를 확장하면 그에 대한 해결 방법은 없습니다 –

+0

그렇다면 pkg1.A에는 라이브러리가 포함되지 않고 라이브러리의 클래스를 확장하지 않으면 올바르게 작동합니다. – AmeyaKetkar