@SuppressWarnings("unchecked")
	public T getAdaptiveExtension() {
		if (!hasAdaptiveAnnotation()) {
			throw new IllegalStateException("Adaptive annotation not found in class : " + iFaceType);
		}
		Object instance = cachedAdaptiveInstance.get();
		if (instance == null) {
			synchronized (cachedAdaptiveInstance) {
				instance = cachedAdaptiveInstance.get();
				if (instance == null) {
					try {
						instance = createAdaptiveExtension();
						cachedAdaptiveInstance.set(instance);
					} catch (Throwable t) {
						throw new IllegalStateException("fail to create adaptive instance: " + t.toString(), t);
					}
				}
			}
		}
		return (T) instance;
	}