Fix bugs in migrator, ish.
diff --git a/errorprone/src/main/java/org/robolectric/errorprone/bugpatterns/DeprecatedMethodsCheck.java b/errorprone/src/main/java/org/robolectric/errorprone/bugpatterns/DeprecatedMethodsCheck.java
index 3975e4e..c6612ce 100644
--- a/errorprone/src/main/java/org/robolectric/errorprone/bugpatterns/DeprecatedMethodsCheck.java
+++ b/errorprone/src/main/java/org/robolectric/errorprone/bugpatterns/DeprecatedMethodsCheck.java
@@ -84,7 +84,7 @@
// transform `ShadowApplication.getInstance()`
// to `shadowOf(RuntimeEnvironment.application)`:
Tree parent = state.getPath().getParentPath().getLeaf();
- replaceAssignmentRhs(parent, createSyntheticShadowAccess(state));
+ // replaceAssignmentRhs(parent, createSyntheticShadowAccess(state));
possibleFixes.put(
parent,
diff --git a/errorprone/src/main/java/org/robolectric/errorprone/bugpatterns/ShadowUsageCheck.java b/errorprone/src/main/java/org/robolectric/errorprone/bugpatterns/ShadowUsageCheck.java
index c5ecf47..bd76348 100644
--- a/errorprone/src/main/java/org/robolectric/errorprone/bugpatterns/ShadowUsageCheck.java
+++ b/errorprone/src/main/java/org/robolectric/errorprone/bugpatterns/ShadowUsageCheck.java
@@ -62,6 +62,7 @@
import com.sun.tools.javac.tree.JCTree.JCVariableDecl;
import com.sun.tools.javac.tree.TreeMaker;
import com.sun.tools.javac.util.List;
+import com.sun.tools.javac.util.Name;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
@@ -207,7 +208,8 @@
replaceNode =
fieldAccess.selected =
createSyntheticShadowAccess(
- identifierTree, fieldAccess, shadowOfCall, newVarName, state);
+ identifierTree, fieldAccess, shadowOfCall, newVarName, symbol,
+ state);
} else {
identifierTree.name = state.getName(newVarName);
identifierTree.sym.name = state.getName(newVarName);
@@ -354,6 +356,7 @@
(JCFieldAccess) container,
shadowOfCall,
newFieldName,
+ symbol,
state);
}
@@ -454,20 +457,38 @@
JCFieldAccess fieldAccess,
MethodInvocationTree shadowOfCall,
String newFieldName,
+ Symbol originalSymbol,
VisitorState state) {
TreeMaker treeMaker = state.getTreeMaker();
+ Symbol newSymbol = createSymbol(originalSymbol, state.getName(newFieldName),
+ ((JCExpression) shadowOfCall.getArguments().get(0)).type);
+
JCMethodInvocation callShadowOf =
treeMaker.Apply(
null,
(JCExpression) shadowOfCall.getMethodSelect(),
- List.of(treeMaker.Ident(state.getName(newFieldName))));
- callShadowOf.type = new UnknownType();
+ com.sun.tools.javac.util.List.of(createIdent(treeMaker, newSymbol)));
+ callShadowOf.type = ((JCMethodInvocation) shadowOfCall).type;
fieldAccess.selected = callShadowOf;
callShadowOf.pos = replaceNode.pos;
return callShadowOf;
}
+ private static Symbol createSymbol(Symbol oldSymbol, Name newName, Type newType) {
+ Symbol newSymbol = oldSymbol.clone(oldSymbol.owner);
+ newSymbol.name = newName;
+ newSymbol.type = newType;
+ return newSymbol;
+ }
+
+ private static JCIdent createIdent(TreeMaker treeMaker, Symbol symbol) {
+ JCIdent newFieldIdent = treeMaker.Ident(symbol.name);
+ newFieldIdent.type = symbol.type;
+ newFieldIdent.sym = symbol;
+ return newFieldIdent;
+ }
+
private static boolean isMethodParam(Symbol fieldSymbol, TreePath path) {
JCMethodDecl enclosingMethodDecl = ASTHelpers.findEnclosingNode(path, JCMethodDecl.class);
if (enclosingMethodDecl != null) {