You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
First problem mentioned above was straightforward to
fix so I won't be going into details.
The second one deserves more attention. From now, classes
corresponding to objects are properly reported as inner
classes. Also, members (classes, objects) of objects are
reported as inner classes of classes corresponding to
objects.
There's one caveat though: top level objects get two
classes (regular and mirror). Members of top-level
objects are declared as inner classes of mirror class
and not regular one. The reason for that is to allow
importing them from Java. For example:
object A { class B }
will be compiled into following classes: A, A$, A$B.
If we declared A$B as inner class of A$ (regular class
for objects) then it would be impossible to import
B using "import A.B" or "import A$.B" constructs. The
reason for that is that Java compiler seems to blindly
put dollars instead of looking at InnerClasses attribute.
Since non-top-level objects don't have a mirror class
it's impossible to use the same solution. Thus, in case
like this:
object A { object B { class C } }
it's impossible to import C from Java. That's the tradeoff
for fixing other (more serious) problems. It's never been
possible to do that in a clean way so we are not making
situation worse.
As a nice consequence of this change, we get better way to
refer to inner members of top-level objects. It's been
reflected in one of test-cases that is updated by this
change.
Fixes #4789#4819#4820#4983 and possibly some
other tickets related to reflection.
Compile following code:
and check InnerClasses attribute for Z2, it'll print:
which is incomplete because entry for Y (being inner class of X) is missing.
For definition of InnerClass attribute check JVM spec. 4.8.5.
Also, checked that Java compiler generates complete table in corresponding case.
The text was updated successfully, but these errors were encountered: