Exemplo n.º 1
0
  @Override
  public void check(final ASTDeclaration astDeclaration) {
    checkArgument(
        astDeclaration.getEnclosingScope().isPresent(),
        "Declaration hast no scope. Run symboltable creator.");
    final Scope scope = astDeclaration.getEnclosingScope().get();

    for (String var : astDeclaration.getVars()) {
      // tries to resolve the variable name as type. if it is possible, then the variable name
      // clashes with type name is reported as an error
      final Optional<NESTMLTypeSymbol> res = scope.resolve(var, NESTMLTypeSymbol.KIND);

      // could resolve type as variable, report an error
      if (res.isPresent()) {
        Log.error(
            ERROR_CODE + ":" + String.format(ERROR_MSG_FORMAT, var),
            astDeclaration.get_SourcePositionEnd());
      }
    }
  }
Exemplo n.º 2
0
  @Override
  public void check(final ASTAliasDecl alias) {
    final ASTDeclaration decl = alias.getDeclaration();
    checkState(decl.getEnclosingScope().isPresent(), "No scope assigned to the node: " + decl);
    final Scope scope = decl.getEnclosingScope().get();

    if (alias.isAlias()) {
      // per default aliases have only a single variable. it is checked by the AliasHasOneVar coco.
      final String aliasVar = decl.getVars().get(0);
      final String varTypeName = AstUtils.computeTypeName(decl.getDatatype());
      if (isSetterPresent(aliasVar, varTypeName, scope)
          || AliasInverter.isRelativeExpression(decl.getExpr().get())) {
        Log.trace(
            "The setter will be generated or used for the alias  at "
                + alias.get_SourcePositionStart().toString(),
            ERROR_CODE);
      }
    }
  }