@Override protected IResolvedTypes delegate() { return forked.getResolvedTypes(); }
protected ResolvedTypes getResolvedTypes() { return state.getResolvedTypes(); }
protected ResolvedTypes captureResolvedTypes(ITypeComputationState state) { ResolvedTypes capturedResolvedTypes = ((AbstractTypeComputationState) state).getResolvedTypes(); return new CapturedLocalElementsAwareStackedResolvedTypes(capturedResolvedTypes, resolvedTypes); }
@Override public UnboundTypeReference createUnboundTypeReference(XExpression expression, JvmTypeParameter typeParameter) { return getResolvedTypes().createUnboundTypeReference(expression, typeParameter); }
@Override public void acceptCandidate(XExpression expression, IApplicableCandidate candidate) { getResolvedTypes().acceptCandidate(expression, candidate); }
protected ExpressionAwareStackedResolvedTypes pushTypes(XExpression expression) { return getResolvedTypes().pushTypes(expression); }
@Override public void refineExpectedType(XExpression expression, LightweightTypeReference expectation) { TypeExpectation typeExpectation = new TypeExpectation(expectation, this, false); getResolvedTypes().refineExpectedType(expression, typeExpectation); }
protected void assignType(JvmIdentifiableElement element, /* @Nullable */ LightweightTypeReference actualType, boolean addToChildScope) { if (actualType != null) { state.getResolvedTypes().setType(element, actualType); } else { state.getResolvedTypes().setType(element, state.getReferenceOwner().newAnyTypeReference()); } if (addToChildScope) state.addLocalToCurrentScope(element); }
@Override public void addExtensionsToCurrentScope(List<? extends JvmIdentifiableElement> extensionProviders) { if (extensionProviders.isEmpty()) return; if (extensionProviders.size() == 1) { addExtensionToCurrentScope(extensionProviders.get(0)); return; } Map<XExpression, LightweightTypeReference> prototypeToType = Maps2.newLinkedHashMapWithExpectedSize(extensionProviders.size()); for(JvmIdentifiableElement extensionProvider: extensionProviders) { LightweightTypeReference knownType = getResolvedTypes().getActualType(extensionProvider); if (knownType != null && !knownType.isAny() && !knownType.isUnknown()) { XFeatureCall prototype = getResolver().getXbaseFactory().createXFeatureCall(); prototype.setFeature(extensionProvider); prototypeToType.put(prototype, knownType); } } if (!prototypeToType.isEmpty()) featureScopeSession = featureScopeSession.addToExtensionScope(prototypeToType); }
@Override public void addExtensionToCurrentScope(JvmIdentifiableElement extensionProvider) { LightweightTypeReference knownType = getResolvedTypes().getActualType(extensionProvider); if (knownType != null && !knownType.isAny() && !knownType.isUnknown()) { XFeatureCall prototype = getResolver().getXbaseFactory().createXFeatureCall(); prototype.setFeature(extensionProvider); featureScopeSession = featureScopeSession.addToExtensionScope(Collections.<XExpression, LightweightTypeReference>singletonMap(prototype, knownType)); } }
@Override public final ITypeComputationResult computeTypes(/* @Nullable */ XExpression expression) { resolvedTypes.checkCanceled(); if (expression != null) { if (expression.eContainer() == null && expression.eResource() == null) throw new IllegalStateException("Dangling expression: " + expression); assert getResolvedTypes().doGetTypeData(expression) == null : "Expression was already resolved: " + expression; ExpressionAwareStackedResolvedTypes stackedResolvedTypes = doComputeTypes(expression); stackedResolvedTypes.performMergeIntoParent(); return new ResolutionBasedComputationResult(expression, resolvedTypes); } else { return new NoTypeResult(null, getReferenceOwner()); } }