]> git.uio.no Git - ifi-stolz-refaktor.git/blame - case-study/jdt-after/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/MoveStaticMemberAnalyzer.java
Case Study: adding data and statistics
[ifi-stolz-refaktor.git] / case-study / jdt-after / core refactoring / org / eclipse / jdt / internal / corext / refactoring / structure / MoveStaticMemberAnalyzer.java
CommitLineData
1b2798f6
EK
1/*******************************************************************************
2 * Copyright (c) 2000, 2011 IBM Corporation and others.
3 * All rights reserved. This program and the accompanying materials
4 * are made available under the terms of the Eclipse Public License v1.0
5 * which accompanies this distribution, and is available at
6 * http://www.eclipse.org/legal/epl-v10.html
7 *
8 * Contributors:
9 * IBM Corporation - initial API and implementation
10 *******************************************************************************/
11package org.eclipse.jdt.internal.corext.refactoring.structure;
12
13import java.util.HashSet;
14import java.util.Set;
15
16import org.eclipse.ltk.core.refactoring.RefactoringStatus;
17
18import org.eclipse.jdt.core.dom.AST;
19import org.eclipse.jdt.core.dom.ASTNode;
20import org.eclipse.jdt.core.dom.ASTVisitor;
21import org.eclipse.jdt.core.dom.Expression;
22import org.eclipse.jdt.core.dom.FieldAccess;
23import org.eclipse.jdt.core.dom.IBinding;
24import org.eclipse.jdt.core.dom.IPackageBinding;
25import org.eclipse.jdt.core.dom.ITypeBinding;
26import org.eclipse.jdt.core.dom.MemberRef;
27import org.eclipse.jdt.core.dom.MethodInvocation;
28import org.eclipse.jdt.core.dom.MethodRef;
29import org.eclipse.jdt.core.dom.Name;
30import org.eclipse.jdt.core.dom.QualifiedName;
31import org.eclipse.jdt.core.dom.SimpleName;
32
33import org.eclipse.jdt.internal.corext.dom.ASTNodes;
34import org.eclipse.jdt.internal.corext.dom.Bindings;
35import org.eclipse.jdt.internal.corext.refactoring.RefactoringCoreMessages;
36import org.eclipse.jdt.internal.corext.refactoring.base.JavaStatusContext;
37
38/* package */ class MoveStaticMemberAnalyzer extends ASTVisitor {
39
40 protected RefactoringStatus fStatus;
41
42 protected ITypeBinding fSource;
43 protected ITypeBinding fTarget;
44 protected CompilationUnitRewrite fCuRewrite;
45 protected IBinding[] fMembers;
46
47 protected boolean fNeedsImport;
48
49 protected Set<SimpleName> fProcessed;
50
51 protected static final String REFERENCE_UPDATE= RefactoringCoreMessages.MoveMembersRefactoring_referenceUpdate;
52
53 public MoveStaticMemberAnalyzer(CompilationUnitRewrite cuRewrite, IBinding[] members, ITypeBinding source, ITypeBinding target) {
54 super(true);
55 fStatus= new RefactoringStatus();
56 fCuRewrite= cuRewrite;
57 fMembers= members;
58 fSource= source;
59 fTarget= target;
60 fProcessed= new HashSet<SimpleName>();
61 }
62
63 public RefactoringStatus getStatus() {
64 return fStatus;
65 }
66
67 protected boolean isProcessed(ASTNode node) {
68 return fProcessed.contains(node);
69 }
70
71 protected void rewrite(SimpleName node, ITypeBinding type) {
72 AST ast= node.getAST();
73 fCuRewrite.generated_1421235799862659801(node, type, ast);
74 fProcessed.add(node);
75 fNeedsImport= true;
76 }
77
78 protected void rewrite(QualifiedName node, ITypeBinding type) {
79 rewriteName(node.getQualifier(), type);
80 fProcessed.add(node.getName());
81 }
82
83 protected void rewrite(FieldAccess node, ITypeBinding type) {
84 Expression exp= node.getExpression();
85 if (exp == null) {
86 fCuRewrite.generated_5666663051486103161(this, node, type);
87 } else if (exp instanceof Name) {
88 rewriteName((Name)exp, type);
89 } else {
90 rewriteExpression(node, exp, type);
91 }
92 fProcessed.add(node.getName());
93 }
94
95 protected void rewrite(MethodInvocation node, ITypeBinding type) {
96 Expression exp= node.getExpression();
97 fCuRewrite.generated_6342082313191871784(this, node, type, exp);
98 fProcessed.add(node.getName());
99 }
100
101 protected void rewrite(MemberRef node, ITypeBinding type) {
102 Name qualifier= node.getQualifier();
103 fCuRewrite.generated_4885298094158177564(this, node, type, qualifier);
104 fProcessed.add(node.getName());
105 }
106
107 protected void rewrite(MethodRef node, ITypeBinding type) {
108 Name qualifier= node.getQualifier();
109 fCuRewrite.generated_3186435991137246352(this, node, type, qualifier);
110 fProcessed.add(node.getName());
111 }
112
113 void rewriteName(Name name, ITypeBinding type) {
114 AST creator= name.getAST();
115 boolean fullyQualified= false;
116 if (name instanceof QualifiedName) {
117 SimpleName left= ASTNodes.getLeftMostSimpleName(name);
118 if (left.resolveBinding() instanceof IPackageBinding)
119 fullyQualified= true;
120 }
121 fCuRewrite.generated_3019603873480475513(this, name, type, creator, fullyQualified);
122 }
123
124 void rewriteExpression(ASTNode node, Expression exp, ITypeBinding type) {
125 fCuRewrite.generated_3134341093787238818(this, exp, type);
126 nonStaticAccess(node);
127 }
128
129 protected void nonStaticAccess(ASTNode node) {
130 fStatus.addWarning(RefactoringCoreMessages.MoveStaticMemberAnalyzer_nonStatic,
131 JavaStatusContext.create(fCuRewrite.getCu(), node));
132 }
133
134 protected boolean isStaticAccess(Expression exp, ITypeBinding type) {
135 if (!(exp instanceof Name))
136 return false;
137 return Bindings.equals(type, ((Name)exp).resolveBinding());
138 }
139
140 protected boolean isMovedMember(IBinding binding) {
141 if (binding == null)
142 return false;
143 for (int i= 0; i < fMembers.length; i++) {
144 if (Bindings.equalDeclarations(fMembers[i], binding))
145 return true;
146 }
147 return false;
148 }
149}