public String[] mapTypes(String[] types) {
		String[] newTypes = null;
		boolean needMapping = false;
		for (int i = 0; i < types.length; i++) {
			String type = types[i];
			String newType = map(type);
			if (newType != null && newTypes == null) {
				newTypes = new String[types.length];
				if (i > 0) {
					System.arraycopy(types, 0, newTypes, 0, i);
				}
				needMapping = true;
			}
			if (needMapping) {
				newTypes[i] = newType == null ? type : newType;
			}
		}
		return needMapping ? newTypes : types;
	}