diff --git a/translator/src/main/java/com/google/devtools/j2objc/translate/EnhancedForRewriter.java b/translator/src/main/java/com/google/devtools/j2objc/translate/EnhancedForRewriter.java index e758585900..c2b087e2d2 100644 --- a/translator/src/main/java/com/google/devtools/j2objc/translate/EnhancedForRewriter.java +++ b/translator/src/main/java/com/google/devtools/j2objc/translate/EnhancedForRewriter.java @@ -78,9 +78,7 @@ public void endVisit(EnhancedForStatement node) { } else if (loopVariable.asType().getKind().isPrimitive()) { boxLoopVariable(node, expressionType, loopVariable); } else { - VariableElement newLoopVariable = GeneratedVariableElement.mutableCopy(loopVariable) - .setTypeQualifiers("__strong"); - node.getParameter().setVariableElement(newLoopVariable); + nameTable.setTypeQualifiers(loopVariable, "__strong"); } } @@ -93,10 +91,10 @@ private void handleArrayIteration(EnhancedForStatement node) { TypeMirror bufferType = new PointerType(componentType); VariableElement arrayVariable = GeneratedVariableElement.newLocalVar( "a__", expressionType, null); - VariableElement bufferVariable = GeneratedVariableElement.newLocalVar("b__", bufferType, null) - .setTypeQualifiers("const*"); - VariableElement endVariable = GeneratedVariableElement.newLocalVar("e__", bufferType, null) - .setTypeQualifiers("const*"); + VariableElement bufferVariable = GeneratedVariableElement.newLocalVar("b__", bufferType, null); + nameTable.setTypeQualifiers(bufferVariable, "const*"); + VariableElement endVariable = GeneratedVariableElement.newLocalVar("e__", bufferType, null); + nameTable.setTypeQualifiers(endVariable, "const*"); VariableElement bufferField = GeneratedVariableElement.newField( "buffer", bufferType, iosArrayType) .addModifiers(Modifier.PUBLIC); diff --git a/translator/src/main/java/com/google/devtools/j2objc/types/GeneratedVariableElement.java b/translator/src/main/java/com/google/devtools/j2objc/types/GeneratedVariableElement.java index d41f9ad697..bf5aeb5c75 100644 --- a/translator/src/main/java/com/google/devtools/j2objc/types/GeneratedVariableElement.java +++ b/translator/src/main/java/com/google/devtools/j2objc/types/GeneratedVariableElement.java @@ -35,7 +35,6 @@ public class GeneratedVariableElement extends GeneratedElement implements Variab private final TypeMirror type; private boolean nonnull = false; private boolean isWeak = false; - private String typeQualifiers; private GeneratedVariableElement( String name, TypeMirror type, ElementKind kind, Element enclosingElement, boolean synthetic) { @@ -105,22 +104,6 @@ public GeneratedVariableElement setIsWeak(boolean value) { return this; } - /** - * Sets the qualifiers that should be added to the variable declaration. Use - * an asterisk ('*') to delimit qualifiers that should apply to a pointer from - * qualifiers that should apply to the pointee type. For example setting the - * qualifier as "__strong * const" on a string array will result in a - * declaration of "NSString * __strong * const". - */ - public GeneratedVariableElement setTypeQualifiers(String qualifiers) { - typeQualifiers = qualifiers; - return this; - } - - public String getTypeQualifiers() { - return typeQualifiers; - } - @Override public GeneratedVariableElement addAnnotationMirrors( Collection newAnnotations) { diff --git a/translator/src/main/java/com/google/devtools/j2objc/util/ElementUtil.java b/translator/src/main/java/com/google/devtools/j2objc/util/ElementUtil.java index 192329fc1f..963e28e0a7 100644 --- a/translator/src/main/java/com/google/devtools/j2objc/util/ElementUtil.java +++ b/translator/src/main/java/com/google/devtools/j2objc/util/ElementUtil.java @@ -274,11 +274,6 @@ public static boolean isNonnull(VariableElement element) { && ((GeneratedVariableElement) element).isNonnull(); } - public static String getTypeQualifiers(VariableElement element) { - return element instanceof GeneratedVariableElement - ? ((GeneratedVariableElement) element).getTypeQualifiers() : null; - } - public static boolean isAbstract(Element element) { return hasModifier(element, Modifier.ABSTRACT); } diff --git a/translator/src/main/java/com/google/devtools/j2objc/util/NameTable.java b/translator/src/main/java/com/google/devtools/j2objc/util/NameTable.java index eca3f51ed2..ab6832764e 100644 --- a/translator/src/main/java/com/google/devtools/j2objc/util/NameTable.java +++ b/translator/src/main/java/com/google/devtools/j2objc/util/NameTable.java @@ -76,6 +76,7 @@ public class NameTable { private final CaptureInfo captureInfo; private final Options options; private final Map variableNames = new HashMap<>(); + private final Map variableTypeQualifiers = new HashMap<>(); private final Map methodSelectorCache = new HashMap<>(); private final Map fullNameCache = new HashMap<>(); @@ -278,6 +279,20 @@ public String getVariableQualifiedName(VariableElement var) { return shortName; } + /** + * Sets the qualifiers that should be added to the variable declaration. Use an asterisk ('*') to + * delimit qualifiers that should apply to a pointer from qualifiers that should apply to the + * pointee type. For example setting the qualifier as "__strong * const" on a string array will + * result in a declaration of "NSString * __strong * const". + */ + public void setTypeQualifiers(VariableElement var, String qualifiers) { + variableTypeQualifiers.put(var, qualifiers); + } + + public String getTypeQualifiers(VariableElement var) { + return variableTypeQualifiers.get(var); + } + /** * Returns the name of an annotation property variable, extracted from its accessor element. */ @@ -828,8 +843,7 @@ public String getObjCType(TypeMirror type) { } public String getObjCType(VariableElement var) { - return getObjcTypeInner( - var.asType(), ElementUtil.getTypeQualifiers(var), false, false, null); + return getObjcTypeInner(var.asType(), getTypeQualifiers(var), false, false, null); } public String getObjCTypeDeclaration(TypeMirror type) {