Package ch.njol.skript.log

Examples of ch.njol.skript.log.ParseLogHandler


    final String v = n.getValue(key);
    if (v == null) {
      Skript.error("The config is missing the entry for '" + key + "' in the database '" + databaseName + "'");
      return null;
    }
    final ParseLogHandler log = SkriptLogger.startParseLogHandler();
    try {
      final T r = Classes.parse(v, type, ParseContext.CONFIG);
      if (r == null)
        log.printError("The entry for '" + key + "' in the database '" + databaseName + "' must be " + Classes.getSuperClassInfo(type).getName().withIndefiniteArticle());
      else
        log.printLog();
      return r;
    } finally {
      log.stop();
    }
  }
View Full Code Here


  }
 
  @SuppressWarnings("null")
  @Override
  public boolean init() {
    final ParseLogHandler log = SkriptLogger.startParseLogHandler();
    try {
      boolean hasValue = false;
      final Class<? extends Event>[] es = ScriptLoader.getCurrentEvents();
      if (es == null) {
        assert false;
        return false;
      }
      for (final Class<? extends Event> e : es) {
        if (getters.containsKey(e)) {
          hasValue = getters.get(e) != null;
          continue;
        }
        final Getter<? extends T, ?> getter = EventValues.getEventValueGetter(e, c, getTime());
        if (getter != null) {
          getters.put(e, getter);
          hasValue = true;
        }
      }
      if (!hasValue) {
        log.printError("There's no " + Classes.getSuperClassInfo(c).getName() + " in " + Utils.a(ScriptLoader.getCurrentEventName()) + " event");
        return false;
      }
      log.printLog();
      return true;
    } finally {
      log.stop();
    }
  }
View Full Code Here

public abstract class Statement extends TriggerItem implements SyntaxElement {
 
  @SuppressWarnings({"rawtypes", "unchecked", "null"})
  @Nullable
  public static Statement parse(final String s, final String defaultError) {
    final ParseLogHandler log = SkriptLogger.startParseLogHandler();
    try {
      final EffFunctionCall f = EffFunctionCall.parse(s);
      if (f != null) {
        log.printLog();
        return f;
      } else if (log.hasError()) {
        log.printError();
        return null;
      } else {
        log.printError();
      }
    } finally {
      log.stop();
    }
    return (Statement) SkriptParser.parse(s, (Iterator) Skript.getStatements().iterator(), defaultError);
  }
View Full Code Here

    expr = "" + expr.trim();
    if (expr.isEmpty()) {
      Skript.error(defaultError);
      return null;
    }
    final ParseLogHandler log = SkriptLogger.startParseLogHandler();
    try {
      final T e = new SkriptParser(expr).parse(source);
      if (e != null) {
        log.printLog();
        return e;
      }
      log.printError(defaultError);
      return null;
    } finally {
      log.stop();
    }
  }
View Full Code Here

    expr = "" + expr.trim();
    if (expr.isEmpty()) {
      Skript.error(defaultError);
      return null;
    }
    final ParseLogHandler log = SkriptLogger.startParseLogHandler();
    final T e;
    try {
      e = new SkriptParser(expr, PARSE_LITERALS).parse(source);
      if (e != null) {
        log.printLog();
        return e;
      }
      log.printError(defaultError);
      return null;
    } finally {
      log.stop();
    }
  }
