]> git.uio.no Git - ifi-stolz-refaktor.git/blame - case-study/jdt-before/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/ReferenceAnalyzer.java
Case Study: adding data and statistics
[ifi-stolz-refaktor.git] / case-study / jdt-before / core refactoring / org / eclipse / jdt / internal / corext / refactoring / structure / ReferenceAnalyzer.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 org.eclipse.jdt.core.dom.AnnotationTypeDeclaration;
14import org.eclipse.jdt.core.dom.EnumDeclaration;
15import org.eclipse.jdt.core.dom.FieldAccess;
16import org.eclipse.jdt.core.dom.FieldDeclaration;
17import org.eclipse.jdt.core.dom.IBinding;
18import org.eclipse.jdt.core.dom.IMethodBinding;
19import org.eclipse.jdt.core.dom.ITypeBinding;
20import org.eclipse.jdt.core.dom.ImportDeclaration;
21import org.eclipse.jdt.core.dom.MemberRef;
22import org.eclipse.jdt.core.dom.MethodDeclaration;
23import org.eclipse.jdt.core.dom.MethodInvocation;
24import org.eclipse.jdt.core.dom.MethodRef;
25import org.eclipse.jdt.core.dom.QualifiedName;
26import org.eclipse.jdt.core.dom.SimpleName;
27import org.eclipse.jdt.core.dom.TypeDeclaration;
28import org.eclipse.jdt.core.dom.VariableDeclarationFragment;
29
30/**
31 * Updates references to moved static members.
32 * Accepts <code>CompilationUnit</code>s.
33 */
34/* package */ class ReferenceAnalyzer extends MoveStaticMemberAnalyzer {
35
36 public ReferenceAnalyzer(CompilationUnitRewrite cuRewrite, IBinding[] members, ITypeBinding target, ITypeBinding source) {
37 super(cuRewrite, members, source, target);
38 }
39
40 public boolean needsTargetImport() {
41 return fNeedsImport;
42 }
43
44 //---- Moved members are handled by the MovedMemberAnalyzer --------------
45
46 @Override
47 public boolean visit(TypeDeclaration node) {
48 ITypeBinding binding= node.resolveBinding();
49 if (binding != null) {
50 binding= binding.getTypeDeclaration();
51 if (isMovedMember(binding))
52 return false;
53 }
54 return super.visit(node);
55 }
56
57 @Override
58 public boolean visit(VariableDeclarationFragment node) {
59 if (isMovedMember(node.resolveBinding()))
60 return false;
61 return super.visit(node);
62 }
63
64 @Override
65 public boolean visit(FieldDeclaration node) {
66 //see bug 42383: multiple VariableDeclarationFragments not supported:
67 VariableDeclarationFragment singleFragment= (VariableDeclarationFragment) node.fragments().get(0);
68 if (isMovedMember(singleFragment.resolveBinding()))
69 return false; // don't update javadoc of moved field here
70 return super.visit(node);
71 }
72
73 @Override
74 public boolean visit(MethodDeclaration node) {
75 if (isMovedMember(node.resolveBinding()))
76 return false;
77 return super.visit(node);
78 }
79
80
81 //---- types and fields --------------------------
82
83 @Override
84 public boolean visit(SimpleName node) {
85 if (! node.isDeclaration() && isMovedMember(node.resolveBinding()) && ! isProcessed(node))
86 rewrite(node, fTarget);
87 return false;
88 }
89
90 @Override
91 public boolean visit(QualifiedName node) {
92 if (isMovedMember(node.resolveBinding())) {
93 if (node.getParent() instanceof ImportDeclaration) {
94 ITypeBinding typeBinding= node.resolveTypeBinding();
95 if (typeBinding != null)
96 fCuRewrite.getImportRewrite().removeImport(typeBinding.getQualifiedName());
97 String imp= fCuRewrite.getImportRewrite().addImport(fTarget.getQualifiedName() + '.' + node.getName().getIdentifier());
98 fCuRewrite.getImportRemover().registerAddedImport(imp);
99 } else {
100 rewrite(node, fTarget);
101 }
102 return false;
103 } else {
104 return super.visit(node);
105 }
106 }
107
108 @Override
109 public boolean visit(FieldAccess node) {
110 if (isMovedMember(node.resolveFieldBinding()))
111 rewrite(node, fTarget);
112 return super.visit(node);
113 }
114
115 //---- method invocations ----------------------------------
116
117 @Override
118 public boolean visit(MethodInvocation node) {
119 IMethodBinding binding= node.resolveMethodBinding();
120 if (binding != null) {
121 binding= binding.getMethodDeclaration();
122 if (isMovedMember(binding))
123 rewrite(node, fTarget);
124 }
125 return super.visit(node);
126 }
127
128 //---- javadoc references ----------------------------------
129
130 @Override
131 public boolean visit(MemberRef node) {
132 if (isMovedMember(node.resolveBinding()))
133 rewrite(node, fTarget);
134 return false;
135 }
136
137 @Override
138 public boolean visit(MethodRef node) {
139 if (isMovedMember(node.resolveBinding()))
140 rewrite(node, fTarget);
141 return false;
142 }
143
144 @Override
145 public boolean visit(AnnotationTypeDeclaration node) {
146 if (isMovedMember(node.resolveBinding()))
147 return false;
148 return super.visit(node);
149 }
150
151 @Override
152 public boolean visit(EnumDeclaration node) {
153 if (isMovedMember(node.resolveBinding()))
154 return false;
155 return super.visit(node);
156 }
157}