  Line 42) Optional.empty() ==> java.util.Optional.empty()
  Line 46) getParent() ==> com.github.javaparser.symbolsolver.core.resolution.Context.getParent()
  Line 48) SymbolReference.unsolved(ReferenceTypeDeclaration.class) ==> com.github.javaparser.symbolsolver.model.resolution.SymbolReference.unsolved(java.lang.Class<S2>)
  Line 50) parent.solveType(name, typeSolver) ==> com.github.javaparser.symbolsolver.core.resolution.Context.solveType(java.lang.String, com.github.javaparser.symbolsolver.model.resolution.TypeSolver)
  Line 59) solveSymbol(name, typeSolver) ==> com.github.javaparser.symbolsolver.core.resolution.Context.solveSymbol(java.lang.String, com.github.javaparser.symbolsolver.model.resolution.TypeSolver)
  Line 60) ref.isSolved() ==> com.github.javaparser.symbolsolver.model.resolution.SymbolReference.isSolved()
  Line 61) Value.from(ref.getCorrespondingDeclaration()) ==> com.github.javaparser.symbolsolver.model.resolution.Value.from(com.github.javaparser.symbolsolver.model.declarations.ValueDeclaration)
  Line 61) ref.getCorrespondingDeclaration() ==> com.github.javaparser.symbolsolver.model.resolution.SymbolReference.getCorrespondingDeclaration()
  Line 62) Optional.of(value) ==> java.util.Optional.of(T)
  Line 64) Optional.empty() ==> java.util.Optional.empty()
  Line 89) solveMethod(name, argumentsTypes, false, typeSolver) ==> com.github.javaparser.symbolsolver.core.resolution.Context.solveMethod(java.lang.String, java.util.List<com.github.javaparser.symbolsolver.model.typesystem.Type>, boolean, com.github.javaparser.symbolsolver.model.resolution.TypeSolver)
  Line 90) methodSolved.isSolved() ==> com.github.javaparser.symbolsolver.model.resolution.SymbolReference.isSolved()
  Line 91) methodSolved.getCorrespondingDeclaration() ==> com.github.javaparser.symbolsolver.model.resolution.SymbolReference.getCorrespondingDeclaration()
  Line 92) ContextHelper.resolveTypeVariables(this, methodDeclaration, argumentsTypes) ==> com.github.javaparser.symbolsolver.core.resolution.ContextHelper.resolveTypeVariables(com.github.javaparser.symbolsolver.core.resolution.Context, com.github.javaparser.symbolsolver.model.declarations.MethodDeclaration, java.util.List<com.github.javaparser.symbolsolver.model.typesystem.Type>)
  Line 93) Optional.of(methodUsage) ==> java.util.Optional.of(T)
  Line 95) Optional.empty() ==> java.util.Optional.empty()
