MissingTypeInfo extends TypeInformation<InvalidTypesException> { @Override public int hashCode() { return 31 * functionName.hashCode() + typeException.hashCode(); } MissingTypeInfo(String functionName);  MissingTypeInfo(String functionName, InvalidTypesException typeException); String getFunctionName(); InvalidTypesException getTypeException(); @Override boolean isBasicType(); @Override boolean isTupleType(); @Override int getArity(); @Override Class<InvalidTypesException> getTypeClass(); @Override boolean isKeyType(); @Override TypeSerializer<InvalidTypesException> createSerializer(ExecutionConfig executionConfig); @Override String toString(); @Override boolean equals(Object obj); @Override int hashCode(); @Override boolean canEqual(Object obj); @Override int getTotalFields();  }
@Test public void testMissingTypeInfoEquality() { MissingTypeInfo tpeInfo1 = new MissingTypeInfo(functionName, testException); MissingTypeInfo tpeInfo2 = new MissingTypeInfo(functionName, testException); assertEquals(tpeInfo1, tpeInfo2); assertEquals(tpeInfo1.hashCode(), tpeInfo2.hashCode()); }