public static boolean isProperType(ResolvedType type) {
        if (type instanceof InferenceVariable) {
            return false;
        }
        if (type instanceof ResolvedReferenceType) {
            ResolvedReferenceType referenceType = (ResolvedReferenceType) type;
            return referenceType.typeParametersValues().stream().allMatch(it -> isProperType(it));
        }
        if (type instanceof ResolvedWildcard) {
            ResolvedWildcard wildcard = (ResolvedWildcard)type;
            if (wildcard.isBounded()) {
                return isProperType(wildcard.getBoundedType());
            } else {
                return true;
            }
        }
        if (type.isPrimitive()) {
            return true;
        }
        if (type.isTypeVariable()) {
            // FIXME I am not sure...
            return false;
        }
        if (type.isArray()) {
            return isProperType(type.asArrayType().getComponentType());
        }
        throw new UnsupportedOperationException(type.toString());
    }
public static boolean isProperType(ResolvedType type) {
        if (type instanceof InferenceVariable) {
            return false;
        }
        if (type instanceof ResolvedReferenceType) {
            ResolvedReferenceType referenceType = (ResolvedReferenceType) type;
            return referenceType.typeParametersValues().stream().allMatch(it -> isProperType(it));
        }
        if (type instanceof ResolvedWildcard) {
            ResolvedWildcard wildcard = (ResolvedWildcard)type;
            if (wildcard.isBounded()) {
                return isProperType(wildcard.getBoundedType());
            } else {
                return true;
            }
        }
        if (type.isPrimitive()) {
            return true;
        }
        if (type.isTypeVariable()) {
            
            return false;
        }
        if (type.isArray()) {
            return isProperType(type.asArrayType().getComponentType());
        }
        throw new UnsupportedOperationException(type.toString());
    }
public static boolean isProperType ( ResolvedType type ) { if ( type instanceof InferenceVariable ) { return false ; } if ( type instanceof ResolvedReferenceType ) { ResolvedReferenceType referenceType = ( ResolvedReferenceType ) type ; return referenceType . typeParametersValues ( ) . stream ( ) . allMatch ( it -> isProperType ( it ) ) ; } if ( type instanceof ResolvedWildcard ) { ResolvedWildcard wildcard = ( ResolvedWildcard ) type ; if ( wildcard . isBounded ( ) ) { return isProperType ( wildcard . getBoundedType ( ) ) ; } else { return true ; } } if ( type . isPrimitive ( ) ) { return true ; } if ( type . isTypeVariable ( ) ) { // FIXME I am not sure... return false ; } if ( type . isArray ( ) ) { return isProperType ( type . asArrayType ( ) . getComponentType ( ) ) ; } throw new UnsupportedOperationException ( type . toString ( ) ) ; }
The term proper type excludes such "types" that mention inference variables.
The term proper type excludes such types that mention inference variables .