protected void doPrepare(ResolvedTypes resolvedTypes, IFeatureScopeSession featureScopeSession, JvmIdentifiableElement element, Map<JvmIdentifiableElement, ResolvedTypes> resolvedTypesByContext) { XExpression expression = getLogicalContainerProvider().getAssociatedExpression(element); if (expression != null) { if (!rootedInstances.contains(expression)) { throw new IllegalStateException("Expression not yet recorded: " + expression); } } if (element instanceof JvmDeclaredType) { _doPrepare(resolvedTypes, featureScopeSession, (JvmDeclaredType) element, resolvedTypesByContext); } else if (element instanceof JvmConstructor) { _doPrepare(resolvedTypes, featureScopeSession, (JvmConstructor) element, resolvedTypesByContext); } else if (element instanceof JvmField) { _doPrepare(resolvedTypes, featureScopeSession, (JvmField) element, resolvedTypesByContext); } else if (element instanceof JvmOperation) { _doPrepare(resolvedTypes, featureScopeSession, (JvmOperation) element, resolvedTypesByContext); } }
@Override protected void _doPrepare(ResolvedTypes resolvedTypes, IFeatureScopeSession featureScopeSession, JvmConstructor constructor, Map<JvmIdentifiableElement, ResolvedTypes> resolvedTypesByContext) { super._doPrepare(resolvedTypes, featureScopeSession, constructor, resolvedTypesByContext); doPrepareLocalTypes(resolvedTypesByContext.get(constructor), featureScopeSession, constructor, resolvedTypesByContext); }
/** * Initializes the type inference strategy for the cache field for create extensions. */ @Override protected void _doPrepare(ResolvedTypes resolvedTypes, IFeatureScopeSession featureScopeSession, JvmField field, Map<JvmIdentifiableElement, ResolvedTypes> resolvedTypesByContext) { JvmTypeReference knownType = field.getType(); if (InferredTypeIndicator.isInferred(knownType)) { XComputedTypeReference castedKnownType = (XComputedTypeReference) knownType; EObject sourceElement = associations.getPrimarySourceElement(field); if (sourceElement instanceof XtendFunction) { XtendFunction function = (XtendFunction) sourceElement; if (function.getCreateExtensionInfo() != null) { JvmOperation operation = associations.getDirectlyInferredOperation(function); if (operation != null) { declareTypeParameters(resolvedTypes, field, resolvedTypesByContext); XComputedTypeReference fieldType = getServices().getXtypeFactory().createXComputedTypeReference(); fieldType.setTypeProvider(new CreateCacheFieldTypeReferenceProvider(operation, resolvedTypes, featureScopeSession)); castedKnownType.setEquivalent(fieldType); return; } } } } super._doPrepare(resolvedTypes, featureScopeSession, field, resolvedTypesByContext); doPrepareLocalTypes(resolvedTypesByContext.get(field), featureScopeSession, field, resolvedTypesByContext); }
@Override protected void _doPrepare(ResolvedTypes resolvedTypes, IFeatureScopeSession featureScopeSession, JvmOperation operation, Map<JvmIdentifiableElement, ResolvedTypes> resolvedTypesByContext) { super._doPrepare(resolvedTypes, featureScopeSession, operation, resolvedTypesByContext); resolvedTypes = resolvedTypesByContext.get(operation); if (dispatchHelper.isDispatcherFunction(operation)) {