diff --git a/META-INF/MANIFEST.MF b/META-INF/MANIFEST.MF index 0159c7c..be965f9 100644 --- a/META-INF/MANIFEST.MF +++ b/META-INF/MANIFEST.MF @@ -13,4 +13,6 @@ org.eclipse.jface, org.eclipse.ui.workbench, org.eclipse.core.resources, - org.eclipse.jface.text + org.eclipse.jface.text, + org.eclipse.ui.ide;bundle-version="3.15.200", + org.eclipse.ui.editors;bundle-version="3.11.500" diff --git a/src/org/ntlab/pushPullRefactoring/PushPullProcessor.java b/src/org/ntlab/pushPullRefactoring/PushPullProcessor.java index b2f938a..de1af18 100644 --- a/src/org/ntlab/pushPullRefactoring/PushPullProcessor.java +++ b/src/org/ntlab/pushPullRefactoring/PushPullProcessor.java @@ -1,13 +1,21 @@ package org.ntlab.pushPullRefactoring; +import java.io.File; import java.util.List; +import org.eclipse.core.filebuffers.FileBuffers; +import org.eclipse.core.filebuffers.ITextFileBuffer; +import org.eclipse.core.filebuffers.ITextFileBufferManager; +import org.eclipse.core.filebuffers.LocationKind; import org.eclipse.core.resources.IContainer; +import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IResourceVisitor; import org.eclipse.core.resources.IWorkspace; +import org.eclipse.core.resources.IWorkspaceRoot; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.core.runtime.OperationCanceledException; @@ -17,8 +25,12 @@ import org.eclipse.jdt.core.IPackageFragment; import org.eclipse.jdt.core.IPackageFragmentRoot; import org.eclipse.jdt.core.JavaCore; +import org.eclipse.jdt.core.JavaModelException; +import org.eclipse.jdt.core.dom.AST; import org.eclipse.jdt.core.dom.ASTNode; +import org.eclipse.jdt.core.dom.ASTParser; import org.eclipse.jdt.core.dom.ASTVisitor; +import org.eclipse.jdt.core.dom.CompilationUnit; import org.eclipse.jdt.core.dom.FieldDeclaration; import org.eclipse.jdt.core.dom.VariableDeclaration; import org.eclipse.jdt.core.dom.VariableDeclarationFragment; @@ -31,15 +43,23 @@ import org.eclipse.jdt.core.search.SearchRequestor; import org.eclipse.jdt.internal.core.SourceField; import org.eclipse.jdt.internal.core.SourceType; +import org.eclipse.jdt.internal.core.builder.SourceFile; import org.eclipse.jdt.internal.corext.refactoring.RefactoringCoreMessages; import org.eclipse.jdt.internal.corext.refactoring.changes.DynamicValidationRefactoringChange; import org.eclipse.jdt.internal.corext.refactoring.changes.RenameCompilationUnitChange; +import org.eclipse.jface.text.Document; +import org.eclipse.jface.text.IDocument; import org.eclipse.ltk.core.refactoring.Change; import org.eclipse.ltk.core.refactoring.RefactoringStatus; import org.eclipse.ltk.core.refactoring.participants.CheckConditionsContext; import org.eclipse.ltk.core.refactoring.participants.RefactoringParticipant; import org.eclipse.ltk.core.refactoring.participants.RefactoringProcessor; import org.eclipse.ltk.core.refactoring.participants.SharableParticipants; +import org.eclipse.text.edits.TextEdit; +import org.eclipse.ui.editors.text.FileDocumentProvider; +import org.eclipse.ui.part.FileEditorInput; +import org.eclipse.ui.texteditor.IDocumentProvider; +import org.eclipse.ui.texteditor.IDocumentProviderExtension; public class PushPullProcessor extends RefactoringProcessor { private PushPullDescriptor descriptor = null; @@ -92,7 +112,23 @@ DynamicValidationRefactoringChange result = new DynamicValidationRefactoringChange(descriptor, PushPullRefactoring.NAME); ICompilationUnit[] icus = new ICompilationUnit[1]; //createPushPullChanges(); - searchFieldNode("State"); + FieldDeclaration fieldDec = searchFieldDeclaration("State"); +// ASTParser parser = ASTParser.newParser(AST.JLS4); +// parser.setKind(ASTParser.K_COMPILATION_UNIT); +// parser.setResolveBindings(true); +// parser.setBindingsRecovery(true); +// parser.setSource(.getTypeRoot()); + String code=""; + try { + String initialContent = descriptor.getDistinationClass().getTypeRoot().getSource(); + // �ϊ����ʂ𕶎���Ŏ擾 + code = getCode(initialContent, descriptor.getDistinationClass()); + } catch (JavaModelException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + System.out.println(code); + //System.out.println(code); //IWorkspace w = ResourcesPlugin.getWorkspace(); //w.getRoot().accept(visitor, IContainer.DEPTH_INFINITE, false); @@ -124,7 +160,7 @@ // e.printStackTrace(); // } if (icus[0] != null) { - result.add(new RenameCompilationUnitChange(icus[0], "hogehoge")); + //result.add(new RenameCompilationUnitChange(icus[0], "hogehoge")); } return result; @@ -153,7 +189,7 @@ VariableDeclarationFragment fragment = fragments.get(0); //IJavaElement fieldElement = fragment.resolveBinding().getJavaElement(); result[0] = fragments.get(0); - } + } } return false; } @@ -161,7 +197,58 @@ }); return result[0]; } - + private FieldDeclaration searchFieldDeclaration(String annotationName,String... value) { + FieldDeclaration[] result = new FieldDeclaration[1]; + final String a = "@"+annotationName; + + descriptor.getDistinationClass().accept(new ASTVisitor() { + @Override + public boolean visit(FieldDeclaration node) { + var modifiers = node.modifiers(); + for(var annotation : modifiers) { + String annoName = annotation.toString(); + if(a.equals(annoName)) { + var r = node; + // result[0] = (SourceField)node; + List fragments = node.fragments(); + VariableDeclarationFragment fragment = fragments.get(0); + //IJavaElement fieldElement = fragment.resolveBinding().getJavaElement(); + node.delete(); + System.out.println("Deleted"); + } + } + return super.visit(node); + } + + }); + return result[0]; + } + /** + * AST�𕶎���̃R�[�h�ɖ߂����\�b�h + * + * @param code + * ���̃R�[�h + * @param unit + * ASTVisitor�ő�����s�������c + * @return �\�[�X�R�[�h + */ + private static String getCode(String code, CompilationUnit unit) { + IWorkspaceRoot workspaceRoot = ResourcesPlugin.getWorkspace().getRoot(); + IFile file = workspaceRoot.getFile(unit.getTypeRoot().getPath()); + IPath path = file.getFullPath(); + ITextFileBufferManager manager = FileBuffers.getTextFileBufferManager(); + ITextFileBuffer buffer = manager.getTextFileBuffer(path, LocationKind.IFILE); + IDocument eDoc = buffer.getDocument(); + + TextEdit edit = unit.rewrite(eDoc, null); + try { + edit.apply(eDoc); + return eDoc.get(); + } catch (Exception ex) { + ex.printStackTrace(); + return null; + } + } private SearchPattern createSearchPattern() { String pattern = "A"; diff --git a/src/org/ntlab/pushPullRefactoring/PushPullRefactoringHandler.java b/src/org/ntlab/pushPullRefactoring/PushPullRefactoringHandler.java index ec1824d..8bf19c6 100644 --- a/src/org/ntlab/pushPullRefactoring/PushPullRefactoringHandler.java +++ b/src/org/ntlab/pushPullRefactoring/PushPullRefactoringHandler.java @@ -251,9 +251,10 @@ ASTParser parser = ASTParser.newParser(AST.JLS4); parser.setKind(ASTParser.K_COMPILATION_UNIT); parser.setResolveBindings(true); + parser.setBindingsRecovery(true); parser.setSource(icus[0]); ASTNode result = parser.createAST(new NullProgressMonitor()); - //result.recordModifications(); + ((CompilationUnit) result).recordModifications(); return (CompilationUnit)result; }