View Full Code Here

    }
  }
 
  @Nullable
  private final <T extends SyntaxElement> T parse(final Iterator<? extends SyntaxElementInfo<? extends T>> source) {
    final ParseLogHandler log = SkriptLogger.startParseLogHandler();
    try {
      while (source.hasNext()) {
        final SyntaxElementInfo<? extends T> info = source.next();
        patternsLoop: for (int i = 0; i < info.patterns.length; i++) {
          log.clear();
          try {
            final String pattern = info.patterns[i];
            assert pattern != null;
            final ParseResult res = parse_i(pattern, 0, 0);
            if (res != null) {
              int x = -1;
              for (int j = 0; (x = nextUnescaped(pattern, '%', x + 1)) != -1; j++) {
                final int x2 = nextUnescaped(pattern, '%', x + 1);
                if (res.exprs[j] == null) {
                  final String name = pattern.substring(x + 1, x2);
                  if (!name.startsWith("-")) {
                    final ExprInfo vi = getExprInfo(name);
                    final DefaultExpression<?> expr = vi.classes[0].getDefaultExpression();
                    if (expr == null)
                      throw new SkriptAPIException("The class '" + vi.classes[0].getCodeName() + "' does not provide a default expression. Either allow null (with %-" + vi.classes[0].getCodeName() + "%) or make it mandatory [pattern: " + info.patterns[i] + "]");
                    if (!(expr instanceof Literal) && (vi.flagMask & PARSE_EXPRESSIONS) == 0)
                      throw new SkriptAPIException("The default expression of '" + vi.classes[0].getCodeName() + "' is not a literal. Either allow null (with %-*" + vi.classes[0].getCodeName() + "%) or make it mandatory [pattern: " + info.patterns[i] + "]");
                    if (expr instanceof Literal && (vi.flagMask & PARSE_LITERALS) == 0)
                      throw new SkriptAPIException("The default expression of '" + vi.classes[0].getCodeName() + "' is a literal. Either allow null (with %-~" + vi.classes[0].getCodeName() + "%) or make it mandatory [pattern: " + info.patterns[i] + "]");
                    if (!vi.isPlural[0] && !expr.isSingle())
                      throw new SkriptAPIException("The default expression of '" + vi.classes[0].getCodeName() + "' is not a single-element expression. Change your pattern to allow multiple elements or make the expression mandatory [pattern: " + info.patterns[i] + "]");
                    if (vi.time != 0 && !expr.setTime(vi.time))
                      throw new SkriptAPIException("The default expression of '" + vi.classes[0].getCodeName() + "' does not have distinct time states. [pattern: " + info.patterns[i] + "]");
                    if (!expr.init())
                      continue patternsLoop;
                    res.exprs[j] = expr;
                  }
                }
                x = x2;
              }
              final T t = info.c.newInstance();
              if (t.init(res.exprs, i, ScriptLoader.hasDelayBefore, res)) {
                log.printLog();
                return t;
              }
            }
          } catch (final InstantiationException e) {
            assert false;
          } catch (final IllegalAccessException e) {
            assert false;
          }
        }
      }
      log.printError();
      return null;
    } finally {
      log.stop();
    }
  }
