diff --git a/gson/src/main/java/com/google/gson/CamelCaseSeparatorNamingPolicy.java b/gson/src/main/java/com/google/gson/CamelCaseSeparatorNamingPolicy.java
deleted file mode 100644
index 947c4b2a..00000000
--- a/gson/src/main/java/com/google/gson/CamelCaseSeparatorNamingPolicy.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * Copyright (C) 2008 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.google.gson;
-
-import com.google.gson.internal.$Gson$Preconditions;
-
-import java.lang.annotation.Annotation;
-import java.lang.reflect.Type;
-import java.util.Collection;
-
-/**
- * Converts the field name that uses camel-case define word separation into separate words that
- * are separated by the provided {@code separatorString}.
- *
- *
The following is an example:
- *
- * class IntWrapper {
- * public int integerField = 0;
- * }
- *
- * CamelCaseSeparatorNamingPolicy policy = new CamelCaseSeparatorNamingPolicy("_");
- * String translatedFieldName =
- * policy.translateName(IntWrapper.class.getField("integerField"));
- *
- * assert("integer_Field".equals(translatedFieldName));
- *
- *
- * @author Joel Leitch
- */
-final class CamelCaseSeparatorNamingPolicy extends RecursiveFieldNamingPolicy {
- private final String separatorString;
-
- /**
- * Constructs a new CamelCaseSeparatorNamingPolicy object that will add the
- * {@code separatorString} between each of the words separated by camel case.
- *
- * @param separatorString the string value to place between words
- * @throws IllegalArgumentException thrown if the {@code separatorString} parameter
- * is null or empty.
- */
- public CamelCaseSeparatorNamingPolicy(String separatorString) {
- $Gson$Preconditions.checkNotNull(separatorString);
- $Gson$Preconditions.checkArgument(!"".equals(separatorString));
- this.separatorString = separatorString;
- }
-
- @Override
- protected String translateName(String target, Type fieldType,
- Collection annnotations) {
- StringBuilder translation = new StringBuilder();
- for (int i = 0; i < target.length(); i++) {
- char character = target.charAt(i);
- if (Character.isUpperCase(character) && translation.length() != 0) {
- translation.append(separatorString);
- }
- translation.append(character);
- }
-
- return translation.toString();
- }
-}
diff --git a/gson/src/main/java/com/google/gson/CompositionFieldNamingPolicy.java b/gson/src/main/java/com/google/gson/CompositionFieldNamingPolicy.java
deleted file mode 100644
index c6d252cd..00000000
--- a/gson/src/main/java/com/google/gson/CompositionFieldNamingPolicy.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright (C) 2008 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.google.gson;
-
-import java.lang.annotation.Annotation;
-import java.lang.reflect.Type;
-import java.util.Collection;
-
-/**
- * Performs numerous field naming translations wrapped up as one object.
- *
- * @author Joel Leitch
- */
-abstract class CompositionFieldNamingPolicy extends RecursiveFieldNamingPolicy {
-
- private final RecursiveFieldNamingPolicy[] fieldPolicies;
-
- public CompositionFieldNamingPolicy(RecursiveFieldNamingPolicy... fieldNamingPolicies) {
- if (fieldNamingPolicies == null) {
- throw new NullPointerException("naming policies can not be null.");
- }
- this.fieldPolicies = fieldNamingPolicies;
- }
-
- @Override
- protected String translateName(String target, Type fieldType, Collection annotations) {
- for (RecursiveFieldNamingPolicy policy : fieldPolicies) {
- target = policy.translateName(target, fieldType, annotations);
- }
- return target;
- }
-}
diff --git a/gson/src/main/java/com/google/gson/FieldNamingPolicy.java b/gson/src/main/java/com/google/gson/FieldNamingPolicy.java
index cc91a0a4..21863f9c 100644
--- a/gson/src/main/java/com/google/gson/FieldNamingPolicy.java
+++ b/gson/src/main/java/com/google/gson/FieldNamingPolicy.java
@@ -16,6 +16,8 @@
package com.google.gson;
+import java.lang.reflect.Field;
+
/**
* An enumeration that defines a few standard naming conventions for JSON field names.
* This enumeration should be used in conjunction with {@link com.google.gson.GsonBuilder}
@@ -25,7 +27,18 @@ package com.google.gson;
* @author Inderjeet Singh
* @author Joel Leitch
*/
-public enum FieldNamingPolicy {
+public enum FieldNamingPolicy implements FieldNamingStrategy {
+
+ /**
+ * Using this naming policy with Gson will ensure that the field name is
+ * unchanged.
+ */
+ IDENTITY() {
+ public String translateName(Field f) {
+ return f.getName();
+ }
+ },
+
/**
* Using this naming policy with Gson will ensure that the first "letter" of the Java
* field name is capitalized when serialized to its JSON form.
@@ -36,8 +49,11 @@ public enum FieldNamingPolicy {
* _someFieldName ---> _SomeFieldName
*
*/
- UPPER_CAMEL_CASE(new ModifyFirstLetterNamingPolicy(
- ModifyFirstLetterNamingPolicy.LetterModifier.UPPER)),
+ UPPER_CAMEL_CASE() {
+ public String translateName(Field f) {
+ return upperCaseFirstLetter(f.getName());
+ }
+ },
/**
* Using this naming policy with Gson will ensure that the first "letter" of the Java
@@ -49,11 +65,15 @@ public enum FieldNamingPolicy {
* someFieldName ---> Some Field Name
* _someFieldName ---> _Some Field Name
*
- *
+ *
* @since 1.4
*/
- UPPER_CAMEL_CASE_WITH_SPACES(new UpperCamelCaseSeparatorNamingPolicy(" ")),
-
+ UPPER_CAMEL_CASE_WITH_SPACES() {
+ public String translateName(Field f) {
+ return upperCaseFirstLetter(separateCamelCase(f.getName(), " "));
+ }
+ },
+
/**
* Using this naming policy with Gson will modify the Java Field name from its camel cased
* form to a lower case field name where each word is separated by an underscore (_).
@@ -66,8 +86,12 @@ public enum FieldNamingPolicy {
* aURL ---> a_u_r_l
*
*/
- LOWER_CASE_WITH_UNDERSCORES(new LowerCamelCaseSeparatorNamingPolicy("_")),
-
+ LOWER_CASE_WITH_UNDERSCORES() {
+ public String translateName(Field f) {
+ return separateCamelCase(f.getName(), "_").toLowerCase();
+ }
+ },
+
/**
* Using this naming policy with Gson will modify the Java Field name from its camel cased
* form to a lower case field name where each word is separated by a dash (-).
@@ -85,15 +109,60 @@ public enum FieldNamingPolicy {
* {@code myobject.my-field} will result in an unintended javascript expression.
* @since 1.4
*/
- LOWER_CASE_WITH_DASHES(new LowerCamelCaseSeparatorNamingPolicy("-"));
+ LOWER_CASE_WITH_DASHES() {
+ public String translateName(Field f) {
+ return separateCamelCase(f.getName(), "-").toLowerCase();
+ }
+ };
- private final FieldNamingStrategy2 namingPolicy;
-
- private FieldNamingPolicy(FieldNamingStrategy2 namingPolicy) {
- this.namingPolicy = namingPolicy;
+ /**
+ * Converts the field name that uses camel-case define word separation into
+ * separate words that are separated by the provided {@code separatorString}.
+ */
+ private static String separateCamelCase(String name, String separator) {
+ StringBuilder translation = new StringBuilder();
+ for (int i = 0; i < name.length(); i++) {
+ char character = name.charAt(i);
+ if (Character.isUpperCase(character) && translation.length() != 0) {
+ translation.append(separator);
+ }
+ translation.append(character);
+ }
+ return translation.toString();
}
- FieldNamingStrategy2 getFieldNamingPolicy() {
- return namingPolicy;
+ /**
+ * Ensures the JSON field names begins with an upper case letter.
+ */
+ private static String upperCaseFirstLetter(String name) {
+ StringBuilder fieldNameBuilder = new StringBuilder();
+ int index = 0;
+ char firstCharacter = name.charAt(index);
+
+ while (index < name.length() - 1) {
+ if (Character.isLetter(firstCharacter)) {
+ break;
+ }
+
+ fieldNameBuilder.append(firstCharacter);
+ firstCharacter = name.charAt(++index);
+ }
+
+ if (index == name.length()) {
+ return fieldNameBuilder.toString();
+ }
+
+ if (!Character.isUpperCase(firstCharacter)) {
+ String modifiedTarget = modifyString(Character.toUpperCase(firstCharacter), name, ++index);
+ return fieldNameBuilder.append(modifiedTarget).toString();
+ } else {
+ return name;
+ }
}
-}
+
+ private static String modifyString(char firstCharacter, String srcString, int indexOfSubstring) {
+ return (indexOfSubstring < srcString.length())
+ ? firstCharacter + srcString.substring(indexOfSubstring)
+ : String.valueOf(firstCharacter);
+ }
+}
\ No newline at end of file
diff --git a/gson/src/main/java/com/google/gson/FieldNamingStrategy2.java b/gson/src/main/java/com/google/gson/FieldNamingStrategy2.java
deleted file mode 100644
index 4b8616a5..00000000
--- a/gson/src/main/java/com/google/gson/FieldNamingStrategy2.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright (C) 2010 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.google.gson;
-
-/**
- * The new mechanism for providing custom field naming in Gson. This allows the client code
- * to translate field names into a particular convention that is not supported as a normal
- * Java field declaration rules. For example, Java does not support "-" characters in a
- * field name.
- *
- * @author Inderjeet Singh
- * @author Joel Leitch
- */
-interface FieldNamingStrategy2 {
-
- /**
- * Translates the field name into its JSON field name representation.
- *
- * @param f the field that is being translated
- * @return the translated field name.
- */
- public String translateName(FieldAttributes f);
-}
diff --git a/gson/src/main/java/com/google/gson/FieldNamingStrategy2Adapter.java b/gson/src/main/java/com/google/gson/FieldNamingStrategy2Adapter.java
deleted file mode 100644
index 4819b825..00000000
--- a/gson/src/main/java/com/google/gson/FieldNamingStrategy2Adapter.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (C) 2010 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.google.gson;
-
-import com.google.gson.internal.$Gson$Preconditions;
-
-/**
- * Adapts the old FieldNamingStrategy to the new {@link FieldNamingStrategy2}
- * type.
- *
- * @author Inderjeet Singh
- * @author Joel Leitch
- */
-final class FieldNamingStrategy2Adapter implements FieldNamingStrategy2 {
- private final FieldNamingStrategy adaptee;
-
- FieldNamingStrategy2Adapter(FieldNamingStrategy adaptee) {
- this.adaptee = $Gson$Preconditions.checkNotNull(adaptee);
- }
-
- @SuppressWarnings("deprecation")
- public String translateName(FieldAttributes f) {
- return adaptee.translateName(f.getFieldObject());
- }
-}
diff --git a/gson/src/main/java/com/google/gson/Gson.java b/gson/src/main/java/com/google/gson/Gson.java
index 528d129d..e79f13fd 100644
--- a/gson/src/main/java/com/google/gson/Gson.java
+++ b/gson/src/main/java/com/google/gson/Gson.java
@@ -16,6 +16,7 @@
package com.google.gson;
+import com.google.gson.annotations.SerializedName;
import com.google.gson.internal.ConstructorConstructor;
import com.google.gson.internal.Primitives;
import com.google.gson.internal.Streams;
@@ -112,8 +113,6 @@ public final class Gson {
new SyntheticFieldExclusionStrategy(true);
static final ModifierBasedExclusionStrategy DEFAULT_MODIFIER_BASED_EXCLUSION_STRATEGY =
new ModifierBasedExclusionStrategy(Modifier.TRANSIENT, Modifier.STATIC);
- static final FieldNamingStrategy2 DEFAULT_NAMING_POLICY =
- new SerializedNameAnnotationInterceptingNamingPolicy(new JavaFieldNamingPolicy());
private static final ExclusionStrategy DEFAULT_EXCLUSION_STRATEGY = createExclusionStrategy();
@@ -200,7 +199,7 @@ public final class Gson {
*/
@SuppressWarnings("unchecked")
public Gson() {
- this(DEFAULT_EXCLUSION_STRATEGY, DEFAULT_EXCLUSION_STRATEGY, DEFAULT_NAMING_POLICY,
+ this(DEFAULT_EXCLUSION_STRATEGY, DEFAULT_EXCLUSION_STRATEGY, FieldNamingPolicy.IDENTITY,
EMPTY_MAP, false, EMPTY_MAP, EMPTY_MAP, false, DEFAULT_JSON_NON_EXECUTABLE, true,
false, false, LongSerializationPolicy.DEFAULT,
Collections.emptyList());
@@ -208,7 +207,7 @@ public final class Gson {
Gson(final ExclusionStrategy deserializationExclusionStrategy,
final ExclusionStrategy serializationExclusionStrategy,
- final FieldNamingStrategy2 fieldNamingPolicy,
+ final FieldNamingStrategy fieldNamingPolicy,
final TypeMap> instanceCreators, boolean serializeNulls,
final TypeMap> serializers,
final TypeMap> deserializers,
@@ -226,18 +225,12 @@ public final class Gson {
this.htmlSafe = htmlSafe;
this.prettyPrinting = prettyPrinting;
- /*
- TODO: for serialization, honor:
- serializationExclusionStrategy
- fieldNamingPolicy
- serializeNulls
- serializers
- */
TypeAdapter.Factory reflectiveTypeAdapterFactory
= new ReflectiveTypeAdapterFactory(constructorConstructor) {
@Override
public String getFieldName(Class> declaringClazz, Field f, Type declaredType) {
- return fieldNamingPolicy.translateName(new FieldAttributes(declaringClazz, f));
+ SerializedName serializedName = f.getAnnotation(SerializedName.class);
+ return serializedName == null ? fieldNamingPolicy.translateName(f) : serializedName.value();
}
@Override
public boolean serializeField(Class> declaringClazz, Field f, Type declaredType) {
diff --git a/gson/src/main/java/com/google/gson/GsonBuilder.java b/gson/src/main/java/com/google/gson/GsonBuilder.java
index 3a01c312..7cd5a5ea 100644
--- a/gson/src/main/java/com/google/gson/GsonBuilder.java
+++ b/gson/src/main/java/com/google/gson/GsonBuilder.java
@@ -86,7 +86,7 @@ public final class GsonBuilder {
private boolean serializeInnerClasses;
private boolean excludeFieldsWithoutExposeAnnotation;
private LongSerializationPolicy longSerializationPolicy;
- private FieldNamingStrategy2 fieldNamingPolicy;
+ private FieldNamingStrategy fieldNamingPolicy;
private final TypeMap> instanceCreators;
private final TypeMap> serializers;
private final TypeMap> deserializers;
@@ -123,7 +123,7 @@ public final class GsonBuilder {
modifierBasedExclusionStrategy = Gson.DEFAULT_MODIFIER_BASED_EXCLUSION_STRATEGY;
excludeFieldsWithoutExposeAnnotation = false;
longSerializationPolicy = LongSerializationPolicy.DEFAULT;
- fieldNamingPolicy = Gson.DEFAULT_NAMING_POLICY;
+ fieldNamingPolicy = FieldNamingPolicy.IDENTITY;
instanceCreators = new TypeMap>();
serializers = new TypeMap>();
deserializers = new TypeMap>();
@@ -338,7 +338,8 @@ public final class GsonBuilder {
* @return a reference to this {@code GsonBuilder} object to fulfill the "Builder" pattern
*/
public GsonBuilder setFieldNamingPolicy(FieldNamingPolicy namingConvention) {
- return setFieldNamingStrategy(namingConvention.getFieldNamingPolicy());
+ this.fieldNamingPolicy = namingConvention;
+ return this;
}
/**
@@ -350,19 +351,7 @@ public final class GsonBuilder {
* @since 1.3
*/
public GsonBuilder setFieldNamingStrategy(FieldNamingStrategy fieldNamingStrategy) {
- return setFieldNamingStrategy(new FieldNamingStrategy2Adapter(fieldNamingStrategy));
- }
-
- /**
- * Configures Gson to apply a specific naming policy strategy to an object's field during
- * serialization and deserialization.
- *
- * @param fieldNamingStrategy the actual naming strategy to apply to the fields
- * @return a reference to this {@code GsonBuilder} object to fulfill the "Builder" pattern
- */
- GsonBuilder setFieldNamingStrategy(FieldNamingStrategy2 fieldNamingStrategy) {
- this.fieldNamingPolicy =
- new SerializedNameAnnotationInterceptingNamingPolicy(fieldNamingStrategy);
+ this.fieldNamingPolicy = fieldNamingStrategy;
return this;
}
diff --git a/gson/src/main/java/com/google/gson/JavaFieldNamingPolicy.java b/gson/src/main/java/com/google/gson/JavaFieldNamingPolicy.java
deleted file mode 100644
index 6805d71f..00000000
--- a/gson/src/main/java/com/google/gson/JavaFieldNamingPolicy.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (C) 2008 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.google.gson;
-
-import java.lang.annotation.Annotation;
-import java.lang.reflect.Type;
-import java.util.Collection;
-
-/**
- * A simple implementation of the {@link FieldNamingStrategy2} interface such that it does not
- * perform any string translation of the incoming field name.
- *
- * The following is an example:
- *
- *
- * class IntWrapper {
- * public int integerField = 0;
- * }
- *
- * JavaFieldNamingPolicy policy = new JavaFieldNamingPolicy();
- * String translatedFieldName =
- * policy.translateName(IntWrapper.class.getField("integerField"));
- *
- * assert("integerField".equals(translatedFieldName));
- *
- *
- * This is the default {@link FieldNamingStrategy2} used by Gson.
- *
- * @author Joel Leitch
- */
-final class JavaFieldNamingPolicy extends RecursiveFieldNamingPolicy {
-
- @Override
- protected String translateName(String target, Type fieldType, Collection annotations) {
- return target;
- }
-}
diff --git a/gson/src/main/java/com/google/gson/LowerCamelCaseSeparatorNamingPolicy.java b/gson/src/main/java/com/google/gson/LowerCamelCaseSeparatorNamingPolicy.java
deleted file mode 100644
index 05e86b73..00000000
--- a/gson/src/main/java/com/google/gson/LowerCamelCaseSeparatorNamingPolicy.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (C) 2008 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.google.gson;
-
-/**
- * A {@link FieldNamingStrategy2} that ensures the JSON field names consist of only
- * lower case letters and are separated by a particular {@code separatorString}.
- *
- *The following is an example:
- *
- * class StringWrapper {
- * public String AStringField = "abcd";
- * }
- *
- * LowerCamelCaseSeparatorNamingPolicy policy = new LowerCamelCaseSeparatorNamingPolicy("_");
- * String translatedFieldName =
- * policy.translateName(StringWrapper.class.getField("AStringField"));
- *
- * assert("a_string_field".equals(translatedFieldName));
- *
- *
- * @author Joel Leitch
- */
-final class LowerCamelCaseSeparatorNamingPolicy extends CompositionFieldNamingPolicy {
-
- public LowerCamelCaseSeparatorNamingPolicy(String separatorString) {
- super(new CamelCaseSeparatorNamingPolicy(separatorString), new LowerCaseNamingPolicy());
- }
-}
diff --git a/gson/src/main/java/com/google/gson/LowerCaseNamingPolicy.java b/gson/src/main/java/com/google/gson/LowerCaseNamingPolicy.java
deleted file mode 100644
index 10b9ec1c..00000000
--- a/gson/src/main/java/com/google/gson/LowerCaseNamingPolicy.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright (C) 2008 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.google.gson;
-
-import java.lang.annotation.Annotation;
-import java.lang.reflect.Type;
-import java.util.Collection;
-
-/**
- * A {@link FieldNamingStrategy2} that ensures the JSON field names consist of only
- * lower case letters.
- *
- * The following is an example:
- *
- * class IntWrapper {
- * public int integerField = 0;
- * }
- *
- * LowerCaseNamingPolicy policy = new LowerCaseNamingPolicy();
- * String translatedFieldName =
- * policy.translateName(IntWrapper.class.getField("integerField"));
- *
- * assert("integerfield".equals(translatedFieldName));
- *
- *
- * @author Inderjeet Singh
- * @author Joel Leitch
- */
-final class LowerCaseNamingPolicy extends RecursiveFieldNamingPolicy {
-
- @Override
- protected String translateName(String target, Type fieldType,
- Collection annotations) {
- return target.toLowerCase();
- }
-}
diff --git a/gson/src/main/java/com/google/gson/ModifyFirstLetterNamingPolicy.java b/gson/src/main/java/com/google/gson/ModifyFirstLetterNamingPolicy.java
deleted file mode 100644
index c497f4bf..00000000
--- a/gson/src/main/java/com/google/gson/ModifyFirstLetterNamingPolicy.java
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- * Copyright (C) 2008 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.google.gson;
-
-import com.google.gson.internal.$Gson$Preconditions;
-
-import java.lang.annotation.Annotation;
-import java.lang.reflect.Type;
-import java.util.Collection;
-
-/**
- * A {@link FieldNamingStrategy2} that ensures the JSON field names begins with
- * an upper case letter.
- *
- *The following is an example:
- *
- * class StringWrapper {
- * public String stringField = "abcd";
- * public String _stringField = "efg";
- * }
- *
- * ModifyFirstLetterNamingPolicy policy =
- * new ModifyFirstLetterNamingPolicy(LetterModifier.UPPER);
- * String translatedFieldName =
- * policy.translateName(StringWrapper.class.getField("stringField"));
- *
- * assert("StringField".equals(translatedFieldName));
- *
- * String translatedFieldName =
- * policy.translateName(StringWrapper.class.getField("_stringField"));
- *
- * assert("_StringField".equals(translatedFieldName));
- *
- *
- * @author Joel Leitch
- */
-final class ModifyFirstLetterNamingPolicy extends RecursiveFieldNamingPolicy {
-
- public enum LetterModifier {
- UPPER,
- LOWER
- }
-
- private final LetterModifier letterModifier;
-
- /**
- * Creates a new ModifyFirstLetterNamingPolicy that will either modify the first letter of the
- * target name to either UPPER case or LOWER case depending on the {@code modifier} parameter.
- *
- * @param modifier the type of modification that should be performed
- * @throws IllegalArgumentException if {@code modifier} is null
- */
- ModifyFirstLetterNamingPolicy(LetterModifier modifier) {
- this.letterModifier = $Gson$Preconditions.checkNotNull(modifier);
- }
-
- @Override
- protected String translateName(String target, Type fieldType,
- Collection annotations) {
- StringBuilder fieldNameBuilder = new StringBuilder();
- int index = 0;
- char firstCharacter = target.charAt(index);
-
- while (index < target.length() - 1) {
- if (Character.isLetter(firstCharacter)) {
- break;
- }
-
- fieldNameBuilder.append(firstCharacter);
- firstCharacter = target.charAt(++index);
- }
-
- if (index == target.length()) {
- return fieldNameBuilder.toString();
- }
-
- boolean capitalizeFirstLetter = (letterModifier == LetterModifier.UPPER);
- if (capitalizeFirstLetter && !Character.isUpperCase(firstCharacter)) {
- String modifiedTarget = modifyString(Character.toUpperCase(firstCharacter), target, ++index);
- return fieldNameBuilder.append(modifiedTarget).toString();
- } else if (!capitalizeFirstLetter && Character.isUpperCase(firstCharacter)) {
- String modifiedTarget = modifyString(Character.toLowerCase(firstCharacter), target, ++index);
- return fieldNameBuilder.append(modifiedTarget).toString();
- } else {
- return target;
- }
- }
-
- private String modifyString(char firstCharacter, String srcString, int indexOfSubstring) {
- return (indexOfSubstring < srcString.length())
- ? firstCharacter + srcString.substring(indexOfSubstring)
- : String.valueOf(firstCharacter);
- }
-}
diff --git a/gson/src/main/java/com/google/gson/RecursiveFieldNamingPolicy.java b/gson/src/main/java/com/google/gson/RecursiveFieldNamingPolicy.java
deleted file mode 100644
index d3a46aa7..00000000
--- a/gson/src/main/java/com/google/gson/RecursiveFieldNamingPolicy.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (C) 2008 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.google.gson;
-
-import java.lang.annotation.Annotation;
-import java.lang.reflect.Type;
-import java.util.Collection;
-
-/**
- * A mechanism for providing custom field naming in Gson. This allows the client code to translate
- * field names into a particular convention that is not supported as a normal Java field
- * declaration rules. For example, Java does not support "-" characters in a field name.
- *
- * @author Joel Leitch
- */
-abstract class RecursiveFieldNamingPolicy implements FieldNamingStrategy2 {
-
- public final String translateName(FieldAttributes f) {
- return translateName(f.getName(), f.getDeclaredType(), f.getAnnotations());
- }
-
- /**
- * Performs the specific string translation.
- *
- * @param target the string object that will be manipulation/translated
- * @param fieldType the actual type value of the field
- * @param annotations the annotations set on the field
- * @return the translated field name
- */
- protected abstract String translateName(String target, Type fieldType, Collection annotations);
-}
diff --git a/gson/src/main/java/com/google/gson/SerializedNameAnnotationInterceptingNamingPolicy.java b/gson/src/main/java/com/google/gson/SerializedNameAnnotationInterceptingNamingPolicy.java
deleted file mode 100644
index 8143a6f7..00000000
--- a/gson/src/main/java/com/google/gson/SerializedNameAnnotationInterceptingNamingPolicy.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (C) 2008 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.google.gson;
-
-import com.google.gson.annotations.SerializedName;
-
-/**
- * A {@link FieldNamingStrategy2} that acts as a chain of responsibility. If the
- * {@link com.google.gson.annotations.SerializedName} annotation is applied to a
- * field then this strategy will translate the name to the {@code
- * serializedName.value()}; otherwise it delegates to the wrapped
- * {@link FieldNamingStrategy2}.
- *
- *
- * NOTE: this class performs JSON field name validation for any of the fields
- * marked with an {@code @SerializedName} annotation.
- *
- *
- * @see SerializedName
- *
- * @author Joel Leitch
- */
-final class SerializedNameAnnotationInterceptingNamingPolicy implements FieldNamingStrategy2 {
- private final FieldNamingStrategy2 delegate;
-
- SerializedNameAnnotationInterceptingNamingPolicy(FieldNamingStrategy2 delegate) {
- this.delegate = delegate;
- }
-
- public String translateName(FieldAttributes f) {
- SerializedName serializedName = f.getAnnotation(SerializedName.class);
- return serializedName == null ? delegate.translateName(f) : serializedName.value();
- }
-}
diff --git a/gson/src/main/java/com/google/gson/UpperCamelCaseSeparatorNamingPolicy.java b/gson/src/main/java/com/google/gson/UpperCamelCaseSeparatorNamingPolicy.java
deleted file mode 100644
index e2a944f2..00000000
--- a/gson/src/main/java/com/google/gson/UpperCamelCaseSeparatorNamingPolicy.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (C) 2008 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.google.gson;
-
-/**
- * A {@link FieldNamingStrategy2} that ensures the JSON field names consist of mixed
- * case letters starting with a capital and are separated by a particular
- * {@code separatorString}.
- *
- *The following is an example:
- *
- * class StringWrapper {
- * public String AStringField = "abcd";
- * }
- *
- * UpperCamelCaseSeparatorNamingPolicy policy = new UpperCamelCaseSeparatorNamingPolicy("_");
- * String translatedFieldName =
- * policy.translateName(StringWrapper.class.getField("AStringField"));
- *
- * assert("A_String_Field".equals(translatedFieldName));
- *
- *
- * @author Joel Leitch
- */
-final class UpperCamelCaseSeparatorNamingPolicy extends CompositionFieldNamingPolicy {
- public UpperCamelCaseSeparatorNamingPolicy(String separatorString) {
- super(new CamelCaseSeparatorNamingPolicy(separatorString),
- new ModifyFirstLetterNamingPolicy(ModifyFirstLetterNamingPolicy.LetterModifier.UPPER));
- }
-}
diff --git a/gson/src/main/java/com/google/gson/UpperCaseNamingPolicy.java b/gson/src/main/java/com/google/gson/UpperCaseNamingPolicy.java
deleted file mode 100644
index 756fdb3c..00000000
--- a/gson/src/main/java/com/google/gson/UpperCaseNamingPolicy.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (C) 2008 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.google.gson;
-
-import java.lang.annotation.Annotation;
-import java.lang.reflect.Type;
-import java.util.Collection;
-
-/**
- * A {@link FieldNamingStrategy2} that ensures the JSON field names consist of only
- * upper case letters.
- *
- * The following is an example:
- *
- * class IntWrapper {
- * public int integerField = 0;
- * }
- *
- * UpperCaseNamingPolicy policy = new UpperCaseNamingPolicy();
- * String translatedFieldName =
- * policy.translateName(IntWrapper.class.getField("integerField"));
- *
- * assert("INTEGERFIELD".equals(translatedFieldName));
- *
- *
- * @author Joel Leitch
- */
-final class UpperCaseNamingPolicy extends RecursiveFieldNamingPolicy {
-
- @Override
- protected String translateName(String target, Type fieldType, Collection annotations) {
- return target.toUpperCase();
- }
-}
diff --git a/gson/src/test/java/com/google/gson/CamelCaseSeparatorNamingPolicyTest.java b/gson/src/test/java/com/google/gson/CamelCaseSeparatorNamingPolicyTest.java
deleted file mode 100644
index 0e94517f..00000000
--- a/gson/src/test/java/com/google/gson/CamelCaseSeparatorNamingPolicyTest.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Copyright (C) 2008 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.google.gson;
-
-import junit.framework.TestCase;
-
-/**
- * Tests for the {@link CamelCaseSeparatorNamingPolicy} class.
- *
- * @author Joel Leitch
- */
-public class CamelCaseSeparatorNamingPolicyTest extends TestCase {
-
- private static final Class CLASS = String.class;
- private static final String UNDERSCORE = "_";
- private static final String MULTI_CHAR_SEPARATOR = "_$_";
-
- public void testInvalidInstantiation() throws Exception {
- try {
- new CamelCaseSeparatorNamingPolicy(null);
- fail("Null separator string is not supported");
- } catch (NullPointerException expected) { }
-
- try {
- new CamelCaseSeparatorNamingPolicy("");
- fail("Empty separator string is not supported");
- } catch (IllegalArgumentException expected) { }
- }
-
- public void testUnderscoreSeparator() throws Exception {
- CamelCaseSeparatorNamingPolicy namingPolicy =
- new CamelCaseSeparatorNamingPolicy(UNDERSCORE);
- String translatedName = namingPolicy.translateName("testUnderscoreBetweenWords", CLASS, null);
- assertEquals("test_Underscore_Between_Words", translatedName);
- }
-
- public void testMultiCharSeparator() throws Exception {
- CamelCaseSeparatorNamingPolicy namingPolicy =
- new CamelCaseSeparatorNamingPolicy(MULTI_CHAR_SEPARATOR);
- String translatedName = namingPolicy.translateName("testMultCharBetweenWords", CLASS, null);
- assertEquals("test_$_Mult_$_Char_$_Between_$_Words", translatedName);
- }
-
- public void testNameBeginsWithCapital() throws Exception {
- CamelCaseSeparatorNamingPolicy namingPolicy = new CamelCaseSeparatorNamingPolicy(UNDERSCORE);
- String translatedName = namingPolicy.translateName("TestNameBeginsWithCapital", CLASS, null);
- assertEquals("Test_Name_Begins_With_Capital", translatedName);
- }
-
- public void testExceptionPossiblyIncorrectSeparation() throws Exception {
- CamelCaseSeparatorNamingPolicy namingPolicy = new CamelCaseSeparatorNamingPolicy(UNDERSCORE);
- String translatedName = namingPolicy.translateName("aURL", CLASS, null);
- assertEquals("a_U_R_L", translatedName);
- }
-}
diff --git a/gson/src/test/java/com/google/gson/FieldNamingStrategy2AdapterTest.java b/gson/src/test/java/com/google/gson/FieldNamingStrategy2AdapterTest.java
deleted file mode 100644
index f215a298..00000000
--- a/gson/src/test/java/com/google/gson/FieldNamingStrategy2AdapterTest.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (C) 2010 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.google.gson;
-
-import java.lang.reflect.Field;
-
-import junit.framework.TestCase;
-
-/**
- * Unit test for the {@link FieldNamingStrategy2Adapter} class.
- *
- * @author Inderjeet Singh
- * @author Joel Leitch
- */
-public class FieldNamingStrategy2AdapterTest extends TestCase {
-
- public void testSimpleAdapter() throws Exception {
- Field field = String.class.getFields()[0];
- String expectedFieldName = field.getName().toUpperCase();
- FieldNamingStrategy2 adapter =
- new FieldNamingStrategy2Adapter(new UpperCaseNamingStrategy());
- assertEquals(expectedFieldName, adapter.translateName(
- new FieldAttributes(String.class, field)));
- }
-
- private static class UpperCaseNamingStrategy implements FieldNamingStrategy {
- public String translateName(Field f) {
- return f.getName().toUpperCase();
- }
- }
-}
diff --git a/gson/src/test/java/com/google/gson/FunctionWithInternalDependenciesTest.java b/gson/src/test/java/com/google/gson/FunctionWithInternalDependenciesTest.java
index 2a0c222a..1655311c 100644
--- a/gson/src/test/java/com/google/gson/FunctionWithInternalDependenciesTest.java
+++ b/gson/src/test/java/com/google/gson/FunctionWithInternalDependenciesTest.java
@@ -38,7 +38,7 @@ public class FunctionWithInternalDependenciesTest extends TestCase {
strategies.add(new SyntheticFieldExclusionStrategy(true));
strategies.add(new ModifierBasedExclusionStrategy(Modifier.TRANSIENT, Modifier.STATIC));
ExclusionStrategy exclusionStrategy = new DisjunctionExclusionStrategy(strategies);
- Gson gson = new Gson(exclusionStrategy, exclusionStrategy, Gson.DEFAULT_NAMING_POLICY,
+ Gson gson = new Gson(exclusionStrategy, exclusionStrategy, FieldNamingPolicy.IDENTITY,
Gson.EMPTY_MAP, false, Gson.EMPTY_MAP, Gson.EMPTY_MAP, false,
Gson.DEFAULT_JSON_NON_EXECUTABLE,
true, false, false, LongSerializationPolicy.DEFAULT,
diff --git a/gson/src/test/java/com/google/gson/JavaFieldNamingPolicyTest.java b/gson/src/test/java/com/google/gson/JavaFieldNamingPolicyTest.java
deleted file mode 100644
index db19ed0e..00000000
--- a/gson/src/test/java/com/google/gson/JavaFieldNamingPolicyTest.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (C) 2008 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.google.gson;
-
-import junit.framework.TestCase;
-
-/**
- * Tests for the {@link JavaFieldNamingPolicy} class.
- *
- * @author Joel Leitch
- */
-public class JavaFieldNamingPolicyTest extends TestCase {
-
- private JavaFieldNamingPolicy namingPolicy;
-
- @Override
- protected void setUp() throws Exception {
- super.setUp();
- namingPolicy = new JavaFieldNamingPolicy();
- }
-
- public void testFieldNamingPolicy() throws Exception {
- FieldAttributes f = new FieldAttributes(String.class, String.class.getFields()[0]);
- assertEquals(f.getName(), namingPolicy.translateName(f));
- }
-
- public void testNullField() throws Exception {
- try {
- namingPolicy.translateName((FieldAttributes) null);
- fail("Should have thrown an exception");
- } catch (NullPointerException expected) { }
- }
-}
diff --git a/gson/src/test/java/com/google/gson/LowerCamelCaseSeparatorNamingPolicyTest.java b/gson/src/test/java/com/google/gson/LowerCamelCaseSeparatorNamingPolicyTest.java
deleted file mode 100644
index 7401cf44..00000000
--- a/gson/src/test/java/com/google/gson/LowerCamelCaseSeparatorNamingPolicyTest.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Copyright (C) 2008 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.google.gson;
-
-import junit.framework.TestCase;
-
-/**
- * Tests for the {@link LowerCamelCaseSeparatorNamingPolicy} class.
- *
- * @author Joel Leitch
- */
-public class LowerCamelCaseSeparatorNamingPolicyTest extends TestCase {
-
- private static final Class CLASS = String.class;
- private static final String UNDERSCORE = "_";
-
- private LowerCamelCaseSeparatorNamingPolicy namingPolicy;
-
- @Override
- protected void setUp() throws Exception {
- super.setUp();
- namingPolicy = new LowerCamelCaseSeparatorNamingPolicy(UNDERSCORE);
- }
-
- public void testNameBeginsWithLowerCase() throws Exception {
- String translatedName = namingPolicy.translateName("testNameBeginsWithLower", CLASS, null);
- assertEquals("test_name_begins_with_lower", translatedName);
- }
-
- public void testNameBeginsWithUpperCase() throws Exception {
- String translatedName = namingPolicy.translateName("TestNameBeginsWithUpper", CLASS, null);
- assertEquals("test_name_begins_with_upper", translatedName);
- }
-
- public void testExceptionPossiblyIncorrectSeparation() throws Exception {
- String translatedName = namingPolicy.translateName("aURL", CLASS, null);
- assertEquals("a_u_r_l", translatedName);
- }
-
- public void testUsingDashesInstead() throws Exception {
- namingPolicy = new LowerCamelCaseSeparatorNamingPolicy("-");
- String translatedName = namingPolicy.translateName("testUsingDashesInstead", CLASS, null);
- assertEquals("test-using-dashes-instead", translatedName);
- }
-}
diff --git a/gson/src/test/java/com/google/gson/LowerCaseNamingPolicyTest.java b/gson/src/test/java/com/google/gson/LowerCaseNamingPolicyTest.java
deleted file mode 100644
index 56d2c2b3..00000000
--- a/gson/src/test/java/com/google/gson/LowerCaseNamingPolicyTest.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright (C) 2008 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.google.gson;
-
-import com.google.gson.LowerCaseNamingPolicy;
-
-import junit.framework.TestCase;
-
-/**
- * Tests for the {@link LowerCaseNamingPolicy} class.
- *
- * @author Joel Leitch
- */
-public class LowerCaseNamingPolicyTest extends TestCase {
- private static final String ALL_LOWER = "abcdefg";
- private static final String ALL_UPPER = "ABCDEFG";
- private static final String MIXED = "aBcdeFg";
-
- private LowerCaseNamingPolicy namingPolicy;
-
- @Override
- protected void setUp() throws Exception {
- super.setUp();
- namingPolicy = new LowerCaseNamingPolicy();
- }
-
- public void testAllLowerCase() throws Exception {
- assertEquals(ALL_LOWER, namingPolicy.translateName(ALL_LOWER, String.class, null));
- }
-
- public void testAllUpperCase() throws Exception {
- assertEquals(ALL_LOWER, namingPolicy.translateName(ALL_UPPER, String.class, null));
- }
-
- public void testMixedCase() throws Exception {
- assertEquals(ALL_LOWER, namingPolicy.translateName(MIXED, String.class, null));
- }
-}
diff --git a/gson/src/test/java/com/google/gson/ModifyFirstLetterNamingPolicyTest.java b/gson/src/test/java/com/google/gson/ModifyFirstLetterNamingPolicyTest.java
deleted file mode 100644
index 9e0f7869..00000000
--- a/gson/src/test/java/com/google/gson/ModifyFirstLetterNamingPolicyTest.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * Copyright (C) 2008 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.google.gson;
-
-import junit.framework.TestCase;
-
-/**
- * Unit test for the {@link com.google.gson.ModifyFirstLetterNamingPolicy} class.
- *
- * @author Joel Leitch
- */
-public class ModifyFirstLetterNamingPolicyTest extends TestCase {
-
- public void testInvalidConstruction() throws Exception {
- try {
- new ModifyFirstLetterNamingPolicy(null);
- fail("Null values are not allowed as a constructor parameters");
- } catch (NullPointerException expected) { }
- }
-
- public void testLowerCaseFirstLetter() throws Exception {
- ModifyFirstLetterNamingPolicy policy =
- new ModifyFirstLetterNamingPolicy(ModifyFirstLetterNamingPolicy.LetterModifier.LOWER);
- assertEquals("blah", policy.translateName("Blah", String.class, null));
- assertEquals("blah", policy.translateName("blah", String.class, null));
- }
-
- public void testUpperCaseFirstLetter() throws Exception {
- ModifyFirstLetterNamingPolicy policy =
- new ModifyFirstLetterNamingPolicy(ModifyFirstLetterNamingPolicy.LetterModifier.UPPER);
- assertEquals("Blah", policy.translateName("blah", String.class, null));
- assertEquals("Blah", policy.translateName("Blah", String.class, null));
- }
-
- public void testSingleCharacterField() throws Exception {
- ModifyFirstLetterNamingPolicy policy =
- new ModifyFirstLetterNamingPolicy(ModifyFirstLetterNamingPolicy.LetterModifier.UPPER);
- assertEquals("B", policy.translateName("b", String.class, null));
- assertEquals("B", policy.translateName("B", String.class, null));
- }
-
- public void testFieldStartsWithUnderscore() throws Exception {
- ModifyFirstLetterNamingPolicy policy =
- new ModifyFirstLetterNamingPolicy(ModifyFirstLetterNamingPolicy.LetterModifier.UPPER);
- assertEquals("_Blah", policy.translateName("_blah", String.class, null));
- assertEquals("_Blah", policy.translateName("_Blah", String.class, null));
- }
-
- public void testFieldStartsWithUnderscoreFollowedBySingleLetter() throws Exception {
- ModifyFirstLetterNamingPolicy policy =
- new ModifyFirstLetterNamingPolicy(ModifyFirstLetterNamingPolicy.LetterModifier.UPPER);
- assertEquals("_B", policy.translateName("_b", String.class, null));
- assertEquals("_B", policy.translateName("_B", String.class, null));
- }
-
- public void testFieldHasSingleNonLetter() throws Exception {
- ModifyFirstLetterNamingPolicy policy =
- new ModifyFirstLetterNamingPolicy(ModifyFirstLetterNamingPolicy.LetterModifier.LOWER);
- assertEquals("_", policy.translateName("_", String.class, null));
-
- policy = new ModifyFirstLetterNamingPolicy(ModifyFirstLetterNamingPolicy.LetterModifier.UPPER);
- assertEquals("_", policy.translateName("_", String.class, null));
- }
-
- public void testFieldHasNoLetters() throws Exception {
- ModifyFirstLetterNamingPolicy policy =
- new ModifyFirstLetterNamingPolicy(ModifyFirstLetterNamingPolicy.LetterModifier.LOWER);
- assertEquals("$_$", policy.translateName("$_$", String.class, null));
-
- policy = new ModifyFirstLetterNamingPolicy(ModifyFirstLetterNamingPolicy.LetterModifier.UPPER);
- assertEquals("$_$", policy.translateName("$_$", String.class, null));
- }
-}
diff --git a/gson/src/test/java/com/google/gson/SerializedNameAnnotationInterceptingNamingPolicyTest.java b/gson/src/test/java/com/google/gson/SerializedNameAnnotationInterceptingNamingPolicyTest.java
deleted file mode 100644
index 57711028..00000000
--- a/gson/src/test/java/com/google/gson/SerializedNameAnnotationInterceptingNamingPolicyTest.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright (C) 2008 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.google.gson;
-
-import junit.framework.TestCase;
-
-import com.google.gson.annotations.SerializedName;
-
-/**
- * Unit tests for the {@link SerializedNameAnnotationInterceptingNamingPolicy} class.
- *
- * @author Joel Leitch
- */
-public class SerializedNameAnnotationInterceptingNamingPolicyTest extends TestCase {
- private static final String ANNOTATED_FIELD_NAME = "annotatedFieldName";
-
- private SerializedNameAnnotationInterceptingNamingPolicy policy;
-
- @Override
- protected void setUp() throws Exception {
- super.setUp();
- policy = new SerializedNameAnnotationInterceptingNamingPolicy(new JavaFieldNamingPolicy());
- }
-
- public void testFieldWithAnnotation() throws Exception {
- String fieldName = "fieldWithAnnotation";
- FieldAttributes f = new FieldAttributes(
- SomeObject.class, SomeObject.class.getField(fieldName));
-
- assertFalse(ANNOTATED_FIELD_NAME.equals(fieldName));
- assertEquals(ANNOTATED_FIELD_NAME, policy.translateName(f));
- }
-
- public void testFieldWithoutAnnotation() throws Exception {
- String fieldName = "fieldWithoutAnnotation";
- FieldAttributes f = new FieldAttributes(
- SomeObject.class, SomeObject.class.getField(fieldName));
-
- assertEquals(fieldName, policy.translateName(f));
- }
-
- @SuppressWarnings("unused")
- private static class SomeObject {
- @SerializedName(ANNOTATED_FIELD_NAME) public final int fieldWithAnnotation = 1;
- public final int fieldWithoutAnnotation = 1;
- }
-}
diff --git a/gson/src/test/java/com/google/gson/UpperCamelCaseSeparatorNamingPolicyTest.java b/gson/src/test/java/com/google/gson/UpperCamelCaseSeparatorNamingPolicyTest.java
deleted file mode 100644
index 6f00d3b7..00000000
--- a/gson/src/test/java/com/google/gson/UpperCamelCaseSeparatorNamingPolicyTest.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright (C) 2010 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.google.gson;
-
-import junit.framework.TestCase;
-
-/**
- * Tests for the {@link UpperCamelCaseSeparatorNamingPolicy} class.
- *
- * @author Joel Leitch
- */
-public class UpperCamelCaseSeparatorNamingPolicyTest extends TestCase {
-
- private UpperCamelCaseSeparatorNamingPolicy namingPolicy;
-
- @Override
- protected void setUp() throws Exception {
- super.setUp();
- namingPolicy = new UpperCamelCaseSeparatorNamingPolicy(" ");
- }
-
- public void testAllLowerCase() throws Exception {
- assertEquals("Some Field Name",
- namingPolicy.translateName("someFieldName", String.class, null));
- }
-
- public void testAllUpperCase() throws Exception {
- assertEquals("U R L",
- namingPolicy.translateName("URL", String.class, null));
- }
-
- public void testAllUpperCaseExceptFirst() throws Exception {
- assertEquals("U R L",
- namingPolicy.translateName("uRL", String.class, null));
- }
-
- public void testAllUpperCaseStartingWithUnderscore() throws Exception {
- assertEquals("_U R L",
- namingPolicy.translateName("_uRL", String.class, null));
- }
-
- public void testMixedCase() throws Exception {
- assertEquals("_Some Field Name",
- namingPolicy.translateName("_someFieldName", String.class, null));
- }
-}
diff --git a/gson/src/test/java/com/google/gson/UpperCaseNamingPolicyTest.java b/gson/src/test/java/com/google/gson/UpperCaseNamingPolicyTest.java
deleted file mode 100644
index 2aabfd3d..00000000
--- a/gson/src/test/java/com/google/gson/UpperCaseNamingPolicyTest.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Copyright (C) 2008 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.google.gson;
-
-import com.google.gson.LowerCaseNamingPolicy;
-import com.google.gson.UpperCaseNamingPolicy;
-
-import junit.framework.TestCase;
-
-/**
- * Tests for the {@link LowerCaseNamingPolicy} class.
- *
- * @author Joel Leitch
- */
-public class UpperCaseNamingPolicyTest extends TestCase {
- private static final String ALL_LOWER = "abcdefg";
- private static final String ALL_UPPER = "ABCDEFG";
- private static final String MIXED = "aBcdeFg";
-
- private UpperCaseNamingPolicy namingPolicy;
-
- @Override
- protected void setUp() throws Exception {
- super.setUp();
- namingPolicy = new UpperCaseNamingPolicy();
- }
-
- public void testAllLowerCase() throws Exception {
- assertEquals(ALL_UPPER, namingPolicy.translateName(ALL_LOWER, String.class, null));
- }
-
- public void testAllUpperCase() throws Exception {
- assertEquals(ALL_UPPER, namingPolicy.translateName(ALL_UPPER, String.class, null));
- }
-
- public void testMixedCase() throws Exception {
- assertEquals(ALL_UPPER, namingPolicy.translateName(MIXED, String.class, null));
- }
-}
diff --git a/gson/src/test/java/com/google/gson/functional/FieldNamingTest.java b/gson/src/test/java/com/google/gson/functional/FieldNamingTest.java
new file mode 100644
index 00000000..54db150c
--- /dev/null
+++ b/gson/src/test/java/com/google/gson/functional/FieldNamingTest.java
@@ -0,0 +1,80 @@
+/*
+ * Copyright (C) 2011 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.gson.functional;
+
+import static com.google.gson.FieldNamingPolicy.IDENTITY;
+import static com.google.gson.FieldNamingPolicy.LOWER_CASE_WITH_DASHES;
+import static com.google.gson.FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES;
+import static com.google.gson.FieldNamingPolicy.UPPER_CAMEL_CASE;
+import static com.google.gson.FieldNamingPolicy.UPPER_CAMEL_CASE_WITH_SPACES;
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+import com.google.gson.annotations.SerializedName;
+import junit.framework.TestCase;
+
+public final class FieldNamingTest extends TestCase {
+ public void testIdentity() {
+ Gson gson = new GsonBuilder().setFieldNamingPolicy(IDENTITY).create();
+ assertEquals("{'lowerCamel':1,'UpperCamel':2,'_lowerCamelLeadingUnderscore':3," +
+ "'_UpperCamelLeadingUnderscore':4,'lower_words':5,'UPPER_WORDS':6," +
+ "'annotatedName':7}",
+ gson.toJson(new TestNames()).replace('\"', '\''));
+ }
+
+ public void testUpperCamelCase() {
+ Gson gson = new GsonBuilder().setFieldNamingPolicy(UPPER_CAMEL_CASE).create();
+ assertEquals("{'LowerCamel':1,'UpperCamel':2,'_LowerCamelLeadingUnderscore':3," +
+ "'_UpperCamelLeadingUnderscore':4,'Lower_words':5,'UPPER_WORDS':6," +
+ "'annotatedName':7}",
+ gson.toJson(new TestNames()).replace('\"', '\''));
+ }
+
+ public void testUpperCamelCaseWithSpaces() {
+ Gson gson = new GsonBuilder().setFieldNamingPolicy(UPPER_CAMEL_CASE_WITH_SPACES).create();
+ assertEquals("{'Lower Camel':1,'Upper Camel':2,'_Lower Camel Leading Underscore':3," +
+ "'_ Upper Camel Leading Underscore':4,'Lower_words':5,'U P P E R_ W O R D S':6," +
+ "'annotatedName':7}",
+ gson.toJson(new TestNames()).replace('\"', '\''));
+ }
+
+ public void testLowerCaseWithUnderscores() {
+ Gson gson = new GsonBuilder().setFieldNamingPolicy(LOWER_CASE_WITH_UNDERSCORES).create();
+ assertEquals("{'lower_camel':1,'upper_camel':2,'_lower_camel_leading_underscore':3," +
+ "'__upper_camel_leading_underscore':4,'lower_words':5,'u_p_p_e_r__w_o_r_d_s':6," +
+ "'annotatedName':7}",
+ gson.toJson(new TestNames()).replace('\"', '\''));
+ }
+
+ public void testLowerCaseWithDashes() {
+ Gson gson = new GsonBuilder().setFieldNamingPolicy(LOWER_CASE_WITH_DASHES).create();
+ assertEquals("{'lower-camel':1,'upper-camel':2,'_lower-camel-leading-underscore':3," +
+ "'_-upper-camel-leading-underscore':4,'lower_words':5,'u-p-p-e-r_-w-o-r-d-s':6," +
+ "'annotatedName':7}",
+ gson.toJson(new TestNames()).replace('\"', '\''));
+ }
+
+ @SuppressWarnings("unused") // fields are used reflectively
+ private static class TestNames {
+ int lowerCamel = 1;
+ int UpperCamel = 2;
+ int _lowerCamelLeadingUnderscore = 3;
+ int _UpperCamelLeadingUnderscore = 4;
+ int lower_words = 5;
+ int UPPER_WORDS = 6;
+ @SerializedName("annotatedName") int annotated = 7;
+ }
+}