import org.eclipse.jdt.annotation.NonNull;
import org.opendaylight.mdsal.binding.dom.codec.api.BindingIdentityCodec;
import org.opendaylight.mdsal.binding.runtime.api.BindingRuntimeContext;
-import org.opendaylight.mdsal.binding.spec.reflect.BindingReflections;
+import org.opendaylight.mdsal.binding.runtime.api.IdentityRuntimeType;
import org.opendaylight.yangtools.yang.binding.BaseIdentity;
import org.opendaylight.yangtools.yang.binding.contract.Naming;
import org.opendaylight.yangtools.yang.common.QName;
}
}
});
+ private final LoadingCache<@NonNull Class<? extends BaseIdentity>, @NonNull QName> qnames =
+ // Note: weak keys because it is the user who is supplying implemented contract
+ CacheBuilder.newBuilder().weakKeys().build(new CacheLoader<>() {
+ @Override
+ public QName load(final Class<? extends BaseIdentity> key) {
+ final var schema = context.getTypeWithSchema(key);
+ if (schema instanceof IdentityRuntimeType identitySchema) {
+ return identitySchema.statement().argument();
+ }
+ throw new IllegalStateException("Unexpected schema " + schema + " for " + key);
+ }
+ });
private final BindingRuntimeContext context;
@Override
public QName fromBinding(final BaseIdentity bindingValue) {
- return BindingReflections.getQName(bindingValue);
+ try {
+ return qnames.get(bindingValue.implementedInterface());
+ } catch (ExecutionException e) {
+ Throwables.throwIfUnchecked(e.getCause());
+ throw new IllegalStateException("Unexpected error translating " + bindingValue, e);
+ }
}
}