@Override public PropertyPath.PropertyReference<TypeDescriptor<TypeMetadata>> normalizeUnqualifiedRoot(Tree aliasTree) { String alias = aliasTree.getText(); if (aliasToEntityType.containsKey(alias)) { return normalizeQualifiedRoot(aliasTree); } PropertyPath<TypeDescriptor<TypeMetadata>> propertyPath = aliasToPropertyPath.get(alias); if (propertyPath == null) { throw log.getUnknownAliasException(alias); } List<String> resolvedAlias = resolveAlias(propertyPath); TypeDescriptor<TypeMetadata> sourceType = propertyPath.getFirst().getTypeDescriptor(); EmbeddedEntityTypeDescriptor<TypeMetadata> type = new EmbeddedEntityTypeDescriptor<>(sourceType.getTypeName(), sourceType.getTypeMetadata(), resolvedAlias); return new PropertyPath.PropertyReference<>(alias, type, true); }
private PropertyPath.PropertyReference<TypeDescriptor<TypeMetadata>> normalizeProperty(TypeDescriptor<TypeMetadata> type, List<String> path, String propertyName) { String[] propertyPath = type.makePath(propertyName); if (!propertyHelper.hasProperty(type.getTypeMetadata(), propertyPath)) { throw log.getNoSuchPropertyException(type.getTypeName(), propertyName); } TypeDescriptor<TypeMetadata> propType = null; if (propertyHelper.hasEmbeddedProperty(type.getTypeMetadata(), propertyPath)) { List<String> newPath = new LinkedList<>(path); newPath.add(propertyName); propType = new EmbeddedEntityTypeDescriptor<>(type.getTypeName(), type.getTypeMetadata(), newPath); } return new PropertyPath.PropertyReference<>(propertyName, propType, false); }
@Override public PropertyPath.PropertyReference<TypeDescriptor<TypeMetadata>> normalizePropertyPathIntermediary(PropertyPath<TypeDescriptor<TypeMetadata>> path, Tree propertyNameTree) { String propertyName = propertyNameTree.getText(); TypeDescriptor<TypeMetadata> sourceType = path.getLast().getTypeDescriptor(); if (!propertyHelper.hasProperty(sourceType.getTypeMetadata(), sourceType.makePath(propertyName))) { throw log.getNoSuchPropertyException(sourceType.getTypeName(), propertyName); } List<String> newPath = resolveAlias(path); newPath.add(propertyName); EmbeddedEntityTypeDescriptor<TypeMetadata> type = new EmbeddedEntityTypeDescriptor<>(sourceType.getTypeName(), sourceType.getTypeMetadata(), newPath); return new PropertyPath.PropertyReference<>(propertyName, type, false); }