1. Java / Говнокод #6320

    +74

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    72. 72
    73. 73
    74. 74
    75. 75
    76. 76
    77. 77
    78. 78
    79. 79
    80. 80
    81. 81
    82. 82
    83. 83
    public class BeanWrapperImpl extends AbstractPropertyAccessor implements BeanWrapper {
             @SuppressWarnings("unchecked")
             private void setPropertyValue(PropertyTokenHolder tokens, PropertyValue pv) throws BeansException {
    		String propertyName = tokens.canonicalName;
    		String actualName = tokens.actualName;
    
    		if (tokens.keys != null) {
    			// Apply indexes and map keys: fetch value for all keys but the last one.
    			PropertyTokenHolder getterTokens = new PropertyTokenHolder();
    			getterTokens.canonicalName = tokens.canonicalName;
    			getterTokens.actualName = tokens.actualName;
    			getterTokens.keys = new String[tokens.keys.length - 1];
    			System.arraycopy(tokens.keys, 0, getterTokens.keys, 0, tokens.keys.length - 1);
    			Object propValue;
    			try {
    				propValue = getPropertyValue(getterTokens);
    			}
    			catch (NotReadablePropertyException ex) {
    				throw new NotWritablePropertyException(getRootClass(), this.nestedPath + propertyName,
    						"Cannot access indexed value in property referenced " +
    						"in indexed property path '" + propertyName + "'", ex);
    			}
    			// Set value for last key.
    			String key = tokens.keys[tokens.keys.length - 1];
    			if (propValue == null) {
    				throw new NullValueInNestedPathException(getRootClass(), this.nestedPath + propertyName,
    						"Cannot access indexed value in property referenced " +
    						"in indexed property path '" + propertyName + "': returned null");
    			}
    			else if (propValue.getClass().isArray()) {
    				PropertyDescriptor pd = getCachedIntrospectionResults().getPropertyDescriptor(actualName);
    				Class requiredType = propValue.getClass().getComponentType();
    				int arrayIndex = Integer.parseInt(key);
    				Object oldValue = null;
    				try {
    					if (isExtractOldValueForEditor()) {
    						oldValue = Array.get(propValue, arrayIndex);
    					}
    					Object convertedValue = convertIfNecessary(propertyName, oldValue, pv.getValue(), requiredType,
    							new PropertyTypeDescriptor(pd, new MethodParameter(pd.getReadMethod(), -1), requiredType));
    					Array.set(propValue, arrayIndex, convertedValue);
    				}
    				catch (IndexOutOfBoundsException ex) {
    					throw new InvalidPropertyException(getRootClass(), this.nestedPath + propertyName,
    							"Invalid array index in property path '" + propertyName + "'", ex);
    				}
    			}
    			else if (propValue instanceof List) {
    				PropertyDescriptor pd = getCachedIntrospectionResults().getPropertyDescriptor(actualName);
    				Class requiredType = GenericCollectionTypeResolver.getCollectionReturnType(
    						pd.getReadMethod(), tokens.keys.length);
    				List list = (List) propValue;
    				int index = Integer.parseInt(key);
    				Object oldValue = null;
    				if (isExtractOldValueForEditor() && index < list.size()) {
    					oldValue = list.get(index);
    				}
    				Object convertedValue = convertIfNecessary(propertyName, oldValue, pv.getValue(), requiredType,
    						new PropertyTypeDescriptor(pd, new MethodParameter(pd.getReadMethod(), -1), requiredType));
    				if (index < list.size()) {
    					list.set(index, convertedValue);
    				}
    				else if (index >= list.size()) {
    					for (int i = list.size(); i < index; i++) {
    						try {
    							list.add(null);
    						}
    						catch (NullPointerException ex) {
    							throw new InvalidPropertyException(getRootClass(), this.nestedPath + propertyName,
    									"Cannot set element with index " + index + " in List of size " +
    									list.size() + ", accessed using property path '" + propertyName +
    									"': List does not support filling up gaps with null elements");
    						}
    					}
    					list.add(convertedValue);
    				}
    			}
    			else if (propValue instanceof Map) {
    			      //...
                             }
                      }
             }
    }

    Spring...

    Запостил: nikelin, 12 Апреля 2011

    Комментарии (10) RSS

    • лопата?
      Ответить
    • Ну тут же возникает вопрос, почему бы метод не назвать, например
      setValuePassedInFirstArgumentToThisMethodТоProperyInThisClass
      - ведь так на много понятнее было бы!
      Ответить
      • или короче: setObjectProperty
        Ответить
      • Тут же возникает вопрос, почему бы туда ещё не добавить логики для приготовления кофе или игры в карты. При чём только арабики и только блэкджека.
        Ответить
      • >на много
        детектед
        Ответить
    • BeanWrapperImpl
      BeanWrapper
      Bean
      Mr. Bean
      Ответить
    • Из кoлeи выбилo кaпитaльнo и, приeхaв нa aвтoбусe oбрaтнo в Oзёры, купил в мaгaзинe вoдки, нaпился дoмa, в oднo лицo, дo свинскoгo сoстoяния.
      Ответить

    Добавить комментарий