  Line 40) this.getClass().getCanonicalName() ==> java.lang.Class.getCanonicalName()
  Line 40) this.getClass() ==> java.lang.Object.getClass()
  Line 49) this.internalTypes().stream().filter(f -> f.getName().equals(name)).findFirst() ==> java.util.stream.Stream.findFirst()
  Line 49) this.internalTypes().stream().filter(f -> f.getName().equals(name)) ==> java.util.stream.Stream.filter(java.util.function.Predicate<? super T>)
  Line 49) this.internalTypes().stream() ==> java.util.Collection.stream()
  Line 49) this.internalTypes() ==> com.github.javaparser.symbolsolver.model.declarations.TypeDeclaration.internalTypes()
  Line 49) f.getName().equals(name) ==> java.lang.String.equals(java.lang.Object)
  Line 49) f.getName() ==> com.github.javaparser.symbolsolver.model.declarations.Declaration.getName()
  Line 50) type.orElseThrow(() -> new UnsolvedSymbolException("Internal type not found: " + name)) ==> java.util.Optional.orElseThrow(java.util.function.Supplier<? extends X>)
  Line 59) this.internalTypes().stream().anyMatch(f -> f.getName().equals(name)) ==> java.util.stream.Stream.anyMatch(java.util.function.Predicate<? super T>)
  Line 59) this.internalTypes().stream() ==> java.util.Collection.stream()
  Line 59) this.internalTypes() ==> com.github.javaparser.symbolsolver.model.declarations.TypeDeclaration.internalTypes()
  Line 59) f.getName().equals(name) ==> java.lang.String.equals(java.lang.Object)
  Line 59) f.getName() ==> com.github.javaparser.symbolsolver.model.declarations.Declaration.getName()
  Line 116) String.format("%s is not a class", this) ==> java.lang.String.format(java.lang.String, java.lang.Object...)
  Line 123) String.format("%s is not an interface", this) ==> java.lang.String.format(java.lang.String, java.lang.Object...)
  Line 130) String.format("%s is not an enum", this) ==> java.lang.String.format(java.lang.String, java.lang.Object...)
  Line 137) String.format("%s is not a type parameter", this) ==> java.lang.String.format(java.lang.String, java.lang.Object...)
  Line 141) String.format("%s is not a reference type", this) ==> java.lang.String.format(java.lang.String, java.lang.Object...)
  Line 164) getQualifiedName() ==> com.github.javaparser.symbolsolver.model.declarations.TypeDeclaration.getQualifiedName()
  Line 166) String.format("<localClass>:%s", getName()) ==> java.lang.String.format(java.lang.String, java.lang.Object...)
  Line 166) getName() ==> com.github.javaparser.symbolsolver.model.declarations.Declaration.getName()
