]>
Commit | Line | Data |
---|---|---|
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 | *******************************************************************************/ | |
11 | package org.eclipse.jdt.internal.corext.refactoring.structure; | |
12 | ||
13 | import java.util.HashSet; | |
14 | import java.util.Set; | |
15 | ||
16 | import org.eclipse.ltk.core.refactoring.RefactoringStatus; | |
17 | ||
18 | import org.eclipse.jdt.core.dom.AST; | |
19 | import org.eclipse.jdt.core.dom.ASTNode; | |
20 | import org.eclipse.jdt.core.dom.ASTVisitor; | |
21 | import org.eclipse.jdt.core.dom.Expression; | |
22 | import org.eclipse.jdt.core.dom.FieldAccess; | |
23 | import org.eclipse.jdt.core.dom.IBinding; | |
24 | import org.eclipse.jdt.core.dom.IPackageBinding; | |
25 | import org.eclipse.jdt.core.dom.ITypeBinding; | |
26 | import org.eclipse.jdt.core.dom.MemberRef; | |
27 | import org.eclipse.jdt.core.dom.MethodInvocation; | |
28 | import org.eclipse.jdt.core.dom.MethodRef; | |
29 | import org.eclipse.jdt.core.dom.Name; | |
30 | import org.eclipse.jdt.core.dom.QualifiedName; | |
31 | import org.eclipse.jdt.core.dom.SimpleName; | |
32 | ||
33 | import org.eclipse.jdt.internal.corext.dom.ASTNodes; | |
34 | import org.eclipse.jdt.internal.corext.dom.Bindings; | |
35 | import org.eclipse.jdt.internal.corext.refactoring.RefactoringCoreMessages; | |
36 | import 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 | } |