import org.eclipse.xtext.xbase.lib.Pure;
abstract class AgentProtectedAPIObject {
@Pure
protected abstract String attributesToString();
@Pure
<BUG>protected abstract <S extends Capacity> S getSkill(Class<S> capacity);
protected abstract <S extends Skill> void operator_mappedTo(Class<? extends Capacity> capacity, S skill);</BUG>
@SuppressWarnings("unchecked")
protected abstract <S extends Skill> S setSkill(S skill, Class<? extends Capacity>... capacities);
<BUG>@SuppressWarnings("unchecked")
protected abstract <S extends Skill> S $setSkill(S skill, Class<? extends Capacity>... capacities);</BUG>
protected abstract <S extends Capacity> S clearSkill(Class<S> capacity);

import org.eclipse.xtext.xbase.lib.Pure;
abstract class AgentProtectedAPIObject {
@Pure
protected abstract String attributesToString();
@Pure
protected abstract <S extends Capacity> S getSkill(Class<S> capacity);
@Pure
protected abstract ClearableReference<Skill> $getSkill(Class<? extends Capacity> capacity);
protected abstract <S extends Skill> void operator_mappedTo(Class<? extends Capacity> capacity, S skill);
@SuppressWarnings("unchecked")
protected abstract <S extends Skill> S setSkill(S skill, Class<? extends Capacity>... capacities);
protected abstract <S extends Capacity> S clearSkill(Class<S> capacity);
