@Override public void addLocalToCurrentScope(JvmIdentifiableElement element) { String simpleName = element.getSimpleName(); if (Strings.isNullOrEmpty(simpleName)) return; QualifiedName elementName = QualifiedName.create(simpleName); addLocalToCurrentScope(elementName, element, !getResolver().isShadowingAllowed(elementName)); }
@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)); } }
protected void addLocalToCurrentScope(QualifiedName elementName, JvmIdentifiableElement element, boolean raiseIssueIfShadowing) { if (getResolver().isDisallowedName(elementName)) { resolvedTypes.addDiagnostic(new EObjectDiagnosticImpl( Severity.ERROR, IssueCodes.VARIABLE_NAME_DISALLOWED, "'" + elementName + "' is not a valid name", getResolver().getSourceElement(element), element.eClass().getEStructuralFeature("name"), -1, return; if (getResolver().isDiscouragedName(elementName)) { if (!isIgnored(IssueCodes.VARIABLE_NAME_DISCOURAGED)) { resolvedTypes.addDiagnostic(new EObjectDiagnosticImpl( IssueCodes.VARIABLE_NAME_DISCOURAGED, "'" + elementName + "' is a discouraged name", getResolver().getSourceElement(element), element.eClass().getEStructuralFeature("name"), -1, IssueCodes.VARIABLE_NAME_SHADOWING, "Duplicate local variable " + elementName, getResolver().getSourceElement(element), element.eClass().getEStructuralFeature("name"), -1,
protected ExpressionAwareStackedResolvedTypes doComputeTypes(XExpression expression) { ExpressionAwareStackedResolvedTypes stackedResolvedTypes = pushTypes(expression); ExpressionTypeComputationState state = createExpressionComputationState(expression, stackedResolvedTypes); stackedResolvedTypes.addExpressionScope(expression, state.getFeatureScopeSession(), IExpressionScope.Anchor.BEFORE); getResolver().getTypeComputer().computeTypes(expression, state); stackedResolvedTypes.prepareMergeIntoParent(); if (stackedResolvedTypes.doGetTypeData(expression) == null) { state.acceptActualType(stackedResolvedTypes.getReferenceOwner().newAnyTypeReference()); } stackedResolvedTypes.addExpressionScope(expression, getFeatureScopeSession(), IExpressionScope.Anchor.AFTER); return stackedResolvedTypes; }