@Override
  public EdmType getType() {
    if (propertyType == null) {
      final FullQualifiedName typeName = getTypeFQN();
      if (isPrimitive()) {
        try {
          propertyType =
              EdmPrimitiveTypeFactory.getInstance(EdmPrimitiveTypeKind.valueOf(typeName.getName()));
        } catch (IllegalArgumentException e) {
          throw new EdmException("Cannot find type with name: " + typeName, e);
        }
      } else {
        propertyType = edm.getComplexType(typeName);
        if (propertyType == null) {
          propertyType = edm.getEnumType(typeName);
          if (propertyType == null) {
            propertyType = edm.getTypeDefinition(typeName);
            if (propertyType == null) {
              throw new EdmException("Cannot find type with name: " + typeName);
            }
          }
        }
      }
    }

    return propertyType;
  }