private void detectFields() {
		try {
			ProtobufDecoder protobufDecoder = new ProtobufDecoder(
					transMeta.environmentSubstitute(wClasspath.getText().trim()
							.split(File.pathSeparator)), wRootClass.getText(),
					null);
			try {
				Map<String, Class<?>> fields = protobufDecoder.guessFields();
				RowMeta rowMeta = new RowMeta();
				for (Entry<String, Class<?>> e : fields.entrySet()) {
					String fieldPath = e.getKey();
					int i = fieldPath.lastIndexOf('.');
					String fieldName = i != -1 ? fieldPath.substring(i + 1)
							: fieldPath;
					rowMeta.addValueMeta(new FieldMeta(fieldName, fieldPath,
							KettleTypesConverter.javaToKettleType(e.getValue())));
				}
				BaseStepDialog.getFieldsFromPrevious(rowMeta, wFields, 1,
						new int[] { 1 }, new int[] { 3 }, -1, -1,
						new TableItemInsertListener() {
							public boolean tableItemInserted(
									TableItem tableItem, ValueMetaInterface v) {
								tableItem.setText(2, ((FieldMeta) v).path);
								return true;
							}
						});
			} finally {
				protobufDecoder.dispose();
			}
		} catch (ProtobufDecoderException e) {
			new ErrorDialog(
					shell,
					BaseMessages.getString("System.Dialog.Error.Title"),
					Messages.getString("ProtobufDecodeDialog.ErrorDialog.ErrorDetectingFields"),
					e);
		}
	}