View Full Code Here

    assert types.length == 1 || !CollectionUtils.contains(types, Object.class);
    if (expr.isEmpty())
      return null;
    if (context != ParseContext.COMMAND && expr.startsWith("(") && expr.endsWith(")") && next(expr, 0, context) == expr.length())
      return new SkriptParser(this, "" + expr.substring(1, expr.length() - 1)).parseSingleExpr(allowUnparsedLiteral, error, types);
    final ParseLogHandler log = SkriptLogger.startParseLogHandler();
    try {
      if (context == ParseContext.DEFAULT || context == ParseContext.EVENT) {
        final Variable<? extends T> var = parseVariable(expr, types);
        if (var != null) {
          if ((flags & PARSE_EXPRESSIONS) == 0) {
            Skript.error("Variables cannot be used here.");
            log.printError();
            return null;
          }
          log.printLog();
          return var;
        } else if (log.hasError()) {
          log.printError();
          return null;
        }
        final FunctionReference<T> fr = parseFunction(types);
        if (fr != null) {
          log.printLog();
          return new ExprFunctionCall(fr);
        } else if (log.hasError()) {
          log.printError();
          return null;
        }
      }
      log.clear();
      if ((flags & PARSE_EXPRESSIONS) != 0) {
        final Expression<?> e;
        if (expr.startsWith("\"") && expr.endsWith("\"") && expr.length() != 1 && (types[0] == Object.class || CollectionUtils.contains(types, String.class))) {
          e = VariableString.newInstance("" + expr.substring(1, expr.length() - 1));
        } else {
          e = parse(expr, (Iterator) Skript.getExpressions(types), null);
        }
        if (e != null) {
          for (final Class<? extends T> t : types) {
            if (t.isAssignableFrom(e.getReturnType())) {
              log.printLog();
              return (Expression<? extends T>) e;
            }
          }
          for (final Class<? extends T> t : types) {
            final Expression<? extends T> r = e.getConvertedExpression(t);
            if (r != null) {
              log.printLog();
              return r;
            }
          }
          log.printError(e.toString(null, false) + " " + Language.get("is") + " " + notOfType(types), ErrorQuality.NOT_AN_EXPRESSION);
          return null;
        }
        log.clear();
      }
      if ((flags & PARSE_LITERALS) == 0) {
        log.printError();
        return null;
      }
      if (types[0] == Object.class) {
        if (!allowUnparsedLiteral) {
          log.printError();
          return null;
        }
        log.clear();
        log.printLog();
        final LogEntry e = log.getError();
        return (Literal<? extends T>) new UnparsedLiteral(expr, e != null && (error == null || e.quality > error.quality) ? e : error);
      }
      for (final Class<? extends T> c : types) {
        log.clear();
        assert c != null;
        final T t = Classes.parse(expr, c, context);
        if (t != null) {
          log.printLog();
          return new SimpleLiteral<T>(t, false);
        }
      }
      log.printError();
      return null;
    } finally {
      log.stop();
    }
  }
