[CLJ-1129] Invalid ns macro can yield a difficult to trace exception Created: 17/Dec/12 Updated: 19/Dec/12 Resolved: 19/Dec/12 |
|
| Status: | Closed |
| Project: | Clojure |
| Component/s: | None |
| Affects Version/s: | Release 1.4 |
| Fix Version/s: | None |
| Type: | Defect | Priority: | Minor |
| Reporter: | Howard Lewis Ship | Assignee: | Unassigned |
| Resolution: | Duplicate | Votes: | 0 |
| Labels: | aot, feedback | ||
| Description |
|
I inadvertently stripped off the namespace part of my ns macro, so that it was (ns (:use .... Clearly a user error, but an easy one. However, the result (from the REPL or the AOT compiler) was not ideal: Exception in thread "main" java.lang.ClassCastException: clojure.lang.PersistentList cannot be cast to clojure.lang.Named at clojure.core$name.invoke(core.clj:1489) at clojure.core$root_resource.invoke(core.clj:5210) at clojure.core$load_one.invoke(core.clj:5227) at clojure.core$compile$fn__4895.invoke(core.clj:5426) at clojure.core$compile.invoke(core.clj:5425) at clojuresque.tasks.compile$main$fn__64.invoke(compile.clj:23) at clojuresque.cli$with_command_line_STAR_.invoke(cli.clj:92) at clojuresque.tasks.compile$main.doInvoke(compile.clj:6) at clojure.lang.RestFn.applyTo(RestFn.java:137) at clojure.core$apply.invoke(core.clj:601) at clojure.lang.Var.invoke(Var.java:419) at clojuresque.Driver.main(Driver.java:39) The problem here is that there is no indication of what file was being loaded and compiled at the time of the error. Since I was in the middle of refactoring a big swath of code, I had some work to do to track down which file I had mangled. I would like to see a little more logging to the System/err to identify what resource file was being read and compiled by the compiler at the time of the exception. |
| Comments |
| Comment by Andy Fingerhut [ 18/Dec/12 1:12 AM ] |
|
Howard, is this perhaps a duplicate of CLJ-939? Let me know, and I can close this ticket as a duplicate if so. |
| Comment by Howard Lewis Ship [ 18/Dec/12 11:10 AM ] |
|
Yes, looks like a dupe to me. Sorry about that, I did do a search for existing issue before adding mine, but they can be hard to find. |
| Comment by Andy Fingerhut [ 19/Dec/12 1:09 AM ] |
|
Closed as duplicate of CLJ-939. |
[CLJ-956] [java.lang.ClassFormatError: Duplicate method name&signature] when using gen-class Created: 20/Mar/12 Updated: 01/Mar/13 Resolved: 09/Nov/12 |
|
| Status: | Closed |
| Project: | Clojure |
| Component/s: | None |
| Affects Version/s: | Release 1.3 |
| Fix Version/s: | None |
| Type: | Defect | Priority: | Major |
| Reporter: | Daniel Ribeiro | Assignee: | Unassigned |
| Resolution: | Declined | Votes: | 0 |
| Labels: | AOT | ||
| Environment: |
$ java -version |
||
| Description |
|
Hi, When extending a class that defines a method with the signature "public void load();", I get the following load time error: java.lang.ClassFormatError: Duplicate method name&signature Looking into javap, I see that in fact gen-class is generating two entries for the load method. Prefix does not help in this case, as the defined load method is generated anyway. Cheers,
|
| Comments |
| Comment by Daniel Ribeiro [ 22/Mar/12 5:10 AM ] |
|
Hi, I've create this small sample project to exemplify the bug ocurring: https://github.com/danielribeiro/ClojureBugReport Cheers,
|
| Comment by Daniel Ribeiro [ 24/Mar/12 6:57 PM ] |
|
Note that the name load is not special: it works with any abstract method, no matter the name. |
| Comment by Daniel Ribeiro [ 24/Mar/12 7:34 PM ] |
|
Not a bug: I was declaring the method load, which was already defined on the abstract class. The docs do mention this: |
| Comment by Stuart Sierra [ 09/Nov/12 8:40 AM ] |
|
Closed as not-a-bug. |