  Line 42) method.isSynthetic() ==> java.lang.reflect.Method.isSynthetic()
  Line 42) method.isBridge() ==> java.lang.reflect.Method.isBridge()
  Line 50) method.getName() ==> java.lang.reflect.Method.getName()
  Line 77) method.getDeclaringClass().isInterface() ==> java.lang.Class.isInterface()
  Line 77) method.getDeclaringClass() ==> java.lang.reflect.Method.getDeclaringClass()
  Line 78) method.getDeclaringClass() ==> java.lang.reflect.Method.getDeclaringClass()
  Line 80) method.getDeclaringClass().isEnum() ==> java.lang.Class.isEnum()
  Line 80) method.getDeclaringClass() ==> java.lang.reflect.Method.getDeclaringClass()
  Line 81) method.getDeclaringClass() ==> java.lang.reflect.Method.getDeclaringClass()
  Line 83) method.getDeclaringClass() ==> java.lang.reflect.Method.getDeclaringClass()
  Line 89) ReflectionFactory.typeUsageFor(method.getGenericReturnType(), typeSolver) ==> com.github.javaparser.symbolsolver.reflectionmodel.ReflectionFactory.typeUsageFor(java.lang.reflect.Type, com.github.javaparser.symbolsolver.model.resolution.TypeSolver)
  Line 89) method.getGenericReturnType() ==> java.lang.reflect.Method.getGenericReturnType()
  Line 94) method.getParameterTypes() ==> java.lang.reflect.Method.getParameterTypes()
  Line 100) method.isVarArgs() ==> java.lang.reflect.Method.isVarArgs()
  Line 101) method.getParameterCount() ==> java.lang.reflect.Method.getParameterCount()
  Line 103) method.getParameterTypes() ==> java.lang.reflect.Method.getParameterTypes()
  Line 103) method.getGenericParameterTypes() ==> java.lang.reflect.Method.getGenericParameterTypes()
  Line 108) Arrays.stream(method.getTypeParameters()).map((refTp) -> new ReflectionTypeParameter(refTp, false, typeSolver)).collect(Collectors.toList()) ==> java.util.stream.Stream.collect(java.util.stream.Collector<? super T, A, R>)
  Line 108) Arrays.stream(method.getTypeParameters()).map((refTp) -> new ReflectionTypeParameter(refTp, false, typeSolver)) ==> java.util.stream.Stream.map(java.util.function.Function<? super T, ? extends R>)
  Line 108) Arrays.stream(method.getTypeParameters()) ==> java.util.Arrays.stream(T[])
  Line 108) method.getTypeParameters() ==> java.lang.reflect.Method.getTypeParameters()
  Line 108) Collectors.toList() ==> java.util.stream.Collectors.toList()
  Line 112) new MethodDeclarationCommonLogic(this, typeSolver).resolveTypeVariables(context, parameterTypes) ==> com.github.javaparser.symbolsolver.declarations.common.MethodDeclarationCommonLogic.resolveTypeVariables(com.github.javaparser.symbolsolver.core.resolution.Context, java.util.List<com.github.javaparser.symbolsolver.model.typesystem.Type>)
  Line 117) Modifier.isAbstract(method.getModifiers()) ==> java.lang.reflect.Modifier.isAbstract(int)
  Line 117) method.getModifiers() ==> java.lang.reflect.Method.getModifiers()
  Line 122) method.isDefault() ==> java.lang.reflect.Method.isDefault()
  Line 127) Modifier.isStatic(method.getModifiers()) ==> java.lang.reflect.Modifier.isStatic(int)
  Line 127) method.getModifiers() ==> java.lang.reflect.Method.getModifiers()
  Line 132) ReflectionFactory.modifiersToAccessLevel(this.method.getModifiers()) ==> com.github.javaparser.symbolsolver.reflectionmodel.ReflectionFactory.modifiersToAccessLevel(int)
  Line 132) this.method.getModifiers() ==> java.lang.reflect.Method.getModifiers()