View Full Code Here

    assert types != null && types.length > 0;
    assert types.length == 1 || !CollectionUtils.contains(types, Object.class);
   
    final boolean isObject = types.length == 1 && types[0] == Object.class;
   
    final ParseLogHandler log = SkriptLogger.startParseLogHandler();
    try {
      final Expression<? extends T> r = parseSingleExpr(false, null, types);
      if (r != null) {
        log.printLog();
        return r;
      }
      log.clear();
     
      final List<Expression<? extends T>> ts = new ArrayList<Expression<? extends T>>();
      Kleenean and = Kleenean.UNKNOWN;
      boolean isLiteralList = true;
     
      final List<int[]> pieces = new ArrayList<int[]>();
      {
        final Matcher m = listSplitPattern.matcher(expr);
        int i = 0, j = 0;
        for (; i >= 0 && i <= expr.length(); i = next(expr, i, context)) {
          if (i == expr.length() || m.region(i, expr.length()).lookingAt()) {
            pieces.add(new int[] {j, i});
            if (i == expr.length())
              break;
            j = i = m.end();
          }
        }
        if (i != expr.length()) {
          assert i == -1 && context != ParseContext.COMMAND : i + "; " + expr;
          log.printError("Invalid brackets/variables/text in '" + expr + "'", ErrorQuality.NOT_AN_EXPRESSION);
          return null;
        }
      }
     
      if (pieces.size() == 1) { // not a list of expressions, and a single one has failed to parse above
        if (expr.startsWith("(") && expr.endsWith(")") && next(expr, 0, context) == expr.length()) {
          log.clear();
          log.printLog();
          return new SkriptParser(this, "" + expr.substring(1, expr.length() - 1)).parseExpression(types);
        }
        if (isObject && (flags & PARSE_LITERALS) != 0) { // single expression - can return an UnparsedLiteral now
          log.clear();
          log.printLog();
          return (Expression<? extends T>) new UnparsedLiteral(expr, log.getError());
        }
        // results in useless errors most of the time
//        log.printError("'" + expr + "' " + Language.get("is") + " " + notOfType(types), ErrorQuality.NOT_AN_EXPRESSION);
        log.printError();
        return null;
      }
     
      outer: for (int b = 0; b < pieces.size();) {
        for (int a = pieces.size() - b; a >= 1; a--) {
          if (b == 0 && a == pieces.size()) // i.e. the whole expression - already tried to parse above
            continue;
          final int x = pieces.get(b)[0], y = pieces.get(b + a - 1)[1];
          final String subExpr = "" + expr.substring(x, y).trim();
          assert subExpr.length() < expr.length() : subExpr;
         
          final Expression<? extends T> t;
         
          if (subExpr.startsWith("(") && subExpr.endsWith(")") && next(subExpr, 0, context) == subExpr.length())
            t = new SkriptParser(this, subExpr).parseExpression(types); // only parse as possible expression list if its surrounded by brackets
          else
            t = new SkriptParser(this, subExpr).parseSingleExpr(a == 1, log.getError(), types); // otherwise parse as a single expression only
          if (t != null) {
            isLiteralList &= t instanceof Literal;
            ts.add(t);
            if (b != 0) {
              final String d = expr.substring(pieces.get(b - 1)[1], x).trim();
              if (!d.equals(",")) {
                if (and.isUnknown()) {
                  and = Kleenean.get(!d.equalsIgnoreCase("or")); // nor is and
                } else {
                  if (and != Kleenean.get(!d.equalsIgnoreCase("or"))) {
                    Skript.warning(MULTIPLE_AND_OR + " List: " + expr);
                    and = Kleenean.TRUE;
                  }
                }
              }
            }
            b += a;
            continue outer;
          }
        }
        log.printError();
        return null;
      }
     
//      String lastExpr = expr;
//      int end = expr.length();
//      int expectedEnd = -1;
//      boolean last = false;
//      while (m.find() || (last = !last)) {
//        if (expectedEnd == -1) {
//          if (last)
//            break;
//          expectedEnd = m.start();
//        }
//        final int start = last ? 0 : m.end();
//        final Expression<? extends T> t;
//        if (context != ParseContext.COMMAND && (start < expr.length() && expr.charAt(start) == '(' || end - 1 > 0 && expr.charAt(end - 1) == ')')) {
//          if (start < expr.length() && expr.charAt(start) == '(' && end - 1 > 0 && expr.charAt(end - 1) == ')' && next(expr, start, context) == end)
//            t = new SkriptParser(lastExpr = "" + expr.substring(start + 1, end - 1), flags, context).parseExpression(types);
//          else
//            t = null;
//        } else {
//          t = new SkriptParser(lastExpr = "" + expr.substring(start, end), flags, context).parseSingleExpr(types);
//        }
//        if (t != null) {
//          isLiteralList &= t instanceof Literal;
//          if (!last && m.group(1) != null) {
//            if (and.isUnknown()) {
//              and = Kleenean.get(!m.group(1).equalsIgnoreCase("or")); // nor is and
//            } else {
//              if (and != Kleenean.get(!m.group(1).equalsIgnoreCase("or"))) {
//                Skript.warning(MULTIPLE_AND_OR);
//                and = Kleenean.TRUE;
//              }
//            }
//          }
//          ts.addFirst(t);
//          if (last)
//            break;
//          end = m.start();
//          m.region(0, end);
//        } else {
//          log.clear();
//          if (last)
//            end = -2; // fails the test below
//        }
//      }
//      if (end != expectedEnd) {
//        log.printError("'" + lastExpr + "' " + Language.get("is") + " " + notOfType(types), ErrorQuality.NOT_AN_EXPRESSION);
//        return null;
//      }
     
      log.printLog();
     
      if (ts.size() == 1)
        return ts.get(0);
     
      if (and.isUnknown())
        Skript.warning(MISSING_AND_OR + ": " + expr);
     
      final Class<? extends T>[] exprRetTypes = new Class[ts.size()];
      for (int i = 0; i < ts.size(); i++)
        exprRetTypes[i] = ts.get(i).getReturnType();
     
      if (isLiteralList) {
        final Literal<T>[] ls = ts.toArray(new Literal[ts.size()]);
        assert ls != null;
        return new LiteralList<T>(ls, (Class<T>) Utils.getSuperType(exprRetTypes), !and.isFalse());
      } else {
        final Expression<T>[] es = ts.toArray(new Expression[ts.size()]);
        assert es != null;
        return new ExpressionList<T>(es, (Class<T>) Utils.getSuperType(exprRetTypes), !and.isFalse());
      }
    } finally {
      log.stop();
    }
  }
View Full Code Here

  @SuppressWarnings("unchecked")
  @Nullable
  public final <T> FunctionReference<T> parseFunction(final @Nullable Class<? extends T>... types) {
    if (context != ParseContext.DEFAULT && context != ParseContext.EVENT)
      return null;
    final ParseLogHandler log = SkriptLogger.startParseLogHandler();
    try {
      final Matcher m = functionCallPattern.matcher(expr);
      if (m.matches()) {
        if ((flags & PARSE_EXPRESSIONS) == 0) {
          Skript.error("Functions cannot be used here.");
          log.printError();
          return null;
        }
        final String functionName = "" + m.group(1);
        final Function<?> function = Functions.getFunction(functionName);
        if (function == null) {
          Skript.error("The function '" + functionName + "' does not exist");
          log.printError();
          return null;
        }
        final String args = m.group(2);
        final List<Expression<?>> params = new ArrayList<Expression<?>>();
        if (args.length() != 0) {
          final int p = 0;
          int j = 0;
          for (int i = 0; i != -1 && i <= args.length(); i = next(args, i, context)) {
            if (i == args.length() || args.charAt(i) == ',') {
              final Expression<?> e = new SkriptParser("" + args.substring(j, i).trim(), flags | PARSE_LITERALS, context).parseExpression(function.getParameter(p).getType().getC());
              if (e == null) {
                log.printError("Can't understand this expression: '" + args.substring(j, i) + "'", ErrorQuality.NOT_AN_EXPRESSION);
                return null;
              }
              params.add(e);
              j = i + 1;
            }
          }
        }
        @SuppressWarnings("null")
        final FunctionReference<T> e = new FunctionReference<T>(functionName, SkriptLogger.getNode(), types, params.toArray(new Expression[params.size()]));
        if (!e.validateFunction(true)) {
          log.printError();
          return null;
        }
        log.printLog();
        return e;
      }
      log.printLog();
      return null;
    } finally {
      log.stop();
    }
  }
View Full Code Here

 
  @Nullable
  private NonNullPair<SkriptEventInfo<?>, SkriptEvent> parseEvent() {
    assert context == ParseContext.EVENT;
    assert flags == PARSE_LITERALS;
    final ParseLogHandler log = SkriptLogger.startParseLogHandler();
    try {
      for (final SkriptEventInfo<?> info : Skript.getEvents()) {
        for (int i = 0; i < info.patterns.length; i++) {
          log.clear();
          try {
            final String pattern = info.patterns[i];
            assert pattern != null;
            final ParseResult res = parse_i(pattern, 0, 0);
            if (res != null) {
              final SkriptEvent e = info.c.newInstance();
              final Literal<?>[] ls = Arrays.copyOf(res.exprs, res.exprs.length, Literal[].class);
              assert ls != null;
              if (!e.init(ls, i, res)) {
                log.printError();
                return null;
              }
              log.printLog();
              return new NonNullPair<SkriptEventInfo<?>, SkriptEvent>(info, e);
            }
          } catch (final InstantiationException e) {
            assert false;
          } catch (final IllegalAccessException e) {
            assert false;
          }
        }
      }
      log.printError(null);
      return null;
    } finally {
      log.stop();
    }
  }
View Full Code Here

TOP

Related Classes of ch.njol.skript.log.ParseLogHandler

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.