Javaparser UnsolvedSymbolException — класс, используемый в анализируемом классе, использует другой неразрешенный классJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Javaparser UnsolvedSymbolException — класс, используемый в анализируемом классе, использует другой неразрешенный класс

Сообщение Anonymous »

Я не уверен, что хорошо описал проблему в заголовке, но вот предыстория:
Я хочу проанализировать исходный код Java, скажем, TestClassOne.java.

TestClassOne использует другой класс «TestClassTwo», объявленный как переменная экземпляра. Теперь у TestClassTwo есть класс TestClassThree, объявленный как переменная экземпляра.

Итак, проблема возникает, когда мой целевой класс - TestClassOne получает ссылку на TestClassThree через TestClassTwo, таким образом, метод test() ниже:

Код: Выделить всё

 public class TestClassOne {
private TestClassTwo testTwo = new TestClassTwo();

public void test() {
TestClassThree three = testTwo.getTestThree();
}
}
Это исключение:

Код: Выделить всё

Exception in thread "main" UnsolvedSymbolException{context='unknown', name='TestClassThree', typeSolver=null}
at com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade.convertToUsage(JavaParserFacade.java:418)
at com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade.convertToUsage(JavaParserFacade.java:395)
at com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade.convertToUsageVariableType(JavaParserFacade.java:387)
at com.github.javaparser.symbolsolver.javaparsermodel.TypeExtractor.visit(TypeExtractor.java:302)
at com.github.javaparser.symbolsolver.javaparsermodel.TypeExtractor.visit(TypeExtractor.java:34)
at com.github.javaparser.ast.expr.VariableDeclarationExpr.accept(VariableDeclarationExpr.java:104)
at com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade.getTypeConcrete(JavaParserFacade.java:371)
at com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade.getType(JavaParserFacade.java:263)
at com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade.getType(JavaParserFacade.java:257)
Вот мои коды:

Код: Выделить всё

import com.github.javaparser.JavaParser;
import com.github.javaparser.ParseException;
import com.github.javaparser.ast.CompilationUnit;
import com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade;
import com.github.javaparser.symbolsolver.resolution.typesolvers.CombinedTypeSolver;
import com.github.javaparser.symbolsolver.resolution.typesolvers.JavaParserTypeSolver;
import com.github.javaparser.symbolsolver.resolution.typesolvers.ReflectionTypeSolver;
public class TestParser {

public static void main(String[] args) throws FileNotFoundException, ParseException {

TypeCalculatorVisitor visitor = new TypeCalculatorVisitor();

CombinedTypeSolver combinedTypeSolver = new CombinedTypeSolver();
combinedTypeSolver.add(new ReflectionTypeSolver());

combinedTypeSolver
.add(new JavaParserTypeSolver(new File("..src/javaparser")));

combinedTypeSolver.add(
new JavaParserTypeSolver(new File("..src/javaparser_pkg2")));

combinedTypeSolver.add(
new JavaParserTypeSolver(new File("..src/javaparser_pkg3")));

CompilationUnit agendaCu = JavaParser.parse(new FileInputStream(
new File("..src/javaparser/TestClassOne.java")));

agendaCu.accept(visitor, JavaParserFacade.get(combinedTypeSolver));

System.out.println(visitor.getParseResult());
}

}
TestClassOne:

Код: Выделить всё

import javaparser_pkg2.TestClassTwo;
import javaparser_pkg3.TestClassThree;

public class TestClassOne {
private TestClassTwo testTwo = new TestClassTwo();

public void test() {
TestClassThree three = testTwo.getTestThree();
}
}
TestClassTwo:

Код: Выделить всё

import javaparser_pkg3.TestClassThree;

public class TestClassTwo {
private int age;
private String status;

private TestClassThree testThree = new TestClassThree();

public TestClassThree getTestThree() {
return testThree;
}
public void setTestThree(TestClassThree testThree) {
this.testThree = testThree;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}

}
TestClassThree:

Код: Выделить всё

package javaparser_pkg3;

public class TestClassThree {
private String name;
private int ID;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getID() {
return ID;
}
public void setID(int iD) {
ID = iD;
}

}
Я добавил каталог TestClassThree каккомбинированныйTypeResolver (см. выше), но все равно не работает:

Код: Выделить всё

combinedTypeSolver.add(
new JavaParserTypeSolver(new File("..src/javaparser_pkg3")));
Как это следует сделать правильно?

Спасибо и с уважением!

Подробнее здесь: https://stackoverflow.com/questions/438 ... arsed-uses
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»