Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--org.eclipse.jdt.core/dom/org/eclipse/jdt/internal/core/dom/rewrite/ASTRewriteAnalyzer.java8
-rw-r--r--plugins/org.eclipse.objectteams.otdt.refactoring/src/org/eclipse/objectteams/otdt/internal/refactoring/adaptor/pullup/PullUpAdaptor.java47
2 files changed, 48 insertions, 7 deletions
diff --git a/org.eclipse.jdt.core/dom/org/eclipse/jdt/internal/core/dom/rewrite/ASTRewriteAnalyzer.java b/org.eclipse.jdt.core/dom/org/eclipse/jdt/internal/core/dom/rewrite/ASTRewriteAnalyzer.java
index 5c31a66e1..90cb23d21 100644
--- a/org.eclipse.jdt.core/dom/org/eclipse/jdt/internal/core/dom/rewrite/ASTRewriteAnalyzer.java
+++ b/org.eclipse.jdt.core/dom/org/eclipse/jdt/internal/core/dom/rewrite/ASTRewriteAnalyzer.java
@@ -4402,15 +4402,15 @@ public final class ASTRewriteAnalyzer extends ASTVisitor {
return false;
}
- //FIXME(SH): XXX COMPLETE THESE!!!
-
public boolean visit(LiftingType node)
{
if (!hasChildrenChanges(node)) {
-// System.out.println("visit LiftingType unchanged");
return doVisitUnchangedChildren(node);
}
-// System.out.println("visit LiftingType changed");
+ rewriteRequiredNode(node, LiftingType.BASE_TYPE_PROPERTY);
+ ensureSpaceAfterReplace(node, LiftingType.BASE_TYPE_PROPERTY);
+ rewriteRequiredNode(node, LiftingType.ROLE_TYPE_PROPERTY);
+ ensureSpaceAfterReplace(node, LiftingType.ROLE_TYPE_PROPERTY);
return true;
}
diff --git a/plugins/org.eclipse.objectteams.otdt.refactoring/src/org/eclipse/objectteams/otdt/internal/refactoring/adaptor/pullup/PullUpAdaptor.java b/plugins/org.eclipse.objectteams.otdt.refactoring/src/org/eclipse/objectteams/otdt/internal/refactoring/adaptor/pullup/PullUpAdaptor.java
index b87e7b64b..1669df95e 100644
--- a/plugins/org.eclipse.objectteams.otdt.refactoring/src/org/eclipse/objectteams/otdt/internal/refactoring/adaptor/pullup/PullUpAdaptor.java
+++ b/plugins/org.eclipse.objectteams.otdt.refactoring/src/org/eclipse/objectteams/otdt/internal/refactoring/adaptor/pullup/PullUpAdaptor.java
@@ -65,6 +65,7 @@ import org.eclipse.jdt.internal.corext.refactoring.structure.CompilationUnitRewr
import org.eclipse.jdt.internal.corext.refactoring.structure.ImportRewriteUtil;
import org.eclipse.jdt.internal.corext.refactoring.structure.MemberVisibilityAdjustor.IncomingMemberVisibilityAdjustment;
import org.eclipse.jdt.internal.corext.refactoring.structure.TypeVariableMaplet;
+import org.eclipse.jdt.internal.corext.refactoring.typeconstraints.CompilationUnitRange;
import org.eclipse.jdt.internal.corext.refactoring.typeconstraints.types.TType;
import org.eclipse.jdt.internal.corext.util.JavaModelUtil;
import org.eclipse.jdt.internal.corext.util.JdtFlags;
@@ -1001,15 +1002,16 @@ public team class PullUpAdaptor {
}
}
- // advance fix for Bug 393932 - [refactoring] pull-up with "use the destination type where possible" creates bogus import of nested type
protected class UseSuperTypeFix playedBy SuperTypeRefactoringProcessor {
- void rewriteTypeOccurrence(final TType estimate, final CompilationUnitRewrite rewrite, final ASTNode node, final TextEditGroup group)
+ // === advance fix for Bug 393932 - [refactoring] pull-up with "use the destination type where possible" creates bogus import of nested type ===
+
+ void fixRewriteTypeOccurrence(final TType estimate, final CompilationUnitRewrite rewrite, final ASTNode node, final TextEditGroup group)
<- replace
void rewriteTypeOccurrence(final TType estimate, final CompilationUnitRewrite rewrite, final ASTNode node, final TextEditGroup group);
@SuppressWarnings("basecall")
- callin void rewriteTypeOccurrence(TType estimate, CompilationUnitRewrite rewrite, ASTNode node, TextEditGroup group) {
+ callin void fixRewriteTypeOccurrence(TType estimate, CompilationUnitRewrite rewrite, ASTNode node, TextEditGroup group) {
// combined from direct base method plus createCorrespondingNode(..):
rewrite.getImportRemover().registerRemovedNode(node);
ImportRewrite importRewrite= rewrite.getImportRewrite();
@@ -1017,5 +1019,44 @@ public team class PullUpAdaptor {
ASTNode correspondingNode = importRewrite.addImportFromSignature(new BindingKey(estimate.getBindingKey()).toSignature(), rewrite.getAST(), context);
rewrite.getASTRewrite().replace(node, correspondingNode, group);
}
+
+ // === tell the base class how to cope with LiftingType references: ===
+
+ void rewriteTypeOccurrence(TType arg0, CompilationUnitRewrite arg1, ASTNode arg2, TextEditGroup arg3)
+ -> void rewriteTypeOccurrence(TType arg0, CompilationUnitRewrite arg1, ASTNode arg2, TextEditGroup arg3);
+
+ void rewriteTypeOccurrence(final CompilationUnitRange range, final TType estimate, final ASTRequestor requestor, final CompilationUnitRewrite rewrite, final CompilationUnit copy, final Set<String> replacements, final TextEditGroup group)
+ <- after
+ void rewriteTypeOccurrence(final CompilationUnitRange range, final TType estimate, final ASTRequestor requestor, final CompilationUnitRewrite rewrite, final CompilationUnit copy, final Set<String> replacements, final TextEditGroup group);
+
+ private void rewriteTypeOccurrence(CompilationUnitRange range, TType estimate, ASTRequestor requestor, CompilationUnitRewrite rewrite, CompilationUnit copy, Set<String> replacements, TextEditGroup group)
+ {
+ ASTNode node= null;
+ IBinding binding= null;
+ final CompilationUnit target= rewrite.getRoot();
+ node= NodeFinder.perform(copy, range.getSourceRange());
+ if (node != null) {
+ node= ASTNodes.getNormalizedNode(node);
+ // OT: remember whether we saw the base side or the role side of a LiftingType:
+ StructuralPropertyDescriptor locationInParent = node.getLocationInParent();
+ node = node.getParent();
+ if (node instanceof LiftingType) {
+ // climb up one more step than base method does to find the argument (LT only occurs as an argument's type):
+ VariableDeclaration argument = (VariableDeclaration) node.getParent();
+ binding= argument.resolveBinding();
+ node= target.findDeclaringNode(binding.getKey());
+ if (node instanceof SingleVariableDeclaration) {
+ // OT: drill into detail of LiftingType:
+ ASTNode oldTypeNode = (ASTNode)((SingleVariableDeclaration)node).getType().getStructuralProperty(locationInParent);
+ rewriteTypeOccurrence(estimate, rewrite, oldTypeNode, group);
+ if (node.getParent() instanceof MethodDeclaration) {
+ binding= ((VariableDeclaration) node).resolveBinding();
+ if (binding != null)
+ replacements.add(binding.getKey());
+ }
+ }
+ }
+ }
+ }
}
}

Back to the top