You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@netbeans.apache.org by lk...@apache.org on 2020/09/13 21:03:17 UTC

[netbeans] branch master updated: [NETBEANS-4681] Fixed issue : refactor record rename & move record file to other package

This is an automated email from the ASF dual-hosted git repository.

lkishalmi pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/netbeans.git


The following commit(s) were added to refs/heads/master by this push:
     new 6408fe1  [NETBEANS-4681] Fixed issue : refactor record rename & move record file to other package
6408fe1 is described below

commit 6408fe154baceaafc437f99f1fd4dcbaccf99479
Author: Akhilesh Singh <ak...@oracle.com>
AuthorDate: Thu Aug 13 13:52:10 2020 +0530

    [NETBEANS-4681] Fixed issue : refactor record rename & move record file to other package
---
 .../netbeans/api/java/source/TreePathHandle.java   |  5 +-
 .../netbeans/api/java/source/TreeUtilities.java    | 10 +++-
 .../modules/refactoring/java/ui/MoveClassUI.java   |  8 +++-
 .../modules/refactoring/java/ui/UIUtilities.java   | 12 ++++-
 .../refactoring/java/test/MoveJavaFileTest.java    | 10 ++++
 .../modules/refactoring/java/test/RenameTest.java  | 55 ++++++++++++++++++++++
 6 files changed, 93 insertions(+), 7 deletions(-)

diff --git a/java/java.source.base/src/org/netbeans/api/java/source/TreePathHandle.java b/java/java.source.base/src/org/netbeans/api/java/source/TreePathHandle.java
index 5bd8a80..6ce4e4d 100644
--- a/java/java.source.base/src/org/netbeans/api/java/source/TreePathHandle.java
+++ b/java/java.source.base/src/org/netbeans/api/java/source/TreePathHandle.java
@@ -51,6 +51,7 @@ import javax.tools.JavaFileObject;
 import org.netbeans.api.annotations.common.CheckForNull;
 import org.netbeans.api.annotations.common.NonNull;
 import org.netbeans.modules.java.source.PositionRefProvider;
+import org.netbeans.modules.java.source.TreeShims;
 import org.netbeans.modules.java.source.parsing.FileObjects;
 import org.openide.filesystems.FileObject;
 import org.openide.filesystems.FileStateInvalidException;
@@ -322,7 +323,7 @@ public final class TreePathHandle {
             case ENUM_CONSTANT:
                 return true;
             default:
-                return false;
+                return (el.getKind().name().equals(TreeShims.RECORD));
         }
     }
 
@@ -858,4 +859,4 @@ public final class TreePathHandle {
         return result;
     }
     
-}
+}
\ No newline at end of file
diff --git a/java/java.source.base/src/org/netbeans/api/java/source/TreeUtilities.java b/java/java.source.base/src/org/netbeans/api/java/source/TreeUtilities.java
index dc13204..944f641 100644
--- a/java/java.source.base/src/org/netbeans/api/java/source/TreeUtilities.java
+++ b/java/java.source.base/src/org/netbeans/api/java/source/TreeUtilities.java
@@ -103,6 +103,7 @@ import org.netbeans.lib.nbjavac.services.NBAttr;
 import org.netbeans.lib.nbjavac.services.NBParserFactory;
 import org.netbeans.lib.nbjavac.services.NBResolve;
 import org.netbeans.lib.nbjavac.services.NBTreeMaker.IndexedClassDecl;
+import org.netbeans.modules.java.source.TreeShims;
 import org.netbeans.modules.java.source.TreeUtilitiesAccessor;
 import org.netbeans.modules.java.source.builder.CommentHandlerService;
 import org.netbeans.modules.java.source.builder.CommentSetImpl;
@@ -124,7 +125,14 @@ public final class TreeUtilities {
      * @since 0.67
      */
     public static final Set<Kind> CLASS_TREE_KINDS = EnumSet.of(Kind.ANNOTATION_TYPE, Kind.CLASS, Kind.ENUM, Kind.INTERFACE);
-    
+    static {
+        Kind recKind = null;
+        try {
+            recKind = Kind.valueOf(TreeShims.RECORD);
+            CLASS_TREE_KINDS.add(recKind);
+        } catch (IllegalArgumentException ex) {
+        }
+    }
     private final CompilationInfo info;
     private final CommentHandlerService handler;
     
diff --git a/java/refactoring.java/src/org/netbeans/modules/refactoring/java/ui/MoveClassUI.java b/java/refactoring.java/src/org/netbeans/modules/refactoring/java/ui/MoveClassUI.java
index 2472575..9176f43 100644
--- a/java/refactoring.java/src/org/netbeans/modules/refactoring/java/ui/MoveClassUI.java
+++ b/java/refactoring.java/src/org/netbeans/modules/refactoring/java/ui/MoveClassUI.java
@@ -305,7 +305,11 @@ public class MoveClassUI implements RefactoringUI, RefactoringUIBypass {
                 Collection<TreePathHandle> tphs = new ArrayList<TreePathHandle>();
                 SourcePositions sourcePositions = info.getTrees().getSourcePositions();
                 for (Element ele : e.getEnclosedElements()) {
-                    Tree leaf = info.getTrees().getPath(ele).getLeaf();
+                    TreePath path = info.getTrees().getPath(ele);
+                    if (path == null) {
+                        continue;
+                    }
+                    Tree leaf = path.getLeaf();
                     long start = sourcePositions.getStartPosition(info.getCompilationUnit(), leaf);
                     long end = sourcePositions.getEndPosition(info.getCompilationUnit(), leaf);
                     if ((start >= startOffset && start <= endOffset)
@@ -364,4 +368,4 @@ public class MoveClassUI implements RefactoringUI, RefactoringUIBypass {
 //                    }
         }
     }
-}
+}
\ No newline at end of file
diff --git a/java/refactoring.java/src/org/netbeans/modules/refactoring/java/ui/UIUtilities.java b/java/refactoring.java/src/org/netbeans/modules/refactoring/java/ui/UIUtilities.java
index ac259e3..acd9ff4 100644
--- a/java/refactoring.java/src/org/netbeans/modules/refactoring/java/ui/UIUtilities.java
+++ b/java/refactoring.java/src/org/netbeans/modules/refactoring/java/ui/UIUtilities.java
@@ -57,6 +57,7 @@ public final class UIUtilities {
 
     // XXX: Remove "test_" when #211651 is fixed
     private static final String TEST_JAVA_MIME_TYPE = "test_text/x-java"; // NOI18N
+    private static final String RECORD = "RECORD"; // NOI18N
     /**
      * Element.Kind values allowed to be used when calling ElementHandle.create
      *
@@ -64,7 +65,14 @@ public final class UIUtilities {
      * @see org.netbeans.api.java.source.ElementHandle
      */
     public static EnumSet allowedElementKinds = EnumSet.of(ElementKind.PACKAGE, ElementKind.CLASS, ElementKind.INTERFACE, ElementKind.ENUM, ElementKind.ANNOTATION_TYPE, ElementKind.METHOD, ElementKind.CONSTRUCTOR, ElementKind.INSTANCE_INIT, ElementKind.STATIC_INIT, ElementKind.FIELD, ElementKind.ENUM_CONSTANT, ElementKind.TYPE_PARAMETER);
-
+    static {
+        ElementKind recKind = null;
+        try {
+            recKind = ElementKind.valueOf(RECORD);
+            allowedElementKinds.add(recKind);
+        } catch (IllegalArgumentException ex) {
+        }
+    }
     // not to be instantiated
     private UIUtilities() {
     }
@@ -1270,4 +1278,4 @@ public final class UIUtilities {
                 return UIUtilities.escape(tm.toString());
         }
     }
-}
+}
\ No newline at end of file
diff --git a/java/refactoring.java/test/unit/src/org/netbeans/modules/refactoring/java/test/MoveJavaFileTest.java b/java/refactoring.java/test/unit/src/org/netbeans/modules/refactoring/java/test/MoveJavaFileTest.java
index 36398f8..2792c3a 100644
--- a/java/refactoring.java/test/unit/src/org/netbeans/modules/refactoring/java/test/MoveJavaFileTest.java
+++ b/java/refactoring.java/test/unit/src/org/netbeans/modules/refactoring/java/test/MoveJavaFileTest.java
@@ -328,6 +328,16 @@ public class MoveJavaFileTest extends RefactoringTestBase {
                 new File("movepkgdst/package-info.java", "package movepkgdst;"),
                 new File("movepkg/MoveClass.java", "package movepkg; import movepkg.*; public class MoveClass { public MoveClass() { } }"));
     }
