code: private static <T> SimonType getValue(Class<? extends T> type, SimonTypeMatcher<T> typeMatcher) {
  		SimonType simonType = SIMON_TYPE_CACHE.get(type);
  		if (simonType == null) {
  			for (SimonType lSimonType : SimonType.values()) {
  				if (typeMatcher.matches(type, lSimonType)) {
  					simonType = lSimonType;
  					if (!Proxy.isProxyClass(type)) {
  						SIMON_TYPE_CACHE.put(type, simonType);
  					}
  					break;
  				}
  			}
  		}
  		return simonType;
  	}
docs: Get Simon type corresponding to class.