Skip to content

Commit

Permalink
Merge pull request #272 from mbenson/types
Browse files Browse the repository at this point in the history
FORGE-748: org.jboss.forge.parser.java.util.Types does not handle type n...
  • Loading branch information
gastaldi committed Jan 15, 2013
2 parents 9794cf5 + b7814d4 commit a03a105
Show file tree
Hide file tree
Showing 3 changed files with 59 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,8 @@ public class Types
// [S=short,
// [Z=boolean
private static final Pattern CLASS_ARRAY_PATTERN = Pattern.compile("\\[+(B|F|C|D|I|J|S|Z|L)([0-9a-zA-Z\\.\\$]*);?");
private static final Pattern SIMPLE_ARRAY_PATTERN = Pattern.compile("([0-9a-zA-Z\\.\\$\\<\\>\\,]+)(\\[\\])+");
private static final Pattern SIMPLE_ARRAY_PATTERN = Pattern
.compile("((?:[0-9a-zA-Z\\$]+)(?:\\<[^\\.^\\[]+)?(?:\\.(?:[0-9a-zA-Z\\$]+)(?:\\<[^\\.^\\[]+)?)*)(\\[\\])+");
private static final Pattern GENERIC_PATTERN = Pattern.compile(".*<.*>$");

private static final List<String> LANG_TYPES = Arrays.asList(
Expand Down Expand Up @@ -237,9 +238,26 @@ public static boolean isGeneric(final String type)

public static String stripGenerics(final String type)
{
if (isGeneric(type))
final String componentType;
final int arrayDimensions;
if (isArray(type))
{
arrayDimensions = getArrayDimension(type);
componentType = stripArray(type);
}
else
{
return type.replaceFirst("^([^<]*)<.*>$", "$1");
arrayDimensions = 0;
componentType = type;
}
if (isGeneric(componentType))
{
final StringBuilder result = new StringBuilder(componentType.replaceFirst("^([^<]*)<.*?>$", "$1"));
for (int i = 0; i < arrayDimensions; i++)
{
result.append("[]");
}
return result.toString();
}
return type;
}
Expand All @@ -248,7 +266,7 @@ public static String getGenerics(final String type)
{
if (isGeneric(type))
{
return type.replaceFirst("^[^<]*(<.*>)$", "$1");
return type.replaceFirst("^[^<]*(<.*?>)$", "$1");
}
return "";
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -150,7 +150,19 @@ public boolean isWildcard()
public String getName()
{
String result = type.toString();
return Types.stripGenerics(result);
if (isParameterized())
{
if (isArray())
{
result = Types.stripArray(result);
}
result = Types.stripGenerics(result);
if (isArray())
{
result += "[]";
}
}
return result;
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,12 @@ public void testArray()

assertEquals("int", Types.stripArray(int[][][][][].class.getSimpleName()));
assertEquals("List<Long>", Types.stripArray("List<Long>[]"));

assertEquals("java.lang.Class<?>", Types.stripArray("java.lang.Class<?>[]"));
assertEquals("java.lang.Class<T>", Types.stripArray("java.lang.Class<T>[]"));
assertEquals("java.lang.Class<LONG_TYPE_VARIABLE_NAME>",
Types.stripArray("java.lang.Class<LONG_TYPE_VARIABLE_NAME>[]"));
assertEquals("java.lang.Class<? extends Number>", Types.stripArray("java.lang.Class<? extends Number>[]"));
assertEquals("java.lang.Class<E extends Enum<E>>", Types.stripArray("java.lang.Class<E extends Enum<E>>[]"));
}

@Test
Expand All @@ -107,4 +112,22 @@ public void testArrayDimensions()
assertEquals(3, Types.getArrayDimension(int[][][].class.getName()));

}

@Test
public void testGenerics()
{
assertEquals("byte", Types.stripGenerics("byte"));
assertEquals("byte[]", Types.stripGenerics("byte[]"));
assertEquals("java.lang.Class", Types.stripGenerics("java.lang.Class"));
assertEquals("java.lang.Class", Types.stripGenerics("java.lang.Class<?>"));
assertEquals("java.lang.Class", Types.stripGenerics("java.lang.Class<? extends Number>"));
assertEquals("java.lang.Class", Types.stripGenerics("java.lang.Class<E extends Enum<E>>"));
assertEquals("java.lang.Class[]", Types.stripGenerics("java.lang.Class[]"));
assertEquals("java.lang.Class[]", Types.stripGenerics("java.lang.Class<?>[]"));
assertEquals("java.lang.Class[]", Types.stripGenerics("java.lang.Class<T>[]"));
assertEquals("java.lang.Class[]", Types.stripGenerics("java.lang.Class<LONG_TYPE_VARIABLE_NAME>[]"));
assertEquals("java.lang.Class[]", Types.stripGenerics("java.lang.Class<? extends Number>[]"));
assertEquals("java.lang.Class[]", Types.stripGenerics("java.lang.Class<E extends Enum<E>>[]"));
}

}

0 comments on commit a03a105

Please sign in to comment.