diff --git a/src/org/ntlab/pushPullRefactoring/PushPullDescriptor.java b/src/org/ntlab/pushPullRefactoring/PushPullDescriptor.java index 509e2a1..520ab3b 100644 --- a/src/org/ntlab/pushPullRefactoring/PushPullDescriptor.java +++ b/src/org/ntlab/pushPullRefactoring/PushPullDescriptor.java @@ -1,7 +1,10 @@ package org.ntlab.pushPullRefactoring; import org.eclipse.jdt.core.IType; +import org.eclipse.jdt.core.dom.ASTVisitor; import org.eclipse.jdt.core.dom.CompilationUnit; +import org.eclipse.jdt.core.dom.MethodInvocation; +import org.eclipse.jdt.core.dom.TypeDeclaration; import org.eclipse.jdt.core.refactoring.descriptors.JavaRefactoringDescriptor; public class PushPullDescriptor extends JavaRefactoringDescriptor { @@ -12,6 +15,7 @@ private CompilationUnit distinationClass = null; private boolean isPushToPull; + public boolean isPushToPull() { return isPushToPull; @@ -31,6 +35,13 @@ public void setSourceClass(CompilationUnit sourceClass) { this.sourceClass = sourceClass; + sourceClass.accept(new ASTVisitor() { + @Override + public boolean visit(TypeDeclaration node) { + sourceClassName = node.getName().toString(); + return false; + } + }); } public CompilationUnit getDistinationClass() { @@ -39,15 +50,20 @@ public void setDistinationClass(CompilationUnit distinationClass) { this.distinationClass = distinationClass; + distinationClass.accept(new ASTVisitor() { + @Override + public boolean visit(TypeDeclaration node) { + distinationClassName = node.getName().toString(); + return false; + } + }); + } public String getDistinationClassName() { return distinationClassName; } - - public void setDistinationClassName(String distinationClassName) { - this.distinationClassName = distinationClassName; + public String getSourceClassName() { + return sourceClassName; } - - } diff --git a/src/org/ntlab/pushPullRefactoring/PushPullProcessor.java b/src/org/ntlab/pushPullRefactoring/PushPullProcessor.java index f214d31..62d4720 100644 --- a/src/org/ntlab/pushPullRefactoring/PushPullProcessor.java +++ b/src/org/ntlab/pushPullRefactoring/PushPullProcessor.java @@ -134,75 +134,52 @@ DynamicValidationRefactoringChange result = new DynamicValidationRefactoringChange(descriptor, PushPullRefactoring.NAME); ICompilationUnit[] icus = new ICompilationUnit[1]; - //createPushPullChanges(); - //FieldDeclaration fieldDec = searchFieldDeclaration(descriptor.getDistinationClass(),"PullReference","main"); - - - //�t�B�[���h�lj����s���� - // �V�K�N���X�Ƀf�[�^���������߂�rewrite���쐬 - CompilationUnit unit = descriptor.getDistinationClass(); - ///unit.recordModifications(); - - //���삵���� - /* - ASTRewrite rewrite = ASTRewrite.create(unit.getAST()); - ListRewrite rewrites = rewrite.getListRewrite(unit, CompilationUnit.TYPES_PROPERTY); - Statement mycomment = (Statement) rewrite.createStringPlaceholder("//mycomment", ASTNode.EMPTY_STATEMENT); - Statement statement = (Statement) rewrite.createStringPlaceholder("Object obj = new Object();", ASTNode.VARIABLE_DECLARATION_STATEMENT); - PackageDeclaration packageDeclaration = unit.getPackage(); - FieldDeclaration fd = searchFieldDeclaration(unit, "State"); - */ - var getter = searchMethodDeclaration(unit, "Getter"); - changeGetter( pm); - final ASTNode[] typedec=new ASTNode[1]; - unit.accept(new ASTVisitor() { - public boolean visit(TypeDeclaration node) { - typedec[0] = node; - return false; - } - }); - final FieldDeclaration typeDeclaration = searchFieldDeclaration(unit, "State"); - ASTRewrite rewrite = ASTRewrite.create(typeDeclaration.getAST()); - ListRewrite rewrites = rewrite.getListRewrite(typeDeclaration, FieldDeclaration.MODIFIERS2_PROPERTY); - Statement pushable = (Statement) rewrite.createStringPlaceholder("@Pushable"+System.getProperty("line.separator"), ASTNode.EMPTY_STATEMENT); - Statement statement = (Statement) rewrite.createStringPlaceholder("Object obj = new Object();", ASTNode.VARIABLE_DECLARATION_STATEMENT); - PackageDeclaration packageDeclaration = unit.getPackage(); - FieldDeclaration fd = searchFieldDeclaration(unit, "State"); - - rewrite.set(unit, CompilationUnit.PACKAGE_PROPERTY,packageDeclaration, null); - - TextEditGroup editGroup = new TextEditGroup("new class edit group"); - - //rewrites.insertFirst(mycomment, editGroup); - rewrites.insertFirst(pushable, editGroup); - - IPath path = unit.getJavaElement().getPath(); - //�V�K�t�@�C���쐬 - try { - ITextFileBufferManager bufferManager = FileBuffers.getTextFileBufferManager(); - bufferManager.connect(path, LocationKind.IFILE,pm); - ITextFileBuffer textFileBuffer = bufferManager.getTextFileBuffer(path, LocationKind.IFILE); - IDocument document = textFileBuffer.getDocument(); - TextEdit edit = rewrite.rewriteAST(document, null); - edit.apply(document); - textFileBuffer.commit(pm /* ProgressMonitor */, true/* Overwrite */); - - } catch(Exception e) { - e.printStackTrace(); - } - // �ύX�ӏ��𐶐����� + if(descriptor.isPushToPull()) { + changePush2Pull(pm); + }else { + + } +// +// CompilationUnit unit = descriptor.getDistinationClass(); +// var getter = searchMethodDeclaration(unit, "Getter"); +// changeGetter( pm); +// final ASTNode[] typedec=new ASTNode[1]; +// unit.accept(new ASTVisitor() { +// public boolean visit(TypeDeclaration node) { +// typedec[0] = node; +// return false; +// } +// }); +// final FieldDeclaration typeDeclaration = searchFieldDeclaration(unit, "State"); +// ASTRewrite rewrite = ASTRewrite.create(typeDeclaration.getAST()); +// ListRewrite rewrites = rewrite.getListRewrite(typeDeclaration, FieldDeclaration.MODIFIERS2_PROPERTY); +// Statement pushable = (Statement) rewrite.createStringPlaceholder("@Pushable"+System.getProperty("line.separator"), ASTNode.EMPTY_STATEMENT); +// Statement statement = (Statement) rewrite.createStringPlaceholder("Object obj = new Object();", ASTNode.VARIABLE_DECLARATION_STATEMENT); +// PackageDeclaration packageDeclaration = unit.getPackage(); +// FieldDeclaration fd = searchFieldDeclaration(unit, "State"); +// +// rewrite.set(unit, CompilationUnit.PACKAGE_PROPERTY,packageDeclaration, null); +// +// TextEditGroup editGroup = new TextEditGroup("new class edit group"); +// rewrites.insertFirst(pushable, editGroup); +// IPath path = unit.getJavaElement().getPath(); +// //�V�K�t�@�C���쐬 +// try { +// ITextFileBufferManager bufferManager = FileBuffers.getTextFileBufferManager(); +// bufferManager.connect(path, LocationKind.IFILE,pm); +// ITextFileBuffer textFileBuffer = bufferManager.getTextFileBuffer(path, LocationKind.IFILE); +// IDocument document = textFileBuffer.getDocument(); +// TextEdit edit = rewrite.rewriteAST(document, null); +// edit.apply(document); +// textFileBuffer.commit(pm /* ProgressMonitor */, true/* Overwrite */); +// +// } catch(Exception e) { +// e.printStackTrace(); +// } +// // �ύX�ӏ��𐶐����� +// - - - // Statement statement = (Statement) rewrite.createStringPlaceholder("Object obj = new Object();", ASTNode.VARIABLE_DECLARATION_STATEMENT); - // ListRewrite rewrites = rewrite.getListRewrite(unit, CompilationUnit.TYPES_PROPERTY); - // TypeDeclaration typeDec = (TypeDeclaration)unit.getTypeRoot(). - // FieldDeclaration createField= createField(unit.getAST()); - // rewrite.set(unit, CompilationUnit.TYPES_PROPERTY, value, null); - // Type type = unit.getAST().newPrimitiveType(PrimitiveType.INT); - - //�����܂Ŏ��s���뒆 String code=""; try { @@ -214,50 +191,91 @@ e.printStackTrace(); } System.out.println(code); - - //System.out.println(code); - //IWorkspace w = ResourcesPlugin.getWorkspace(); - //w.getRoot().accept(visitor, IContainer.DEPTH_INFINITE, false); - -// SearchPattern pattern = createSearchPattern(); -// SearchParticipant[] participants = { SearchEngine.getDefaultSearchParticipant() }; -// -// IJavaSearchScope scope = SearchEngine.createWorkspaceScope(); -//// IJavaSearchScope scope = SearchEngine.createJavaSearchScope(new IJavaElement[] { javaProject }); -// //��������v�����m�[�h�ɑ΂��čs���ύX -// SearchRequestor requestor = new SearchRequestor() { -// @Override -// public void acceptSearchMatch(SearchMatch match) throws CoreException { -// IJavaElement element = (IJavaElement) match.getElement(); -// -// System.out.println(element.getElementType()); -// ICompilationUnit icu = ((SourceType) element).getCompilationUnit(); -// System.out.println("name:" + icu.getElementName()); -// if (icu.getElementName().equals("A.java")) { -// icus[0] = icu; -// } -// -// System.out.printf("%s %d,%d\n", element.getElementName(), match.getOffset(), match.getLength()); -// } -// }; - -// try { -// new SearchEngine().search(pattern, participants, scope, requestor, new NullProgressMonitor()); -// } catch (CoreException e) { -// e.printStackTrace(); -// } + if (icus[0] != null) { - //result.add(new RenameCompilationUnitChange(icus[0], "hogehoge")); + } return result; } private void changePush2Pull(IProgressMonitor pm) { + var srcUnit = descriptor.getSourceClass(); + var dstUnit = descriptor.getDistinationClass(); + var dstDec = new TypeDeclaration[1]; + descriptor.getDistinationClass().accept(new ASTVisitor() { + @Override + public boolean visit(TypeDeclaration node) { + dstDec[0]=node; + return false; + } + }); + + ASTRewrite dstUnitRewrite = ASTRewrite.create(dstDec[0].getAST()); + ListRewrite dstUnitRewriteList = dstUnitRewrite.getListRewrite(dstDec[0], TypeDeclaration.BODY_DECLARATIONS_PROPERTY); + PackageDeclaration dstPackageDeclaration =dstUnit.getPackage(); + String srcValue = annotationValueCase(descriptor.getSourceClassName()); + String pullrefCode = "@PullReference(\""+srcValue+"\")"+System.getProperty("line.separator")+ + "@Pushable"+System.getProperty("line.separator")+ + "String "+srcValue+"= "+"\"/"+srcValue+"\";"; + Statement pullRef = (Statement) dstUnitRewrite.createStringPlaceholder(pullrefCode, ASTNode.VARIABLE_DECLARATION_STATEMENT); + + dstUnitRewrite.set(dstUnit, CompilationUnit.PACKAGE_PROPERTY, dstPackageDeclaration, null); + TextEditGroup dstEditGroup = new TextEditGroup("new class edit group"); + dstUnitRewriteList.insertFirst(pullRef, dstEditGroup); + + //�V�K�t�@�C���쐬 + try { + IPath path = dstUnit.getJavaElement().getPath(); + ITextFileBufferManager bufferManager = FileBuffers.getTextFileBufferManager(); + bufferManager.connect(path, LocationKind.IFILE,pm); + ITextFileBuffer textFileBuffer = bufferManager.getTextFileBuffer(path, LocationKind.IFILE); + IDocument document = textFileBuffer.getDocument(); + TextEdit edit = dstUnitRewrite.rewriteAST(document, null); + edit.apply(document); + textFileBuffer.commit(pm /* ProgressMonitor */, true/* Overwrite */); + + } catch(Exception e) { + e.printStackTrace(); + } + +// final FieldDeclaration typeDeclaration = searchFieldDeclaration(dstUnit, "State"); +// ASTRewrite rewrite = ASTRewrite.create(typeDeclaration.getAST()); +// ListRewrite rewrites = rewrite.getListRewrite(typeDeclaration, FieldDeclaration.MODIFIERS2_PROPERTY); +// Statement pushable = (Statement) rewrite.createStringPlaceholder("@Pushable"+System.getProperty("line.separator"), ASTNode.EMPTY_STATEMENT); +// +// PackageDeclaration packageDeclaration =dstUnit.getPackage(); +// FieldDeclaration fd = searchFieldDeclaration(dstUnit, "State"); +// +// rewrite.set(dstUnit, CompilationUnit.PACKAGE_PROPERTY,packageDeclaration, null); +// +// TextEditGroup editGroup = new TextEditGroup("new class edit group"); +// +// +// rewrites.insertFirst(pushable, editGroup); +// +// +// //�V�K�t�@�C���쐬 +// try { +// IPath path = dstUnit.getJavaElement().getPath(); +// ITextFileBufferManager bufferManager = FileBuffers.getTextFileBufferManager(); +// bufferManager.connect(path, LocationKind.IFILE,pm); +// ITextFileBuffer textFileBuffer = bufferManager.getTextFileBuffer(path, LocationKind.IFILE); +// IDocument document = textFileBuffer.getDocument(); +// TextEdit edit = rewrite.rewriteAST(document, null); +// edit.apply(document); +// textFileBuffer.commit(pm /* ProgressMonitor */, true/* Overwrite */); +// +// } catch(Exception e) { +// e.printStackTrace(); +// } } -private void changePull2Push(IProgressMonitor pm) { + private void changePull2Push(IProgressMonitor pm) { } + private String annotationValueCase(String str) { + return Character.toLowerCase(str.charAt(0))+(str.length()>1?str.substring(1):""); + } private Change createPushPullChanges() { // TODO Auto-generated method stub SearchPattern pattern = createSearchPattern(); diff --git a/src/org/ntlab/pushPullRefactoring/PushPullRefactoringHandler.java b/src/org/ntlab/pushPullRefactoring/PushPullRefactoringHandler.java index 9397721..5c82c02 100644 --- a/src/org/ntlab/pushPullRefactoring/PushPullRefactoringHandler.java +++ b/src/org/ntlab/pushPullRefactoring/PushPullRefactoringHandler.java @@ -55,6 +55,7 @@ boolean isPossible = false; CompilationUnit srcUnit = null; CompilationUnit dstUnit = null; + boolean isPushToPull ; @Override public void addHandlerListener(IHandlerListener handlerListener) { // TODO Auto-generated method stub @@ -76,7 +77,6 @@ try { //�I��Ώۂ�AST���擾��,�������A�m�e�[�V�������t�^����Ă��邩���`�F�b�N. SourceField targetField = getTargetField(event); - SimpleType[] dstNode = new SimpleType[1]; CompilationUnit srcNode = (CompilationUnit) getASTNode(targetField.getCompilationUnit()); srcNode.accept(new ASTVisitor() { public boolean visit(FieldDeclaration node) { @@ -84,12 +84,14 @@ if(astNode instanceof SingleMemberAnnotation) { SingleMemberAnnotation annotation = (SingleMemberAnnotation)astNode; String annotationName = ((Annotation)annotation).getTypeName().toString(); + String annotationValue = annotation.getValue().toString(); + if(annotationName.equals("PushReference")) { isPossible = true; try { srcUnit = getCompilationUnitByEvent(event); - String str = annotation.getValue().toString(); - dstUnit = getAnotherCompilationUnit(event, str); + dstUnit = getAnotherCompilationUnit(event, annotationValue); + isPushToPull = true; } catch (JavaModelException e) { e.printStackTrace(); } @@ -97,7 +99,10 @@ }else if(annotationName.equals("PullReference")) { isPossible = true; try { + dstUnit = getCompilationUnitByEvent(event); + srcUnit = getAnotherCompilationUnit(event, annotationValue); + isPushToPull = false; } catch (JavaModelException e) { e.printStackTrace(); } @@ -106,34 +111,23 @@ System.out.println( annotation.getValue().toString()); } } - -// for (Object v : node.fragments()) { -// node.modifiers(); -// VariableDeclarationFragment var = (VariableDeclarationFragment) v; -// if (var.getName().getIdentifier().equals(targetField.getElementName())) { -// dstNode[0] = ((SimpleType) node.getType()); -// } -// } return true; } }); - - srcUnit = getSourceCompilationUnit(event); - - dstUnit = getDistinationCompilationUnit(event, dstNode[0].toString()); } catch (JavaModelException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } - if(isPossible)return null; + if(!isPossible)return null; PushPullRefactoringContribution contribution = (PushPullRefactoringContribution)RefactoringCore.getRefactoringContribution(PushPullRefactoring.ID); PushPullDescriptor descriptor = (PushPullDescriptor) contribution.createDescriptor(); descriptor.setSourceClass(srcUnit); descriptor.setDistinationClass(dstUnit); + descriptor.setPushToPull(isPushToPull); try { PushPullRefactoring refactoring = (PushPullRefactoring) contribution.createRefactoring(descriptor, null); @@ -309,6 +303,7 @@ if( singleMemberAnnotation.getTypeName().toString().equals("Resource") && annotationName.equals(resourceName)) { dstUnit = (CompilationUnit)result; + icus[0] = ((SourceType) element).getCompilationUnit(); } String annoName = ((Annotation)annotation).getTypeName().toString(); } @@ -320,8 +315,8 @@ }); - icus[0] = ((SourceType) element).getCompilationUnit(); - elementDst[0] = element; + // icus[0] = ((SourceType) element).getCompilationUnit(); + //elementDst[0] = element; System.out.printf("%s %d,%d\n", element.getElementName(), match.getOffset(), match.getLength()); }