RFR 8131027: JShell API/tool: suggest imports for a class

Robert Field robert.field at oracle.com
Thu Jan 28 21:38:41 UTC 2016


This will be a big help -- thanks for coding this.

Below is a pre-review.

JShell:

     Fine.


Eval:

     Looks good.


SourceCodeAnalysis:

     This is public API, so names and comments really matter...

     analyzeType() -- There is a description of where the expression 
begins, but not of where it ends.

     getDeclaredSymbols() -- Please document what "possible" in 
"possible FQNs" means.

     IndexResult --

         This class needs a name that is more descriptive of what it is, 
and the name should align with whatever name and comment are finally 
given to getDeclaredSymbols().    NameLookup? ResolvedName? ...

         The class comment should describe what this class is -- and it 
more than a list of FQNs, as it also deals with the simple name, 
up-to-dateness, resolvability.
         getFqns() -- As above, and probably here rather than there, -- 
what does possible mean?

         getSimpleNameLength() -- Says "unresolvable", but there is a 
test (below) for it being resolvable -- probably just remove that word.  
"right left to", were you meaning "right of"?   "for which the 
candidates could be computed" if they can't be computed, how does that 
effect this method?  Wouldn't return still return the length?  Can that 
phrase just be removed?   Is the a reason that the length (rather than 
the name) is returned?

         isUpToDate() -- I have no idea what this means.

         isResolvable() -- Resolvable in the context of what?

     Throughout class, I would avoid "FQN".  See, for example, the use 
of "fully qualified name" in java/lang.  I would spell it out in 
comments.   The java/lang uses "name" as the base for identifiers, but 
this won't work for getFqns() since it needs to be differentiated from 
simple names.  Perhaps getQualifiedNames().

     Nit: Throughout the JShell code and throughout the JDK codebase the 
convention is that comments start on the line after the "/**" (not on 
the same line).

SourceCodeAnalysisImpl:

     getDeclaredSymbols() -- My reading of the spec (above) is that the 
cursor is at the beginning of the identifier to match, this is at the 
end.  Spec needs clarification or ...

     If there is an @author tag on this file, you should certainly be first.

     currentIndexes and two other fields are declared in the middle of 
the class.  While old conventions forbade this:
https://web.archive.org/web/20130627193836/http://www.oracle.com/technetwork/java/javase/documentation/codeconventions-141855.html
     others don't when there is good reason.  But I mention this because 
there are many forward references to all three of these -- so their 
implied locality is misleading.

     I would need some code context (comments) to be able to properly 
review.

ConsoleIOContext:

     Need more context (code comments) for me to be able to review.

TreeDissector:

     See TypePrinter.

TypePrinter:

     My (unspoken) design for this was to be as stand-alone (untied to 
the JShell architecture) as possible -- esp. since it is subclassed off 
javac, which is why I had that stuff in higher levels.  It could  be 
moved up just one level (to TreeDissector)

ComputeFQNsTest:

     Need tests with multiple answers.  If the other fields of 
IndexResult are interesting enough to be present they should be tested.

InferTypeTest:

     Looks pretty good.  Maybe some other express forms: boolean 
operators, ....

Thanks,
Robert


On 01/22/16 03:40, Jan Lahoda wrote:
> Hello,
>
> I'd like to ask for a review of a patch that adds two new features:
> a) add import: when there is an unresolvable identifier, press 
> "<base-shortcut> i" (*), and a list of known FQNs should be printed, 
> with an ability to easily import any of them.
>
> b) create variable: when there is an expression, press 
> "<base-shortcut> v", and a variable stub will be created, with the 
> expression as the initializer.
>
> The "<base-shortcut>" is either Alt-Enter or Alt-F1, depending on the 
> platform. For Windows,
>
> The patch is here:
> http://cr.openjdk.java.net/~jlahoda/8131027/webrev.00/
>
> For Windows, an additional patch to jdk.internal.le is needed (I'll 
> send a separate review to core-libs for that):
> http://cr.openjdk.java.net/~jlahoda/8147984/webrev.00/
>
> Any comments are welcome!
>
> Thanks,
>    Jan



More information about the kulla-dev mailing list