+    
+    public void testMoveRecord() throws Exception {
+        writeFilesAndWaitForScan(src,
+                new File("movepkgdst/package-info.java", "package movepkgdst;"),
+                new File("movepkg/MoveRecord.java", "package movepkg; public record MoveRecord() { }"));
+        performMoveClass(Lookups.singleton(src.getFileObject("movepkg/MoveRecord.java")), new URL(src.getURL(), "movepkgdst/"));
+        verifyContent(src,
+                new File("movepkgdst/package-info.java", "package movepkgdst;"),
+                new File("movepkgdst/MoveRecord.java", "package movepkgdst; public record MoveRecord() { }"));
+    }
 
     private void performMoveClass(Lookup source, URL target, Problem... expectedProblems) throws Exception {
         final MoveRefactoring[] r = new MoveRefactoring[1];
diff --git a/java/refactoring.java/test/unit/src/org/netbeans/modules/refactoring/java/test/RenameTest.java b/java/refactoring.java/test/unit/src/org/netbeans/modules/refactoring/java/test/RenameTest.java
index 85b590c..0f2686f 100644
--- a/java/refactoring.java/test/unit/src/org/netbeans/modules/refactoring/java/test/RenameTest.java
+++ b/java/refactoring.java/test/unit/src/org/netbeans/modules/refactoring/java/test/RenameTest.java
@@ -1427,6 +1427,61 @@ public class RenameTest extends RefactoringTestBase {
                 + "    }\n"
                 + "}"));
     }
+    
+    public void testJavadocRecord() throws Exception {
+        writeFilesAndWaitForScan(src,
+                new File("p2/C.java", "package p2;\n"
+                + "public record C() {\n"
+                + "}"),
+                new File("p2/A.java", "package p2;\n"
+                + "/**\n"
+                + " * @see C\n"
+                + " */\n"
+                + "public class A {\n"
+                + "    private C b;\n"
+                + "}"));
+        performRename(src.getFileObject("p2/C.java"), -1, -1, "B", null, false);
+        verifyContent(src,
+                new File("p2/C.java", "package p2;\n"
+                + "public record B() {\n"
+                + "}"),
+                new File("p2/A.java", "package p2;\n"
+                + "/**\n"
+                + " * @see B\n"
+                + " */\n"
+                + "public class A {\n"
+                + "    private B b;\n"
+                + "}"));
+    }
+    
+    public void testRenameRecordPropa() throws Exception {
+        writeFilesAndWaitForScan(src,
+                new File("t/A.java", "package t;\n"
+                + "public record A() {\n"
+                + "    private static int property;\n"
+                + "    public static int getProperty() {\n"
+                + "        return property;\n"
+                + "    }\n"
+                + "    public int foo() {\n"
+                + "        return property;\n"
+                + "    }\n"
+                + "}"));
+        JavaRenameProperties props = new JavaRenameProperties();
+        props.setIsRenameGettersSetters(true);
+        performRename(src.getFileObject("t/A.java"), 1, -1, "renamed", props, true);
+        verifyContent(src,
+                new File("t/A.java", "package t;\n"
+                + "public record A() {\n"
+                + "    private static int renamed;\n"
+                + "    public static int getRenamed() {\n"
+                + "        return renamed;\n"
+                + "    }\n"
+                + "    public int foo() {\n"
+                + "        return renamed;\n"
+                + "    }\n"
+                + "}"));
+
+    }
 
     private void performRename(FileObject source, final int position, final int position2, final String newname, final JavaRenameProperties props, final boolean searchInComments, Problem... expectedProblems) throws Exception {
         final RenameRefactoring[] r = new RenameRefactoring[1];


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@netbeans.apache.org
For additional commands, e-mail: commits-help@netbeans.apache.org

For further information about the NetBeans mailing lists, visit:
https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists