Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Stacktrace throws NPE with Clojure 1.10 #592

Closed
mseddon opened this issue Jan 28, 2019 · 1 comment
Closed

Stacktrace throws NPE with Clojure 1.10 #592

mseddon opened this issue Jan 28, 2019 · 1 comment

Comments

@mseddon
Copy link

mseddon commented Jan 28, 2019

When invoking the nREPL stacktrace op after trying to evaluate an unbound symbol at the repl, using clojure cli and clojure 1.10, stacktrace causes an internal exception in nrepl, which is never reported to the nrepl client, but logged to stderr.

Expected behavior

Stacktrace should return the stack trace, or report an error to the nREPL client.

Actual behavior

Stacktrace does not return anything, but an exception is logged in the console:

ERROR: Unhandled REPL handler exception processing message {:op stacktrace, :id 10, :session 18abd824-1cdc-40df-83c2-e309783885a1}

java.lang.NullPointerException

	at clojure.string$replace_first.invokeStatic(string.clj:165)

	at clojure.string$replace_first.invoke(string.clj:138)
	at cider.nrepl.middleware.stacktrace$relative_path.invokeStatic(stacktrace.clj:195)
	at cider.nrepl.middleware.stacktrace$relative_path.invoke(stacktrace.clj:189)

	at cider.nrepl.middleware.stacktrace$extract_location.invokeStatic(stacktrace.clj:209)
	at cider.nrepl.middleware.stacktrace$extract_location.invoke(stacktrace.clj:197)
	at clojure.core$comp$fn__5792.invoke(core.clj:2569)

	at clojure.core$map$fn__5851.invoke(core.clj:2755)
	at clojure.lang.LazySeq.sval(LazySeq.java:42)
	at clojure.lang.LazySeq.seq(LazySeq.java:51)


	at clojure.lang.RT.seq(RT.java:531)

	at clojure.core$seq__5387.invokeStatic(core.clj:137)
	at clojure.core$seq__5387.invoke(core.clj:137)
	at cider.nrepl.middleware.stacktrace$handle_stacktrace.invokeStatic(stacktrace.clj:319)
	at cider.nrepl.middleware.stacktrace$handle_stacktrace.invoke(stacktrace.clj:316)
	at clojure.lang.Var.invoke(Var.java:388)
	at cider.nrepl$wrap_stacktrace$fn__1717.invoke(nrepl.clj:413)
	at nrepl.middleware$wrap_conj_descriptor$fn__611.invoke(middleware.clj:17)
	at cider.nrepl$wrap_undef$fn__1749.invoke(nrepl.clj:472)
	at nrepl.middleware$wrap_conj_descriptor$fn__611.invoke(middleware.clj:17)
	at cider.nrepl$wrap_format$fn__1635.invoke(nrepl.clj:190)
	at nrepl.middleware$wrap_conj_descriptor$fn__611.invoke(middleware.clj:17)
	at cider.nrepl$wrap_resource$fn__1701.invoke(nrepl.clj:385)

	at nrepl.middleware$wrap_conj_descriptor$fn__611.invoke(middleware.clj:17)
	at cider.nrepl$wrap_profile$fn__1685.invoke(nrepl.clj:322)
	at nrepl.middleware$wrap_conj_descriptor$fn__611.invoke(middleware.clj:17)
	at cider.nrepl$wrap_complete$fn__1609.invoke(nrepl.clj:140)

	at nrepl.middleware$wrap_conj_descriptor$fn__611.invoke(middleware.clj:17)
	at cider.nrepl$wrap_ns$fn__1669.invoke(nrepl.clj:281)
	at nrepl.middleware$wrap_conj_descriptor$fn__611.invoke(middleware.clj:17)

	at cider.nrepl$wrap_spec$fn__1709.invoke(nrepl.clj:397)
	at nrepl.middleware$wrap_conj_descriptor$fn__611.invoke(middleware.clj:17)
	at nrepl.middleware.interruptible_eval$interruptible_eval$fn__940.invoke(interruptible_eval.clj:246)
	at nrepl.middleware$wrap_conj_descriptor$fn__611.invoke(middleware.clj:17)

	at cider.nrepl$wrap_debug$fn__1619.invoke(nrepl.clj:160)
	at nrepl.middleware$wrap_conj_descriptor$fn__611.invoke(middleware.clj:17)
	at cider.nrepl$wrap_enlighten$fn__1627.invoke(nrepl.clj:186)

	at nrepl.middleware$wrap_conj_descriptor$fn__611.invoke(middleware.clj:17)
	at nrepl.middleware.session$add_stdin$fn__1057.invoke(session.clj:243)
	at nrepl.middleware$wrap_conj_descriptor$fn__611.invoke(middleware.clj:17)

	at nrepl.middleware.load_file$wrap_load_file$fn__977.invoke(load_file.clj:79)
	at nrepl.middleware$wrap_conj_descriptor$fn__611.invoke(middleware.clj:17)
	at cider.nrepl$wrap_content_type$fn__1577.invoke(nrepl.clj:107)

	at nrepl.middleware$wrap_conj_descriptor$fn__611.invoke(middleware.clj:17)
	at cider.nrepl$wrap_info$fn__1643.invoke(nrepl.clj:205)
	at nrepl.middleware$wrap_conj_descriptor$fn__611.invoke(middleware.clj:17)
	at cider.piggieback$wrap_cljs_repl$fn__1458.invoke(piggieback.clj:314)

	at nrepl.middleware$wrap_conj_descriptor$fn__611.invoke(middleware.clj:17)
	at cider.nrepl$wrap_inspect$fn__1653.invoke(nrepl.clj:224)

	at nrepl.middleware$wrap_conj_descriptor$fn__611.invoke(middleware.clj:17)
	at nrepl.middleware.pr_values$pr_values$fn__869.invoke(pr_values.clj:69)

	at nrepl.middleware$wrap_conj_descriptor$fn__611.invoke(middleware.clj:17)
	at cider.nrepl$wrap_test$fn__1725.invoke(nrepl.clj:423)
	at nrepl.middleware$wrap_conj_descriptor$fn__611.invoke(middleware.clj:17)

	at cider.nrepl.middleware.pprint$handle_pprint_fn.invokeStatic(pprint.clj:29)
	at cider.nrepl.middleware.pprint$handle_pprint_fn.invoke(pprint.clj:24)
	at clojure.lang.Var.invoke(Var.java:388)
	at cider.nrepl$wrap_pprint_fn$fn__1567.invoke(nrepl.clj:87)

	at nrepl.middleware$wrap_conj_descriptor$fn__611.invoke(middleware.clj:17)
	at cider.nrepl$wrap_tracker$fn__1741.invoke(nrepl.clj:461)
	at nrepl.middleware$wrap_conj_descriptor$fn__611.invoke(middleware.clj:17)

	at cider.nrepl$wrap_out$fn__1677.invoke(nrepl.clj:313)
	at nrepl.middleware$wrap_conj_descriptor$fn__611.invoke(middleware.clj:17)

	at nrepl.middleware.session$session$fn__1042.invoke(session.clj:197)
	at nrepl.middleware$wrap_conj_descriptor$fn__611.invoke(middleware.clj:17)
	at cider.nrepl$wrap_version$fn__1757.invoke(nrepl.clj:480)

	at nrepl.middleware$wrap_conj_descriptor$fn__611.invoke(middleware.clj:17)
	at cider.nrepl$wrap_classpath$fn__1601.invoke(nrepl.clj:134)
	at nrepl.middleware$wrap_conj_descriptor$fn__611.invoke(middleware.clj:17)

	at nrepl.server$handle_STAR_.invokeStatic(server.clj:18)
	at nrepl.server$handle_STAR_.invoke(server.clj:15)
	at nrepl.server$handle$fn__1079.invoke(server.clj:27)

	at clojure.core$binding_conveyor_fn$fn__5739.invoke(core.clj:2030)
	at clojure.lang.AFn.call(AFn.java:18)
	at java.util.concurrent.FutureTask.run(Unknown Source)

	at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at java.lang.Thread.run(Unknown Source)

