Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package il.ac.technion.cs.fling.internal.grammar.types;

import static il.ac.technion.cs.fling.namers.NaiveNamer.lowerCamelCase;
import static il.ac.technion.cs.fling.namers.NaiveNamer.unreservedName;
import static java.util.Objects.requireNonNull;
import il.ac.technion.cs.fling.namers.NaiveNamer;
// TODO allow primitive types.
public class ClassParameter implements StringTypeParameter {
public final Class<?> parameterClass;
Expand All @@ -11,7 +13,9 @@ public ClassParameter(final Class<?> parameterClass) {
return parameterClass.getCanonicalName();
}
@Override public String baseParameterName() {
return unPrimitiveTypeSimple(NaiveNamer.lowerCamelCase(parameterClass.getSimpleName()));
if (parameterClass.isPrimitive())
return parameterClass.getSimpleName().substring(0, 1);
return unreservedName(lowerCamelCase(parameterClass.getSimpleName()));
}
@Override public int hashCode() {
return parameterClass.hashCode();
Expand Down Expand Up @@ -39,16 +43,4 @@ public static String unPrimitiveType(final String typeName) {
void.class.getName().equals(typeName) ? Void.class.getCanonicalName() : //
typeName;
}
public static String unPrimitiveTypeSimple(final String typeName) {
return byte.class.getName().equals(typeName) ? "b" : //
short.class.getName().equals(typeName) ? "s" : //
int.class.getName().equals(typeName) ? "i" : //
long.class.getName().equals(typeName) ? "l" : //
float.class.getName().equals(typeName) ? "f" : //
double.class.getName().equals(typeName) ? "d" : //
boolean.class.getName().equals(typeName) ? "b" : //
char.class.getName().equals(typeName) ? "c" : //
void.class.getName().equals(typeName) ? "v" : //
typeName;
}
}
8 changes: 8 additions & 0 deletions src/main/java/il/ac/technion/cs/fling/namers/NaiveNamer.java
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,9 @@
import il.ac.technion.cs.fling.internal.grammar.rules.Component;
import il.ac.technion.cs.fling.internal.grammar.rules.Constants;
import il.ac.technion.cs.fling.internal.grammar.rules.Variable;

import javax.lang.model.SourceVersion;

public class NaiveNamer implements Namer {
private final Map<Variable, Integer> astChildrenCounter = new HashMap<>();
private final Map<Component, Integer> notationsChildrenCounter = new HashMap<>();
Expand Down Expand Up @@ -168,6 +171,11 @@ public static String getNameFromBase(final String baseName, final Map<String, In
final int position = usedNames.put(baseName, usedNames.get(baseName) + 1);
return baseName + position;
}
public static String unreservedName(final String name) {
if (!SourceVersion.isKeyword(name))
return name;
return unreservedName(name + "_");
}
@Override public String headVariableClassName(final Variable variable) {
return variable.name();
}
Expand Down