DeclaredType implements InferredType { public static InferredType fromInferredType(InferredType inferredType) { if (inferredType instanceof RuntimeType) { ClassSymbol typeClass = ((RuntimeType) inferredType).getTypeClass(); return new DeclaredType(typeClass); } if (inferredType instanceof DeclaredType) { return inferredType; } return InferredTypes.anyType(); } DeclaredType(Symbol typeClass, List<DeclaredType> typeArgs);   DeclaredType(Symbol typeClass); @Override boolean canHaveMember(String memberName); @Override boolean declaresMember(String memberName); @Override boolean isIdentityComparableWith(InferredType other); @Override Optional<Symbol> resolveMember(String memberName); @Override Optional<Symbol> resolveDeclaredMember(String memberName); @Override boolean canBeOrExtend(String typeName); @Override boolean canOnlyBe(String typeName); @Override boolean isCompatibleWith(InferredType other); @Override boolean mustBeOrExtend(String typeName); @Override String toString(); String typeName(); Set<Symbol> alternativeTypeSymbols(); @Override boolean equals(Object o); @Override int hashCode(); static InferredType fromInferredType(InferredType inferredType);  }
@Test public void test_fromInferredType() { assertThat(fromInferredType(anyType())).isEqualTo(anyType()); assertThat(fromInferredType(INT)).isEqualTo(DECL_INT); assertThat(fromInferredType(DECL_INT)).isEqualTo(DECL_INT); assertThat(fromInferredType(or(INT, STR))).isEqualTo(anyType()); }