package me.august.lumen.compile.resolve.impl;
import me.august.lumen.common.BytecodeUtil;
import me.august.lumen.compile.parser.ast.ImportNode;
import me.august.lumen.compile.resolve.TypeResolver;
import me.august.lumen.compile.resolve.type.UnresolvedType;
import org.objectweb.asm.Type;
public class NameResolver implements TypeResolver {
private ImportNode[] imports;
public NameResolver(ImportNode... imports) {
this.imports = imports;
}
@Override
public Type resolveType(UnresolvedType unresolved) {
// if unresolved type is a primitive or primitive
// array, no resolution is needed
if (unresolved.baseIsPrimitive())
return unresolved.toType();
String baseName = unresolved.getBaseName();
String fullName = null;
for (ImportNode impt : imports) {
if (impt.hasClass(baseName)) {
fullName = impt.getFull(baseName);
}
}
if (fullName == null) {
try {
fullName = Class.forName("java.lang." + baseName).getName();
} catch (ClassNotFoundException ignored) {}
}
if (fullName == null) {
return null;
} else {
return BytecodeUtil.fromSimpleName(fullName, unresolved.getArrayDimensions());
}
}
}