Skip to content

Commit

Permalink
Simplify variable name accessors in NameTable, avoiding extra method …
Browse files Browse the repository at this point in the history
…calls or if-statements at call sites.

	Change on 2015/05/22 by kstanger <kstanger@google.com>
-------------
Created by MOE: http://code.google.com/p/moe-java
MOE_MIGRATED_REVID=94300956
  • Loading branch information
kstanger authored and tomball committed May 26, 2015
1 parent 122a831 commit abe2bb2
Show file tree
Hide file tree
Showing 12 changed files with 89 additions and 95 deletions.
Expand Up @@ -192,15 +192,13 @@ name, cStr(name), cStr(returnType),

private void generateFieldsMetadata() {
List<String> fieldMetadata = Lists.newArrayList();
String typeName = nameTable.getFullName(type);
if (typeNode instanceof EnumDeclaration) {
for (EnumConstantDeclaration decl : ((EnumDeclaration) typeNode).getEnumConstants()) {
fieldMetadata.add(
generateFieldMetadata(decl.getVariableBinding(), decl.getName(), typeName));
fieldMetadata.add(generateFieldMetadata(decl.getVariableBinding(), decl.getName()));
}
}
for (VariableDeclarationFragment f : TreeUtil.getAllFields(typeNode)) {
fieldMetadata.add(generateFieldMetadata(f.getVariableBinding(), f.getName(), typeName));
fieldMetadata.add(generateFieldMetadata(f.getVariableBinding(), f.getName()));
}
if (fieldMetadata.size() > 0) {
builder.append(" static const J2ObjcFieldInfo fields[] = {\n");
Expand All @@ -212,24 +210,21 @@ private void generateFieldsMetadata() {
fieldMetadataCount = fieldMetadata.size();
}

private String generateFieldMetadata(IVariableBinding var, SimpleName name, String typeName) {
private String generateFieldMetadata(IVariableBinding var, SimpleName name) {
int modifiers = getFieldModifiers(var);
String javaName = name.getIdentifier();
String objcName = var.isEnumConstant() ? nameTable.getVariableName(var)
: NameTable.javaFieldToObjC(nameTable.getVariableName(var));
String objcName = nameTable.getVariableShortName(var);
if (objcName.equals(javaName + '_')) {
// Don't print Java name if it matches the default pattern, to conserve space.
javaName = null;
}
String staticRef = "NULL";
String constantValue = "";
if (BindingUtil.isStatic(var)) {
if (BindingUtil.isPrimitiveConstant(var)) {
constantValue = String.format(".constantValue.%s = %s",
getRawValueField(var), nameTable.getPrimitiveConstantName(var));
} else {
staticRef = String.format("&%s_%s", typeName, objcName);
}
if (BindingUtil.isPrimitiveConstant(var)) {
constantValue = String.format(".constantValue.%s = %s",
getRawValueField(var), nameTable.getVariableQualifiedName(var));
} else if (BindingUtil.isStatic(var)) {
staticRef = '&' + nameTable.getVariableQualifiedName(var);
}
return String.format(
" { \"%s\", %s, 0x%x, \"%s\", %s, %s, %s },\n",
Expand Down
Expand Up @@ -725,11 +725,8 @@ public boolean visit(QualifiedName node) {
IBinding binding = node.getBinding();
if (binding instanceof IVariableBinding) {
IVariableBinding var = (IVariableBinding) binding;
if (BindingUtil.isPrimitiveConstant(var)) {
buffer.append(nameTable.getPrimitiveConstantName(var));
return false;
} else if (BindingUtil.isStatic(var)) {
buffer.append(nameTable.getStaticVarQualifiedName(var));
if (BindingUtil.isGlobalVar(var)) {
buffer.append(nameTable.getVariableQualifiedName(var));
return false;
}
}
Expand Down Expand Up @@ -774,16 +771,7 @@ public boolean visit(ReturnStatement node) {
public boolean visit(SimpleName node) {
IBinding binding = node.getBinding();
if (binding instanceof IVariableBinding) {
IVariableBinding var = (IVariableBinding) binding;
if (BindingUtil.isPrimitiveConstant(var)) {
buffer.append(nameTable.getPrimitiveConstantName(var));
} else if (BindingUtil.isStatic(var)) {
buffer.append(nameTable.getStaticVarQualifiedName(var));
} else if (var.isField()) {
buffer.append(NameTable.javaFieldToObjC(nameTable.getVariableName(var)));
} else {
buffer.append(nameTable.getVariableName(var));
}
buffer.append(nameTable.getVariableQualifiedName((IVariableBinding) binding));
return false;
}
if (binding instanceof ITypeBinding) {
Expand Down Expand Up @@ -848,7 +836,7 @@ public boolean visit(SuperConstructorInvocation node) {

@Override
public boolean visit(SuperFieldAccess node) {
buffer.append(NameTable.javaFieldToObjC(nameTable.getVariableName(node.getVariableBinding())));
buffer.append(nameTable.getVariableQualifiedName(node.getVariableBinding()));
return false;
}

Expand Down
Expand Up @@ -118,7 +118,7 @@ protected void printConstantDefines() {
newline();
for (VariableDeclarationFragment fragment : getPrimitiveConstants()) {
IVariableBinding field = fragment.getVariableBinding();
printf("#define %s ", nameTable.getPrimitiveConstantName(field));
printf("#define %s ", nameTable.getVariableQualifiedName(field));
Object value = field.getConstantValue();
assert value != null;
println(LiteralGenerator.generate(value));
Expand Down Expand Up @@ -211,7 +211,7 @@ protected void printStaticAccessors() {
if (Options.staticAccessorMethods()) {
for (VariableDeclarationFragment fragment : getStaticFields()) {
IVariableBinding var = fragment.getVariableBinding();
String accessorName = nameTable.getVariableName(var);
String accessorName = nameTable.getVariableBaseName(var);
String objcType = nameTable.getObjCType(var.getType());
printf("\n+ (%s)%s;\n", objcType, accessorName);
if (!Modifier.isFinal(var.getModifiers())) {
Expand All @@ -220,7 +220,7 @@ protected void printStaticAccessors() {
}
if (typeNode instanceof EnumDeclaration) {
for (EnumConstantDeclaration constant : ((EnumDeclaration) typeNode).getEnumConstants()) {
String varName = nameTable.getStaticVarName(constant.getVariableBinding());
String varName = nameTable.getVariableBaseName(constant.getVariableBinding());
printf("\n+ (%s *)%s;\n", typeName, varName);
}
}
Expand Down Expand Up @@ -274,8 +274,7 @@ protected void printInstanceVariables() {
if (needsAsterisk) {
print('*');
}
String name = nameTable.getVariableName(varBinding);
print(NameTable.javaFieldToObjC(name));
print(nameTable.getVariableShortName(varBinding));
}
println(";");
unindent();
Expand Down Expand Up @@ -332,7 +331,7 @@ private void printEnumConstants() {
typeName.endsWith("Enum") ? typeName.substring(0, typeName.length() - 4) : typeName;
printf("\nFOUNDATION_EXPORT %s *%s_values_[];\n", typeName, typeName);
for (EnumConstantDeclaration constant : ((EnumDeclaration) typeNode).getEnumConstants()) {
String varName = nameTable.getStaticVarName(constant.getVariableBinding());
String varName = nameTable.getVariableBaseName(constant.getVariableBinding());
String valueName = constant.getName().getIdentifier();
printf("\n#define %s_%s %s_values_[%s_%s]\n",
typeName, varName, typeName, bareTypeName, valueName);
Expand All @@ -359,7 +358,7 @@ protected void printFieldSetters() {
for (VariableDeclarationFragment fragment : fields) {
IVariableBinding var = fragment.getVariableBinding();
String typeStr = nameTable.getObjCType(var.getType());
String fieldName = NameTable.javaFieldToObjC(nameTable.getVariableName(var));
String fieldName = nameTable.getVariableShortName(var);
println(String.format("J2OBJC_FIELD_SETTER(%s, %s, %s)", typeName, fieldName, typeStr));
}
}
Expand All @@ -379,7 +378,7 @@ private void printStaticFieldFullDeclaration(VariableDeclarationFragment fragmen
IVariableBinding var = fragment.getVariableBinding();
String objcType = nameTable.getObjCType(var.getType());
String typeWithSpace = objcType + (objcType.endsWith("*") ? "" : " ");
String name = nameTable.getStaticVarName(var);
String name = nameTable.getVariableShortName(var);
boolean isFinal = Modifier.isFinal(var.getModifiers());
boolean isPrimitive = var.getType().isPrimitive();
newline();
Expand Down
Expand Up @@ -238,7 +238,7 @@ protected String getMethodSignature(MethodDeclaration m) {
IVariableBinding var = params.get(i).getVariableBinding();
String typeName = nameTable.getSpecificObjCType(var.getType());
sb.append(String.format(
"%s:(%s)%s", selParts[i], typeName, nameTable.getVariableName(var)));
"%s:(%s)%s", selParts[i], typeName, nameTable.getVariableShortName(var)));
}
}

Expand All @@ -255,7 +255,7 @@ protected String getFunctionSignature(FunctionDeclaration function) {
IVariableBinding var = iter.next().getVariableBinding();
String paramType = nameTable.getSpecificObjCType(var.getType());
paramType += (paramType.endsWith("*") ? "" : " ");
sb.append(paramType + nameTable.getVariableName(var));
sb.append(paramType + nameTable.getVariableShortName(var));
if (iter.hasNext()) {
sb.append(", ");
}
Expand Down
Expand Up @@ -123,7 +123,7 @@ private void printStaticVars() {
for (VariableDeclarationFragment fragment : fields) {
IVariableBinding varBinding = fragment.getVariableBinding();
Expression initializer = fragment.getInitializer();
String name = nameTable.getStaticVarQualifiedName(varBinding);
String name = nameTable.getVariableQualifiedName(varBinding);
String objcType = nameTable.getObjCType(varBinding.getType());
objcType += objcType.endsWith("*") ? "" : " ";
if (initializer != null) {
Expand All @@ -142,10 +142,8 @@ protected void printStaticAccessors() {
for (VariableDeclarationFragment fragment : getStaticFields()) {
if (!((FieldDeclaration) fragment.getParent()).hasPrivateDeclaration()) {
IVariableBinding varBinding = fragment.getVariableBinding();
String accessorName = nameTable.getVariableName(varBinding);
String varName = BindingUtil.isPrimitiveConstant(varBinding)
? nameTable.getPrimitiveConstantName(varBinding)
: nameTable.getStaticVarQualifiedName(varBinding);
String accessorName = nameTable.getVariableBaseName(varBinding);
String varName = nameTable.getVariableQualifiedName(varBinding);
String objcType = nameTable.getObjCType(varBinding.getType());
printf("\n+ (%s)%s {\n return %s;\n}\n", objcType, accessorName, varName);
int modifiers = varBinding.getModifiers();
Expand All @@ -154,18 +152,19 @@ protected void printStaticAccessors() {
printf("\n+ (void)set%s:(%s)value {\n %s = value;\n}\n",
NameTable.capitalize(accessorName), objcType, varName);
} else {
printf("\n+ (void)set%s:(%s)value {\n %s_set_%s_(value);\n}\n",
printf("\n+ (void)set%s:(%s)value {\n %s_set_%s(value);\n}\n",
NameTable.capitalize(accessorName), objcType,
typeBinding.getName(), varBinding.getName());
typeBinding.getName(), nameTable.getVariableShortName(varBinding));
}
}
}
}
if (typeNode instanceof EnumDeclaration) {
for (EnumConstantDeclaration constant : ((EnumDeclaration) typeNode).getEnumConstants()) {
String varName = nameTable.getVariableName(constant.getVariableBinding());
printf("\n+ (%s *)%s {\n return %s_get_%s();\n}\n",
typeName, varName, typeName, varName);
IVariableBinding varBinding = constant.getVariableBinding();
printf("\n+ (%s *)%s {\n return %s;\n}\n",
typeName, nameTable.getVariableBaseName(varBinding),
nameTable.getVariableQualifiedName(varBinding));
}
}
}
Expand Down Expand Up @@ -248,7 +247,7 @@ private String getJniFunctionSignature(FunctionDeclaration function) {
iter.hasNext(); ) {
IVariableBinding var = iter.next().getVariableBinding();
String paramType = nameTable.getJniType(var.getType());
sb.append(paramType + ' ' + nameTable.getVariableName(var));
sb.append(paramType + ' ' + nameTable.getVariableBaseName(var));
if (iter.hasNext()) {
sb.append(", ");
}
Expand Down Expand Up @@ -281,7 +280,7 @@ private void printJniFunctionAndWrapper(FunctionDeclaration function) {
printf(", %s_class_()", nameTable.getFullName(function.getDeclaringClass()));
}
for (SingleVariableDeclaration param : function.getParameters()) {
printf(", %s", nameTable.getVariableName(param.getVariableBinding()));
printf(", %s", nameTable.getVariableBaseName(param.getVariableBinding()));
}
println(");");
println("}");
Expand Down
Expand Up @@ -37,6 +37,7 @@

import org.eclipse.jdt.core.dom.IMethodBinding;
import org.eclipse.jdt.core.dom.ITypeBinding;
import org.eclipse.jdt.core.dom.IVariableBinding;
import org.eclipse.jdt.core.dom.Modifier;

import java.util.List;
Expand All @@ -63,16 +64,15 @@ public void endVisit(EnumDeclaration node) {
List<Statement> stmts = node.getClassInitStatements().subList(0, 0);
int i = 0;
for (EnumConstantDeclaration constant : node.getEnumConstants()) {
IVariableBinding varBinding = constant.getVariableBinding();
IMethodBinding binding =
addEnumConstructorParams(constant.getMethodBinding().getMethodDeclaration());
ClassInstanceCreation creation = new ClassInstanceCreation(binding);
TreeUtil.copyList(constant.getArguments(), creation.getArguments());
String name = nameTable.getVariableName(constant.getVariableBinding());
creation.getArguments().add(new StringLiteral(name, typeEnv));
creation.getArguments().add(new StringLiteral(varBinding.getName(), typeEnv));
creation.getArguments().add(new NumberLiteral(i++, typeEnv));
creation.setHasRetainedResult(true);
stmts.add(new ExpressionStatement(new Assignment(
new SimpleName(constant.getVariableBinding()), creation)));
stmts.add(new ExpressionStatement(new Assignment(new SimpleName(varBinding), creation)));
}

addExtraNativeDecls(node);
Expand Down
Expand Up @@ -143,8 +143,8 @@ private FunctionInvocation newFieldSetterInvocation(
setterFormat = "%s_setAndConsume_%s";
value = retainedValue;
}
String setterName = String.format(setterFormat, nameTable.getFullName(declaringType),
NameTable.javaFieldToObjC(nameTable.getVariableName(var)));
String setterName = String.format(
setterFormat, nameTable.getFullName(declaringType), nameTable.getVariableShortName(var));
FunctionInvocation invocation = new FunctionInvocation(
setterName, varType, varType, declaringType);
invocation.getArguments().add(TreeUtil.remove(instance));
Expand Down
Expand Up @@ -176,7 +176,7 @@ public boolean visit(PrefixExpression node) {

private Expression newGetterInvocation(IVariableBinding var, boolean assignable) {
ITypeBinding declaringType = var.getDeclaringClass().getTypeDeclaration();
String varName = nameTable.getStaticVarName(var);
String varName = nameTable.getVariableShortName(var);
String getterName = "get";
ITypeBinding type = var.getType();
ITypeBinding returnType = type;
Expand Down Expand Up @@ -205,7 +205,7 @@ private FunctionInvocation newSetterInvocation(IVariableBinding var, Expression
}
}
String funcName = String.format(
funcFormat, nameTable.getFullName(declaringType), nameTable.getStaticVarName(var));
funcFormat, nameTable.getFullName(declaringType), nameTable.getVariableShortName(var));
FunctionInvocation invocation = new FunctionInvocation(
funcName, varType, varType, declaringType);
invocation.getArguments().add(value);
Expand Down
Expand Up @@ -24,7 +24,6 @@
import com.google.devtools.j2objc.ast.TreeVisitor;
import com.google.devtools.j2objc.ast.TypeDeclaration;
import com.google.devtools.j2objc.util.BindingUtil;
import com.google.devtools.j2objc.util.NameTable;

import org.eclipse.jdt.core.dom.ITypeBinding;
import org.eclipse.jdt.core.dom.IVariableBinding;
Expand Down Expand Up @@ -74,7 +73,7 @@ private void pushType(ITypeBinding type) {
collectAndRenameFields(type, fields);
Set<String> fullFieldNames = Sets.newHashSet();
for (IVariableBinding field : fields) {
fullFieldNames.add(NameTable.javaFieldToObjC(nameTable.getVariableName(field)));
fullFieldNames.add(nameTable.getVariableShortName(field));
}
fieldNameStack.add(fullFieldNames);
}
Expand Down
Expand Up @@ -69,8 +69,18 @@ public static boolean isPrimitiveConstant(IVariableBinding binding) {
&& binding.getDeclaringClass() != null;
}

/**
* Returns whether this variable will be declared in global scope in ObjC.
*/
public static boolean isGlobalVar(IVariableBinding binding) {
return isStatic(binding) || isPrimitiveConstant(binding);
}

/**
* Returns whether this variable will be an ObjC instance variable.
*/
public static boolean isInstanceVar(IVariableBinding binding) {
return !isStatic(binding) && !isPrimitiveConstant(binding);
return binding.isField() && !isGlobalVar(binding);
}

public static boolean isAbstract(IBinding binding) {
Expand Down

0 comments on commit abe2bb2

Please sign in to comment.