Search in sources :

Example 11 with IdentifierRef

use of org.eclipse.n4js.n4JS.IdentifierRef in project n4js by eclipse.

the class InternalTypeSystem method applyRuleExpectedTypeInForStatement.

protected Result<TypeRef> applyRuleExpectedTypeInForStatement(final RuleEnvironment G, final RuleApplicationTrace _trace_, final ForStatement forStmnt, final Expression expression) throws RuleFailedException {
    // output parameter
    TypeRef T = null;
    if ((forStmnt.isForOf() && (expression == forStmnt.getExpression()))) {
        final Wildcard wildThing = TypeRefsFactory.eINSTANCE.createWildcard();
        boolean _isTopOfDestructuringForStatement = DestructureUtils.isTopOfDestructuringForStatement(forStmnt);
        if (_isTopOfDestructuringForStatement) {
        } else {
            VariableDeclaration _xifexpression = null;
            boolean _isEmpty = forStmnt.getVarDecl().isEmpty();
            boolean _not = (!_isEmpty);
            if (_not) {
                _xifexpression = forStmnt.getVarDecl().get(0);
            }
            final VariableDeclaration varDeclInFor = _xifexpression;
            VariableDeclaration _xifexpression_1 = null;
            if (((forStmnt.getInitExpr() instanceof IdentifierRef) && (((IdentifierRef) forStmnt.getInitExpr()).getId() instanceof VariableDeclaration))) {
                Expression _initExpr = forStmnt.getInitExpr();
                IdentifiableElement _id = ((IdentifierRef) _initExpr).getId();
                _xifexpression_1 = ((VariableDeclaration) _id);
            }
            final VariableDeclaration varDeclOutside = _xifexpression_1;
            boolean _or = false;
            TypeRef _declaredTypeRef = null;
            if (varDeclInFor != null) {
                _declaredTypeRef = varDeclInFor.getDeclaredTypeRef();
            }
            boolean _tripleNotEquals = (_declaredTypeRef != null);
            if (_tripleNotEquals) {
                _or = true;
            } else {
                _or = (varDeclOutside != null);
            }
            if (_or) {
                VariableDeclaration _xifexpression_2 = null;
                if ((varDeclOutside != null)) {
                    _xifexpression_2 = varDeclOutside;
                } else {
                    _xifexpression_2 = varDeclInFor;
                }
                final VariableDeclaration varDecl = _xifexpression_2;
                /* G |- varDecl : var TypeRef varTypeRef */
                TypeRef varTypeRef = null;
                Result<TypeRef> result = typeInternal(G, _trace_, varDecl);
                checkAssignableTo(result.getFirst(), TypeRef.class);
                varTypeRef = (TypeRef) result.getFirst();
                wildThing.setDeclaredUpperBound(TypeUtils.<TypeRef>copyIfContained(varTypeRef));
            }
        }
        T = RuleEnvironmentExtensions.iterableTypeRef(G, wildThing);
    } else {
        if ((forStmnt.isForIn() && (expression == forStmnt.getExpression()))) {
            T = TypeUtils.createNonSimplifiedUnionType(RuleEnvironmentExtensions.objectTypeRef(G), RuleEnvironmentExtensions.stringTypeRef(G), RuleEnvironmentExtensions.argumentsTypeRef(G));
        }
    }
    return new Result<TypeRef>(T);
}
Also used : Wildcard(org.eclipse.n4js.ts.typeRefs.Wildcard) BinaryBitwiseExpression(org.eclipse.n4js.n4JS.BinaryBitwiseExpression) AssignmentExpression(org.eclipse.n4js.n4JS.AssignmentExpression) IndexedAccessExpression(org.eclipse.n4js.n4JS.IndexedAccessExpression) UnionTypeExpression(org.eclipse.n4js.ts.typeRefs.UnionTypeExpression) FunctionExpression(org.eclipse.n4js.n4JS.FunctionExpression) PromisifyExpression(org.eclipse.n4js.n4JS.PromisifyExpression) UnaryExpression(org.eclipse.n4js.n4JS.UnaryExpression) ParenExpression(org.eclipse.n4js.n4JS.ParenExpression) ParameterizedCallExpression(org.eclipse.n4js.n4JS.ParameterizedCallExpression) AdditiveExpression(org.eclipse.n4js.n4JS.AdditiveExpression) PostfixExpression(org.eclipse.n4js.n4JS.PostfixExpression) YieldExpression(org.eclipse.n4js.n4JS.YieldExpression) ConditionalExpression(org.eclipse.n4js.n4JS.ConditionalExpression) FunctionTypeExpression(org.eclipse.n4js.ts.typeRefs.FunctionTypeExpression) RelationalExpression(org.eclipse.n4js.n4JS.RelationalExpression) NewExpression(org.eclipse.n4js.n4JS.NewExpression) IntersectionTypeExpression(org.eclipse.n4js.ts.typeRefs.IntersectionTypeExpression) AwaitExpression(org.eclipse.n4js.n4JS.AwaitExpression) CommaExpression(org.eclipse.n4js.n4JS.CommaExpression) Expression(org.eclipse.n4js.n4JS.Expression) CastExpression(org.eclipse.n4js.n4JS.CastExpression) BinaryLogicalExpression(org.eclipse.n4js.n4JS.BinaryLogicalExpression) EqualityExpression(org.eclipse.n4js.n4JS.EqualityExpression) ShiftExpression(org.eclipse.n4js.n4JS.ShiftExpression) ParameterizedPropertyAccessExpression(org.eclipse.n4js.n4JS.ParameterizedPropertyAccessExpression) MultiplicativeExpression(org.eclipse.n4js.n4JS.MultiplicativeExpression) N4ClassExpression(org.eclipse.n4js.n4JS.N4ClassExpression) ThisTypeRef(org.eclipse.n4js.ts.typeRefs.ThisTypeRef) ParameterizedTypeRef(org.eclipse.n4js.ts.typeRefs.ParameterizedTypeRef) BaseTypeRef(org.eclipse.n4js.ts.typeRefs.BaseTypeRef) FunctionTypeRef(org.eclipse.n4js.ts.typeRefs.FunctionTypeRef) ExistentialTypeRef(org.eclipse.n4js.ts.typeRefs.ExistentialTypeRef) BoundThisTypeRef(org.eclipse.n4js.ts.typeRefs.BoundThisTypeRef) StructuralTypeRef(org.eclipse.n4js.ts.typeRefs.StructuralTypeRef) TypeRef(org.eclipse.n4js.ts.typeRefs.TypeRef) TypeTypeRef(org.eclipse.n4js.ts.typeRefs.TypeTypeRef) StaticBaseTypeRef(org.eclipse.n4js.ts.typeRefs.StaticBaseTypeRef) ComposedTypeRef(org.eclipse.n4js.ts.typeRefs.ComposedTypeRef) UnknownTypeRef(org.eclipse.n4js.ts.typeRefs.UnknownTypeRef) IdentifiableElement(org.eclipse.n4js.ts.types.IdentifiableElement) VariableDeclaration(org.eclipse.n4js.n4JS.VariableDeclaration) IdentifierRef(org.eclipse.n4js.n4JS.IdentifierRef) Result(org.eclipse.xsemantics.runtime.Result) StructuralTypingResult(org.eclipse.n4js.typesystem.StructuralTypingResult)

