  Line 43) getClass() ==> java.lang.Object.getClass()
  Line 43) o.getClass() ==> java.lang.Object.getClass()
  Line 47) baseType.equals(that.baseType) ==> java.lang.Object.equals(java.lang.Object)
  Line 54) baseType.hashCode() ==> java.lang.Object.hashCode()
  Line 78) baseType.describe() ==> com.github.javaparser.symbolsolver.model.typesystem.Type.describe()
  Line 87) other.isArray() ==> com.github.javaparser.symbolsolver.model.typesystem.Type.isArray()
  Line 88) baseType.isPrimitive() ==> com.github.javaparser.symbolsolver.model.typesystem.Type.isPrimitive()
  Line 88) other.asArrayType().getComponentType().isPrimitive() ==> com.github.javaparser.symbolsolver.model.typesystem.Type.isPrimitive()
  Line 88) other.asArrayType().getComponentType() ==> com.github.javaparser.symbolsolver.model.typesystem.ArrayType.getComponentType()
  Line 88) other.asArrayType() ==> com.github.javaparser.symbolsolver.model.typesystem.Type.asArrayType()
  Line 89) baseType.equals(other.asArrayType().getComponentType()) ==> java.lang.Object.equals(java.lang.Object)
  Line 89) other.asArrayType().getComponentType() ==> com.github.javaparser.symbolsolver.model.typesystem.ArrayType.getComponentType()
  Line 89) other.asArrayType() ==> com.github.javaparser.symbolsolver.model.typesystem.Type.asArrayType()
  Line 91) baseType.isAssignableBy(other.asArrayType().getComponentType()) ==> com.github.javaparser.symbolsolver.model.typesystem.Type.isAssignableBy(com.github.javaparser.symbolsolver.model.typesystem.Type)
  Line 91) other.asArrayType().getComponentType() ==> com.github.javaparser.symbolsolver.model.typesystem.ArrayType.getComponentType()
  Line 91) other.asArrayType() ==> com.github.javaparser.symbolsolver.model.typesystem.Type.asArrayType()
  Line 92) other.isNull() ==> com.github.javaparser.symbolsolver.model.typesystem.Type.isNull()
  Line 100) baseType.replaceTypeVariables(tpToReplace, replaced, inferredTypes) ==> com.github.javaparser.symbolsolver.model.typesystem.Type.replaceTypeVariables(com.github.javaparser.symbolsolver.model.declarations.TypeParameterDeclaration, com.github.javaparser.symbolsolver.model.typesystem.Type, java.util.Map<com.github.javaparser.symbolsolver.model.declarations.TypeParameterDeclaration, com.github.javaparser.symbolsolver.model.typesystem.Type>)
