@SuppressWarnings({ "rawtypes", "unchecked" })
	private List<Parameter<?>> getElementParameters() {
		PropertyDescriptor[] descriptors = PropertyUtils.getPropertyDescriptors(primitive);
		ArrayList<Parameter<?>> result = new ArrayList<Parameter<?>>();
		
		for(PropertyDescriptor descriptor : descriptors) {
			if(LanguageElement.class.isAssignableFrom(descriptor.getPropertyType())) {
				try {
					Parameter parameter = new Parameter(descriptor.getPropertyType());
					parameter.setName(descriptor.getName());
					parameter.setValue((LanguageElement)descriptor.getReadMethod().invoke(primitive));
					result.add(parameter);
				} catch(InvocationTargetException ex) {
					throw new RuntimeException("Error reflecting on parameter: " + descriptor.getName(),ex);
				} catch (IllegalArgumentException ex) {
					throw new RuntimeException("Error reflecting on parameter: " + descriptor.getName(),ex);
				} catch (IllegalAccessException ex) {
					throw new RuntimeException("Error reflecting on parameter: " + descriptor.getName(),ex);
				}
			}
		}
		
		return result;
	}