Aggregations

IdentifierRef (org.eclipse.n4js.n4JS.IdentifierRef)11 ParameterizedPropertyAccessExpression (org.eclipse.n4js.n4JS.ParameterizedPropertyAccessExpression)4 IndexedAccessExpression (org.eclipse.n4js.n4JS.IndexedAccessExpression)3 NamedImportSpecifier (org.eclipse.n4js.n4JS.NamedImportSpecifier)3 VariableDeclaration (org.eclipse.n4js.n4JS.VariableDeclaration)3 IdentifiableElement (org.eclipse.n4js.ts.types.IdentifiableElement)3 EObject (org.eclipse.emf.ecore.EObject)2 ENotificationImpl (org.eclipse.emf.ecore.impl.ENotificationImpl)2 AdditiveExpression (org.eclipse.n4js.n4JS.AdditiveExpression)2 AssignmentExpression (org.eclipse.n4js.n4JS.AssignmentExpression)2 AwaitExpression (org.eclipse.n4js.n4JS.AwaitExpression)2 BinaryBitwiseExpression (org.eclipse.n4js.n4JS.BinaryBitwiseExpression)2 BinaryLogicalExpression (org.eclipse.n4js.n4JS.BinaryLogicalExpression)2 CastExpression (org.eclipse.n4js.n4JS.CastExpression)2 CommaExpression (org.eclipse.n4js.n4JS.CommaExpression)2 ConditionalExpression (org.eclipse.n4js.n4JS.ConditionalExpression)2 EqualityExpression (org.eclipse.n4js.n4JS.EqualityExpression)2 Expression (org.eclipse.n4js.n4JS.Expression)2 FunctionExpression (org.eclipse.n4js.n4JS.FunctionExpression)2 ImportDeclaration (org.eclipse.n4js.n4JS.ImportDeclaration)2