1 19 20 package org.netbeans.modules.refactoring.java.ui; 21 22 import java.util.Collection ; 23 import java.util.Dictionary ; 24 import javax.lang.model.element.Element; 25 import javax.lang.model.element.ElementKind; 26 import org.netbeans.api.java.source.CompilationInfo; 27 import org.netbeans.api.java.source.SourceUtils; 28 import org.netbeans.api.java.source.TreePathHandle; 29 import org.netbeans.modules.refactoring.java.RetoucheUtils; 30 import org.netbeans.modules.refactoring.java.spi.ui.JavaActionsImplementationProvider; 31 import org.netbeans.modules.refactoring.java.ui.ExtractInterfaceRefactoringUI; 32 import org.netbeans.modules.refactoring.java.ui.RefactoringActionsProvider.NodeToFileObject; 33 import org.netbeans.modules.refactoring.java.ui.RefactoringActionsProvider.TextComponentRunnable; 34 import org.netbeans.modules.refactoring.spi.ui.RefactoringUI; 35 import org.openide.cookies.EditorCookie; 36 import org.openide.filesystems.FileObject; 37 import org.openide.loaders.DataFolder; 38 import org.openide.loaders.DataObject; 39 import org.openide.nodes.Node; 40 import org.openide.util.Lookup; 41 42 46 public class JavaRefactoringActionsProvider extends JavaActionsImplementationProvider{ 47 48 public JavaRefactoringActionsProvider() { 49 } 50 @Override 51 public void doExtractInterface(final Lookup lookup) { 52 EditorCookie ec = lookup.lookup(EditorCookie.class); 53 final Dictionary dictionary = lookup.lookup(Dictionary .class); 54 if (RefactoringActionsProvider.isFromEditor(ec)) { 55 new RefactoringActionsProvider.TextComponentRunnable(ec) { 56 @Override 57 protected RefactoringUI createRefactoringUI(TreePathHandle selectedElement,int startOffset,int endOffset, CompilationInfo info) { 58 Element selected = selectedElement.resolveElement(info); 59 return new ExtractInterfaceRefactoringUI(selectedElement, info); 60 } 61 }.run(); 62 } else { 63 new NodeToFileObject(lookup.lookupAll(Node.class)) { 64 @Override 65 protected RefactoringUI createRefactoringUI(FileObject[] selectedElements) { 66 throw new UnsupportedOperationException ("Not supported yet!"); 67 } 69 }.run(); 70 } 71 } 72 73 @Override 74 public boolean canExtractInterface(Lookup lookup) { 75 Collection <? extends Node> nodes = lookup.lookupAll(Node.class); 76 if (nodes.size() != 1) { 77 return false; 78 } 79 Node n = nodes.iterator().next(); 80 DataObject dob = n.getCookie(DataObject.class); 81 if (dob==null) { 82 return false; 83 } 84 FileObject fo = dob.getPrimaryFile(); 85 if (RetoucheUtils.isRefactorable(fo)) { return true; 87 } 88 if ((dob instanceof DataFolder) && 89 RetoucheUtils.isFileInOpenProject(fo) && 90 RetoucheUtils.isOnSourceClasspath(fo) && 91 !RetoucheUtils.isClasspathRoot(fo)) 92 return true; 93 return false; 94 } 95 96 @Override 97 public void doPushDown(final Lookup lookup) { 98 EditorCookie ec = lookup.lookup(EditorCookie.class); 99 final Dictionary dictionary = lookup.lookup(Dictionary .class); 100 if (RefactoringActionsProvider.isFromEditor(ec)) { 101 new RefactoringActionsProvider.TextComponentRunnable(ec) { 102 @Override 103 protected RefactoringUI createRefactoringUI(TreePathHandle selectedElement,int startOffset,int endOffset, CompilationInfo info) { 104 Element selected = selectedElement.resolveElement(info); 105 return new PushDownRefactoringUI(new TreePathHandle[]{selectedElement}, info); 106 } 107 }.run(); 108 } else { 109 new NodeToFileObject(lookup.lookupAll(Node.class)) { 110 @Override 111 protected RefactoringUI createRefactoringUI(FileObject[] selectedElements) { 112 throw new UnsupportedOperationException ("Not supported yet!"); 113 } 115 }.run(); 116 } 117 } 118 119 @Override 120 public boolean canPushDown(Lookup lookup) { 121 Collection <? extends Node> nodes = lookup.lookupAll(Node.class); 122 if (nodes.size() != 1) { 123 return false; 124 } 125 Node n = nodes.iterator().next(); 126 DataObject dob = n.getCookie(DataObject.class); 127 if (dob==null) { 128 return false; 129 } 130 FileObject fo = dob.getPrimaryFile(); 131 if (RetoucheUtils.isRefactorable(fo)) { return true; 133 } 134 if ((dob instanceof DataFolder) && 135 RetoucheUtils.isFileInOpenProject(fo) && 136 RetoucheUtils.isOnSourceClasspath(fo) && 137 !RetoucheUtils.isClasspathRoot(fo)) 138 return true; 139 return false; 140 } 141 142 @Override 143 public void doPullUp(final Lookup lookup) { 144 EditorCookie ec = lookup.lookup(EditorCookie.class); 145 final Dictionary dictionary = lookup.lookup(Dictionary .class); 146 if (RefactoringActionsProvider.isFromEditor(ec)) { 147 new RefactoringActionsProvider.TextComponentRunnable(ec) { 148 @Override 149 protected RefactoringUI createRefactoringUI(TreePathHandle selectedElement,int startOffset,int endOffset, CompilationInfo info) { 150 Element selected = selectedElement.resolveElement(info); 151 return new PullUpRefactoringUI(new TreePathHandle[]{selectedElement}, info); 152 } 153 }.run(); 154 } else { 155 new NodeToFileObject(lookup.lookupAll(Node.class)) { 156 @Override 157 protected RefactoringUI createRefactoringUI(FileObject[] selectedElements) { 158 throw new UnsupportedOperationException ("Not supported yet!"); 159 } 161 }.run(); 162 } 163 } 164 165 @Override 166 public boolean canPullUp(Lookup lookup) { 167 Collection <? extends Node> nodes = lookup.lookupAll(Node.class); 168 if (nodes.size() != 1) { 169 return false; 170 } 171 Node n = nodes.iterator().next(); 172 DataObject dob = n.getCookie(DataObject.class); 173 if (dob==null) { 174 return false; 175 } 176 FileObject fo = dob.getPrimaryFile(); 177 if (RetoucheUtils.isRefactorable(fo)) { return true; 179 } 180 if ((dob instanceof DataFolder) && 181 RetoucheUtils.isFileInOpenProject(fo) && 182 RetoucheUtils.isOnSourceClasspath(fo) && 183 !RetoucheUtils.isClasspathRoot(fo)) 184 return true; 185 return false; 186 } 187 188 } 189 | Popular Tags |