diff --git a/src/main/java/ch/njol/skript/lang/SkriptParser.java b/src/main/java/ch/njol/skript/lang/SkriptParser.java index 2f72bf326ed..36343e5c139 100644 --- a/src/main/java/ch/njol/skript/lang/SkriptParser.java +++ b/src/main/java/ch/njol/skript/lang/SkriptParser.java @@ -369,15 +369,20 @@ private final Expression parseSingleExpr(final boolean allowUnp log.printError(); return null; } - if (allowUnparsedLiteral && types[0] == Object.class) { + if (types[0] == Object.class) { + // Do check if a literal with this name actually exists before returning an UnparsedLiteral + if (!allowUnparsedLiteral || Classes.parseSimple(expr, Object.class, context) == null) { + log.printError(); + return null; + } log.clear(); - LogEntry e = log.getError(); + final LogEntry e = log.getError(); return (Literal) new UnparsedLiteral(expr, e != null && (error == null || e.quality > error.quality) ? e : error); } for (final Class c : types) { log.clear(); assert c != null; - T t = Classes.parse(expr, c, context); + final T t = Classes.parse(expr, c, context); if (t != null) { log.printLog(); return new SimpleLiteral<>(t, false); @@ -563,14 +568,20 @@ else if (!hasSingular && hasPlural) log.printError(); return null; } - if (allowUnparsedLiteral && vi.classes[0].getC() == Object.class) { + if (vi.classes[0].getC() == Object.class) { + // Do check if a literal with this name actually exists before returning an UnparsedLiteral + if (!allowUnparsedLiteral || Classes.parseSimple(expr, Object.class, context) == null) { + log.printError(); + return null; + } log.clear(); - LogEntry e = log.getError(); + final LogEntry e = log.getError(); return new UnparsedLiteral(expr, e != null && (error == null || e.quality > error.quality) ? e : error); } - for (ClassInfo ci : vi.classes) { + for (final ClassInfo ci : vi.classes) { log.clear(); - Object t = Classes.parse(expr, ci.getC(), context); + assert ci.getC() != null; + final Object t = Classes.parse(expr, ci.getC(), context); if (t != null) { log.printLog(); return new SimpleLiteral<>(t, false, new UnparsedLiteral(expr)); @@ -613,7 +624,7 @@ public final Expression parseExpression(final Class r = parseSingleExpr(false, null, types); + final Expression r = parseSingleExpr(true, null, types); if (r != null) { log.printLog(); return r; @@ -739,7 +750,7 @@ public final Expression parseExpression(final ExprInfo vi) { final ParseLogHandler log = SkriptLogger.startParseLogHandler(); try { // Attempt to parse a single expression - final Expression r = parseSingleExpr(false, null, vi); + final Expression r = parseSingleExpr(true, null, vi); if (r != null) { log.printLog(); return r;