diff --git a/src/org/ntlab/pushPullRefactoring/PushPullProcessor.java b/src/org/ntlab/pushPullRefactoring/PushPullProcessor.java index 5c7e46b..95250ef 100644 --- a/src/org/ntlab/pushPullRefactoring/PushPullProcessor.java +++ b/src/org/ntlab/pushPullRefactoring/PushPullProcessor.java @@ -33,11 +33,13 @@ import org.eclipse.jdt.core.dom.ASTVisitor; import org.eclipse.jdt.core.dom.Annotation; import org.eclipse.jdt.core.dom.Block; +import org.eclipse.jdt.core.dom.BodyDeclaration; import org.eclipse.jdt.core.dom.CompilationUnit; import org.eclipse.jdt.core.dom.FieldAccess; import org.eclipse.jdt.core.dom.FieldDeclaration; import org.eclipse.jdt.core.dom.MarkerAnnotation; import org.eclipse.jdt.core.dom.MethodDeclaration; +import org.eclipse.jdt.core.dom.MethodInvocation; import org.eclipse.jdt.core.dom.Modifier; import org.eclipse.jdt.core.dom.NormalAnnotation; import org.eclipse.jdt.core.dom.PackageDeclaration; @@ -150,6 +152,9 @@ 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) { @@ -255,6 +260,53 @@ return null; } + private void changeGetter(IProgressMonitor pm) { + + CompilationUnit unit = descriptor.getDistinationClass(); + var getter = searchMethodDeclaration(unit, "Getter"); + ASTNode[] changed = new ASTNode[1]; + + getter.accept(new ASTVisitor() { + @Override + public boolean visit(MethodInvocation node) { + + changed[0] = node; + return false; + } + }); + ASTRewrite rewrite = ASTRewrite.create(changed[0].getAST()); + ListRewrite[] rewrites = new ListRewrite[1]; + FieldDeclaration fd = searchFieldDeclaration(unit, "State"); + Statement pushable = (Statement) rewrite.createStringPlaceholder(fd.fragments().get(0).toString(), ASTNode.EMPTY_STATEMENT); + PackageDeclaration packageDeclaration = unit.getPackage(); + rewrite.set(unit, CompilationUnit.PACKAGE_PROPERTY,packageDeclaration, null); + TextEditGroup editGroup = new TextEditGroup("new class edit group"); + rewrites[0] = rewrite.getListRewrite(changed[0], MethodInvocation.TYPE_ARGUMENTS_PROPERTY) ; + rewrites[0].insertFirst(pushable, editGroup); + + + + // rewrites.insertFirst(pushable, editGroup); + // rewrite.set(unit, CompilationUnit.PACKAGE_PROPERTY,packageDeclaration, null); + + //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(); + } + } private MethodDeclaration createGetCtargetMethod(AST ast) { MethodDeclaration newDeclaration = ast.newMethodDeclaration(); @@ -292,6 +344,7 @@ return fieldDeclaration; } + private ASTNode searchFieldNode(String annotationName,String... value) { ASTNode[] result = new ASTNode[1]; final String a = "@"+annotationName; @@ -363,6 +416,55 @@ }); return result[0]; } + + /** + * �N���X�t�@�C����Ώۂ�,�A�m�e�[�V�������ƒl����,���ꂪ�t�^����Ă���t�B�[���h��Ԃ����\�b�h. + * �A�m�e�[�V�����̒l�����������Ɋ܂߂鏈���͖����� + * @param cu �Ώۂ̃N���X�t�@�C�� + * @param annotationName �A�m�e�[�V������ + * @param value �A�m�e�[�V�����̒l + * @return �A�m�e�[�V�������t�^���ꂽ�t�B�[���h�̐錾�� + */ + private MethodDeclaration searchMethodDeclaration(CompilationUnit cu, String annotationName, String... value) { + MethodDeclaration[] result = new MethodDeclaration[1]; + + cu.accept(new ASTVisitor() { + @Override + public boolean visit(MethodDeclaration node) { + var modifiers = node.modifiers(); + for(var annotation : modifiers) { + //annotation���A�m�e�[�V��������Ȃ���,���̃��[�v�� + if(!(annotation instanceof Annotation))continue; + String annoName = ((Annotation)annotation).getTypeName().toString(); + if(annotationName.equals(annoName)) { + + //annotation���l�̖����A�m�e�[�V�����������ꍇ + if(annotation instanceof MarkerAnnotation) { + + result[0] = node; + } + + //annotation���l��1�‚̃A�m�e�[�V�����������ꍇ + if(annotation instanceof SingleMemberAnnotation) { + var singleMemberAnnotation = ( SingleMemberAnnotation)annotation; + if(singleMemberAnnotation.getValue().equals(value[0]))result[0] = node; + } + //annotation���l�𕡐����ƒA�m�e�[�V�����������ꍇ + if(annotation instanceof NormalAnnotation) { + NormalAnnotation normalAnnotation = (NormalAnnotation)annotation; + + // if(normalAnnotation.values())result[0] = node; + } + + } + } + return super.visit(node); + } + + }); + return result[0]; + } + //2�‚̃��X�g�����—v�f�����������ǂ����𔻒肷�郁�\�b�h private boolean isEqualSets(List listA, List listB) { for(String a:(List)listA) {