|
|
(11 intermediate revisions by the same user not shown) |
Line 1: |
Line 1: |
− | CURRENTLY THIS IS JUST A PLACEHOLDER DUPLICATING THE CONTENT OF JAVA9/EXAMPLES - ETA : 1ST APRIL 2018
| + | |
| | | |
| This is an informal page listing examples of features that are implemented by the [https://marketplace.eclipse.org/content/java-10-support-oxygen Java 10 Support for Oxygen]. You are welcome to try out these examples. If you find bugs, please file a bug after checking for a duplicate entry [https://bugs.eclipse.org/bugs/buglist.cgi?cmdtype=dorem&list_id=17341573&namedcmd=J10.Open&remaction=run&sharer_id=152344 here]. | | This is an informal page listing examples of features that are implemented by the [https://marketplace.eclipse.org/content/java-10-support-oxygen Java 10 Support for Oxygen]. You are welcome to try out these examples. If you find bugs, please file a bug after checking for a duplicate entry [https://bugs.eclipse.org/bugs/buglist.cgi?cmdtype=dorem&list_id=17341573&namedcmd=J10.Open&remaction=run&sharer_id=152344 here]. |
Line 13: |
Line 13: |
| |- | | |- |
| ! scope="row" | Add Java 10 JRE | | ! scope="row" | Add Java 10 JRE |
− | | Use Eclipse Preferences -> Java -> Installed JREs -> Add <br> | + | | Use Window -> Preferences-> Java -> Installed JREs -> Add... <br> |
| + | <br> |
| [[File:FileAddJ10.jpg]] | | [[File:FileAddJ10.jpg]] |
| + | <br> |
| + | [note: Eclipse -> Preferences in Mac / Window -> Preferences in Windows] |
| | Java 10 JRE recognized as a valid JRE | | | Java 10 JRE recognized as a valid JRE |
| |- | | |- |
| ! scope="row" | Project JRE | | ! scope="row" | Project JRE |
− | | In Package Explorer Use Project Context Menu and add Java 10 JRE || JRE specific (eg Object) gets resolved in the project. | + | | In Package Explorer Use project's context menu and add Java 10 JRE || JRE specific (eg Object) gets resolved in the project. |
| |- | | |- |
| ! scope="row" | Package Explorer | | ! scope="row" | Package Explorer |
Line 61: |
Line 64: |
| <br> | | <br> |
| [[File:var.compile.jpg]] | | [[File:var.compile.jpg]] |
− | | code compiles | + | | Code compiles |
| |- | | |- |
| ! scope="row" | Compiler Error Cases | | ! scope="row" | Compiler Error Cases |
Line 76: |
Line 79: |
| } | | } |
| </source> | | </source> |
− | | compiler errors are shown | + | | Compiler errors are shown |
| |- | | |- |
− | ! colspan="3" | Editing with Ease: Completion for 'var' | + | ! colspan="3" | Essential Utilities: Code Completion, Hover and Quick Fix. |
| |- | | |- |
− | ! scope="row" | Keyword Completion (1) | + | ! scope="row" | Basic context based var completion |
− | | In the module-info.java file of say second project, after <code> module first {</code>, press completion key (for eg, ctrl+space in windows) | + | | |
| <br> | | <br> |
| <br> | | <br> |
− | [[File:Keycomplete1.jpg]] | + | <source lang="java"> |
− | | keywords <code>exports</code>, <code>opens</code>, <code>requires</code>, <code>provides</code> and <code>uses</code> shown | + | package packvar; |
| + | |
| + | public class VarComplete { |
| + | public static void main(String[] args) { |
| + | String s = new String("hello"); |
| + | |
| + | va // try completing here |
| + | } |
| + | } |
| + | </source> |
| + | [[File:var.complete.jpg]] |
| + | | Completes var since the place is appropriate |
| |- | | |- |
− | ! scope="row" | Keyword Completion (2) | + | ! scope="row" | Negative Case - no completion |
− | | after <code>exports packagename</code>, or <code>opens packagename</code> press completion key
| + | | |
− | | keyword to is shown as an option
| + | |
− | |-
| + | |
− | ! scope="row" | Package Completion
| + | |
− | | after <code>exports</code>, <code>opens</code>, <code>provides</code> or <code>uses</code>, press completion key
| + | |
− | | package completion shown. | + | |
− | |-
| + | |
− | ! scope="row" | Type Reference Completion
| + | |
− | | after <code>exports</code>, <code>opens</code>, <code>provides</code> or <code>uses</code>, or optionally after a dot after a package, ie <code>exports packagename.</code> press completion key
| + | |
− | | Type completion shown.
| + | |
− | |-
| + | |
− | ! scope="row" | Implementation TypeRef Completion
| + | |
− | | after <code>provides typename with</code> press completion key
| + | |
− | | Type completion shown and these typereferences are implementations of the type given before with.
| + | |
− | |-
| + | |
− | ! colspan="3" | The Essential Utilities: Code Select, Hover, Navigate, Search and Rename
| + | |
− | |-
| + | |
− | ! scope="row" | Module Select & Hover
| + | |
− | | <br>
| + | |
− | In the module-info.java file of the first project, select <code>second</code> in the <code>requires second;</code> directive
| + | |
| <br> | | <br> |
− | <br>
| |
− | [[File:Hover.jpg]]
| |
− | | Hover appears
| |
− | |-
| |
− | ! scope="row" | Module Select, Hover & Navigate
| |
− | | In the above scenario, after hover appears, click on the navigate
| |
− | | module-info.java file of second opened
| |
− | |-
| |
− | ! scope="row" | Module Select, & Search
| |
− | | <br>
| |
− | In the module-info.java file of the second project, select second in module declaration <code> module second {</code> and search for references
| |
− | <br>
| |
− | <br>
| |
− | [[File:Modsearch2.jpg]]
| |
− | | In the search view, the reference in directive <code>requires second;</code> in file first -> module-info.java is shown.
| |
− | |-
| |
− | ! scope="row" | Package Search
| |
− | | <br>
| |
− | create package <code>pack1</code> to the project first.
| |
− | <br>add <code>exports pack1;</code> directive in module-info.java file of first.
| |
− | <br>search for references of <code>pack1</code>
| |
− | | In the search view, the reference of <code>pack1</code> in directive <code>exports pack1;</code> in file first -> module-info.java is shown, similar to other <code>pack1</code> references if any
| |
− | |-
| |
− | ! scope="row" | Type Search
| |
− | | create Type <code>X</code> in the project first, add directive <code>uses X;</code> in module-info.java file of first, and search for references of X
| |
− | | In the search view, the reference of <code>X</code> in directive <code>uses X;</code> in file first -> module-info.java is shown, similar to other <code>X</code> references if any
| |
− | |-
| |
− | ! scope="row" |Code Select & Rename
| |
− | | in module-info.java file of first, select <code>X</code> in directive <code>uses X;</code> and rename to <code>X11</code>
| |
− | | rename exhibits usual behavior - renames definition and references of <code>X</code> to <code>X11</code>
| |
− | |-
| |
− | ! colspan="3" | The Outlier: Milling Project Coin Enhancements
| |
− | |-
| |
− | ! scope="row" | @Safevarargs
| |
− | | <code>@SafeVarargs</code> is now allowed on private instance methods. There is even a support of quick assist for that. Use the following code which has warnings, and use the quick assist at the point mentioned in the comment
| |
− |
| |
− |
| |
| <source lang="java"> | | <source lang="java"> |
− | package packsafe; | + | package packvar; |
− | import java.util.ArrayList;
| + | |
− | import java.util.List;
| + | |
| | | |
− | public class SafeVar { | + | public class VarComplete { |
− | private int getLen(List<String>...list) { | + | va // complete here - 'var' not offered as a completion candidate |
− | List<String>[] l = list;
| + | |
− | return l.length;
| + | |
− | }
| + | |
− | | + | |
− | public static void main(String[] args) {
| + | |
− | SafeVar x = new SafeVar();
| + | |
− | List<String> l = new ArrayList<>();
| + | |
− | int len = x.getLen(l); // Use Quick Assist of SafeVarargs here<br>
| + | |
− | System.out.println("Length:" + len);
| + | |
− | }
| + | |
− | }</source>
| + | |
− | | <code>@SafeVarargs</code> inserted before <code>getLen()</code> and the warnings go away
| + | |
− | |-
| + | |
− | ! scope="row" | Effectively Final AutoCloseables
| + | |
− | | Effectively-final variables are allowed to be used as resources in the try-with-resources statement. The code below has an error. Try removing the line <code> t1 = null; // Remove this code </code>.
| + | |
− | | + | |
− | | + | |
− | <source lang="java">package packtry;
| + | |
− | import java.io.Closeable;
| + | |
− | import java.io.IOException;
| + | |
− | | + | |
− | class Two implements Closeable {
| + | |
− | @Override
| + | |
− | public void close() throws IOException {
| + | |
− | // nothing
| + | |
− | }
| + | |
− | }
| + | |
− | public class TryStmtTwo {
| + | |
− | | + | |
− | public void foo() throws IOException {
| + | |
− | Two t1 = new Two();
| + | |
− | try (t1; final Two t2 = new Two()) {
| + | |
− | // Empty by design
| + | |
− | }
| + | |
− | t1 = null; // Remove this code
| + | |
− | }
| + | |
− | public static void main(String[] args) {
| + | |
− | System.out.println("Done");
| + | |
− | }
| + | |
| } | | } |
| </source> | | </source> |
− | | Code without errors. For the more inquisitive, check the generated code to see that the close is generated for <code>t1</code> as well which is not a final variable but an effectively final variable.
| + | <br> |
| + | [[File:var.nocomplete.jpg]] |
| + | | Does not offer 'var' as completion |
| |- | | |- |
− | ! scope="row" | Anonymous Diamond | + | ! scope="row" | Hover |
− | | In the following code, there is a warning about Y being a raw type and need to be parameterized. with Java 9 support, just add a diamond operator after Y. | + | | |
− | | + | Hover over var to see the javadoc of the associated type (in this case : String) being displayed. |
− | | + | <br> |
| <source lang="java"> | | <source lang="java"> |
− | public class Dia { | + | package packvar; |
− | @SuppressWarnings("unused")
| + | public class VarComplete { |
− | public static void main(String[] args) {
| + | public static void main(String[] args) { |
− | Y<?> y1 = new Y(){}; // Change this to new Y<>(){}
| + | String s = new String("hello"); |
− | }
| + | var x = s; |
| + | System.out.println(x); |
| + | } |
| } | | } |
− | class Y<T> {}
| |
| </source> | | </source> |
− | | + | <br> |
− | | Diamond operator <code><></code> accepted and code compiles without warning | + | [[File:var.hover.jpg]] |
| + | | Shows javadoc of the type associated with var |
| |- | | |- |
− | ! scope="row" | Illegal Underscore | + | ! scope="row" | Quick Assist : var to type |
− | | Underscore is an illegal identifier from Java 9 onwards. Uncomment the commented line in the following example | + | | |
− | | + | <br> |
− | | + | <source lang="java"> |
− | <source lang="java">public class UnderScore { | + | package packvar; |
− | //Integer _ ; | + | public class VarComplete { |
| + | public static void main(String[] args) { |
| + | String s = new String("hello"); |
| + | var x = s; |
| + | System.out.println(x); |
| + | } |
| } | | } |
| </source> | | </source> |
− | | error: "'_' should not be used as an identifier, since it is a reserved keyword from source level 1.8 on"
| + | <br> |
| + | [[File:var.vartotype.jpg]] |
| + | | Provides option to change from var to type |
| |- | | |- |
− | ! scope="row" | Private Methods | + | ! scope="row" | Quick Assist: type to var |
− | | private interface methods are allowed. Change the <code>default</code> of worker to private | + | | |
− | | + | <br> |
− | | + | |
| <source lang="java"> | | <source lang="java"> |
− | public interface I { | + | package packvar; |
− | default void worker() {}<
| + | public class VarComplete { |
− | | + | public static void main(String[] args) { |
− | default void foo() { | + | String s = new String("hello"); |
− | worker();
| + | String x = s; |
− | } | + | System.out.println(x); |
− | | + | } |
− | default void bar() {
| + | |
− | worker();
| + | |
− | }
| + | |
| } | | } |
| </source> | | </source> |
− | | Code compiles with <code>private</code> as well. Note that this is a useful feature if two default methods wants to share the worker code and does not want the worker to be an public interface method.
| + | <br> |
| + | [[File:var.typetovar.jpg]] |
| + | | Provides option to change from type to var |
| |- | | |- |
− | ! colspan="3" | Coming Soon to an Eclipse Version nearby you: The Java 9 DOM AST for module, Automatic Modules support, Quick Fixes and more...Watch this space for updates. | + | ! colspan="3" | More to come in Java 11 ! |
| |} | | |} |