use of org.eclipse.n4js.n4JS.VariableDeclaration in project n4js by eclipse.
the class SymbolOfIdentifierRef method getDeclaration.
@Override
public EObject getDeclaration() {
VariableDeclaration varDecl = null;
IdentifiableElement id = ir.getId();
if (id instanceof TVariable) {
TVariable tvar = (TVariable) id;
varDecl = (VariableDeclaration) tvar.getAstElement();
return varDecl;
} else {
// id instanceof VariableDeclaration
return id;
}
}
use of org.eclipse.n4js.n4JS.VariableDeclaration in project n4js by eclipse.
the class UsedBeforeDeclaredAnalyserFastVersion method visit.
@Override
protected void visit(ControlFlowElement cfe) {
if (cfe instanceof VariableDeclaration) {
checkLists.put((VariableDeclaration) cfe, new HashSet<>());
}
if (cfe instanceof IdentifierRef) {
IdentifierRef ir = (IdentifierRef) cfe;
IdentifiableElement id = ir.getId();
if (id instanceof TVariable) {
TVariable tvar = (TVariable) id;
id = (VariableDeclaration) tvar.getAstElement();
}
Set<IdentifierRef> refs = checkLists.get(id);
if (refs != null) {
refs.add(ir);
}
}
}
use of org.eclipse.n4js.n4JS.VariableDeclaration in project n4js by eclipse.
the class N4JSStatementValidator method checkForInLoop.
/**
* 9.1.4 Iteration Statements, Constraints 118 (For-In-Statement Constraints) Variable declaration must be a string
*/
@Check
public void checkForInLoop(ForStatement forStatement) {
if (forStatement.isForIn()) {
TypeRef loopVarType = null;
EObject location = null;
RuleEnvironment G = (RuleEnvironment) getContext().get(RuleEnvironment.class);
if (G == null)
// wrongly configured test
return;
if (!forStatement.getVarDeclsOrBindings().isEmpty()) {
VariableDeclarationOrBinding varDeclOrBinding = forStatement.getVarDeclsOrBindings().iterator().next();
location = varDeclOrBinding;
if (varDeclOrBinding instanceof VariableDeclaration) {
loopVarType = ((VariableDeclaration) varDeclOrBinding).getDeclaredTypeRef();
} else {
VariableBinding varBinding = (VariableBinding) varDeclOrBinding;
Result<TypeRef> res = typeSystem.type(G, varBinding.getExpression());
if (!res.failed()) {
loopVarType = res.getFirst();
}
}
} else if (forStatement.getInitExpr() != null) {
location = forStatement.getInitExpr();
Result<TypeRef> res = typeSystem.type(G, forStatement.getInitExpr());
if (!res.failed()) {
loopVarType = res.getFirst();
}
}
if (loopVarType != null) {
Result<Boolean> res = typeSystem.subtype(G, RuleEnvironmentExtensions.stringTypeRef(G), loopVarType);
if (res.failed() || !res.getFirst()) {
addIssue(getMessageForTYS_FOR_IN_VAR_STRING(loopVarType.getTypeRefAsString()), location, TYS_FOR_IN_VAR_STRING);
}
}
}
}
use of org.eclipse.n4js.n4JS.VariableDeclaration in project n4js by eclipse.
the class BuiltInTypeScopeTest method testParsing.
@SuppressWarnings("javadoc")
@Test
public void testParsing() throws Exception {
String content = "var name: any = 'global'";
Script result = parseHelper.parse(content);
Assert.assertNotNull(result);
Assert.assertEquals(1, result.getScriptElements().size());
ScriptElement elem = result.getScriptElements().get(0);
Assert.assertTrue(elem instanceof VariableStatement);
VariableStatement stmt = (VariableStatement) elem;
VariableDeclaration varDecl = stmt.getVarDecl().get(0);
ParameterizedTypeRef typeRef = (ParameterizedTypeRef) varDecl.getDeclaredTypeRef();
Assert.assertFalse("Proxy URI: " + ((InternalEObject) typeRef.getDeclaredType()).eProxyURI(), typeRef.getDeclaredType().eIsProxy());
}
use of org.eclipse.n4js.n4JS.VariableDeclaration 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);
}
Aggregations