Hi,
I've extended the domainmodel like explained below and get a strange error:
"Bounds mismatch: The type argument <Class<Entity>> is not a valid substitute for the bounded type parameter <T extends IEntity> of the method createAndInit(T)"
1. Created an interface:
package org.eclipse.xtext.example.domainmodel.ext;
public interface IEntity {
}
2. Added the interface to the DomainmodelJvmModelInferrer Entity part:
def dispatch infer(Entity entity, extension IJvmDeclaredTypeAcceptor acceptor, boolean prelinkingPhase) {
accept(entity.toClass( entity.fullyQualifiedName )) [
documentation = entity.documentation
superTypes += typeRef(IEntity)
...
3. Added an extension class:
package org.eclipse.xtext.example.domainmodel.ext;
public class EntityFunctionsExtension {
public static final <T extends IEntity> T createAndInit(
final T complexType )
{
throw new UnsupportedOperationException( "This method should have been replaced by Xtext compiler!" );
}
}
4. Implicitly import the the extension class via newly created DomainmodelImplicitlyImportedFeatures:
package org.eclipse.xtext.example.domainmodel.jvmmodel;
import java.util.List;
import org.eclipse.xtext.example.domainmodel.ext.EntityFunctionsExtension;
import org.eclipse.xtext.xbase.lib.ArrayExtensions;
import org.eclipse.xtext.xbase.lib.BigDecimalExtensions;
import org.eclipse.xtext.xbase.lib.BigIntegerExtensions;
import org.eclipse.xtext.xbase.lib.BooleanExtensions;
import org.eclipse.xtext.xbase.lib.ByteExtensions;
import org.eclipse.xtext.xbase.lib.CharacterExtensions;
import org.eclipse.xtext.xbase.lib.CollectionExtensions;
import org.eclipse.xtext.xbase.lib.ComparableExtensions;
import org.eclipse.xtext.xbase.lib.DoubleExtensions;
import org.eclipse.xtext.xbase.lib.FloatExtensions;
import org.eclipse.xtext.xbase.lib.FunctionExtensions;
import org.eclipse.xtext.xbase.lib.IntegerExtensions;
import org.eclipse.xtext.xbase.lib.IterableExtensions;
import org.eclipse.xtext.xbase.lib.IteratorExtensions;
import org.eclipse.xtext.xbase.lib.ListExtensions;
import org.eclipse.xtext.xbase.lib.LongExtensions;
import org.eclipse.xtext.xbase.lib.MapExtensions;
import org.eclipse.xtext.xbase.lib.ObjectExtensions;
import org.eclipse.xtext.xbase.lib.ProcedureExtensions;
import org.eclipse.xtext.xbase.lib.ShortExtensions;
import org.eclipse.xtext.xbase.lib.StringExtensions;
import org.eclipse.xtext.xbase.scoping.batch.ImplicitlyImportedFeatures;
import com.google.common.collect.Lists;
public class DomainmodelImplicitlyImportedFeatures extends ImplicitlyImportedFeatures {
@Override
protected List<Class<?>> getExtensionClasses() {
return Lists.<Class<?>> newArrayList(
EntityFunctionsExtension.class,
ArrayExtensions.class,
BigDecimalExtensions.class,
BigIntegerExtensions.class,
BooleanExtensions.class,
ByteExtensions.class,
CharacterExtensions.class,
CollectionExtensions.class,
ComparableExtensions.class,
DoubleExtensions.class,
FloatExtensions.class,
FunctionExtensions.class,
IntegerExtensions.class,
IterableExtensions.class,
IteratorExtensions.class,
ListExtensions.class,
LongExtensions.class,
MapExtensions.class,
ObjectExtensions.class,
ProcedureExtensions.class,
ShortExtensions.class,
StringExtensions.class);
}
}
5. Register DomainmodelImplicitlyImportedFeatures in DomainmodelRuntimeModule:
public Class<? extends ImplicitlyImportedFeatures> bindImplicitlyImportedFeatures() {
return DomainmodelImplicitlyImportedFeatures.class;
}
Run the editor and use the test .dmodel:
package test {
entity Entity
{
attr1 : String
attr2 : Integer
op doCreate () {
Entity.createAndInit // <== here comes the error
}
}
}
In my very old Xtext 2.4 environment the same thing will work.
I'm using 2.9 now.
Any ideas?
A bug?
Thanks a lot,
~Ingo