Steps to reproduce the problem

deps.edn:

{:deps
  {org.clojure/clojure {:mvn/version "1.10.0"}}}

Launched under windows with the following command:

clojure -Sdeps "{:deps {cider/cider-nrepl {:mvn/version \`"0.20.1-SNAPSHOT\`"} cider/piggieback {:mvn/version \`"0.3.10\`"}}}" -m nrepl.cmdline --middleware "[cider.nrepl/cider-middleware cider.piggieback/wrap-cljs-repl]"

The issue seems to be clojure 1.10, for example:

{:deps
  {org.clojure/clojure {:mvn/version "1.9.0"}}}

behaves as expected.

Interestingly the stderr report when the exception occurs is:

Clojure 1.9:

CompilerException java.lang.RuntimeException: Unable to resolve symbol: wer in this context, compiling:(null:0:0)

vs

Clojure 1.10:

Syntax error compiling at (REPL:0:0).

It looks to me to be identical to #549, and it is almost as though location is nil in 1.9, but REPL in 1.10, so cider tries to treat it as an error coming from a file, but I haven't looked deeply.

This is probably a duplicate of clojure-emacs/cider#2443, although that's cider not nrepl itself.

Environment & Version information

cider-nrepl version

0.19.0, 0.20.1-SNAPSHOT and 0.20.0

Java version

1.8

Operating system

Windows 10

@bbatsov
Copy link
Member

bbatsov commented May 3, 2019

I think we fixed this is 0.21.

@bbatsov bbatsov closed this as completed May 3, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants