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

    0

    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
    private static void createHook(MethodNode mn,
                                   String targetClassName,
                                   String hookMethodClass,
                                   String hookMethodName,
                                   Boolean printMessages)
    {
        InsnList il = new InsnList();
        LabelNode originalLabelNode = new LabelNode();
        // Object caller, param1, param2, ...
        String hookMethodDesc = "(Ljava/lang/Object;" + mn.desc.substring(1);
    
        il.add(new VarInsnNode(Opcodes.ALOAD, 0));  // this
        il.add(new MethodInsnNode(Opcodes.INVOKESTATIC,
                                  isOriginalCallClassName,
                                  isOriginalCallMethodName,
                                  isOriginalCallMethodDesc,
                                  false));
        il.add(new JumpInsnNode(Opcodes.IFNE, originalLabelNode));
    
        if (printMessages) {
            il.add(BytecodeHelper.getPrintlnSequence("patched " + mn.name + mn.desc + " called"));
        }
    
        il.add(new VarInsnNode(Opcodes.ALOAD, 0));  // this
        il.add(getParamsLoadSequence(mn.desc, 1));  // other params
        il.add(new MethodInsnNode(Opcodes.INVOKESTATIC, hookMethodClass, hookMethodName, hookMethodDesc, false));
        il.add(new InsnNode(parseReturnOpcode(hookMethodDesc)));
    
        il.add(originalLabelNode);
    
        if (printMessages) {
            il.add(BytecodeHelper.getPrintlnSequence("original " + mn.name + mn.desc + " called"));
        }
        mn.instructions.insert(il);
    }

    Бытует мнение, что «Java» — это высокозащищённый язык, в котором невозможны всяческие си-подобные грязные хаки. На самом деле, конечно, это не так: просто чтобы прострелить себе ногу в «Жабе» — надо чуть больше постараться.

    Фрагмент небольшой самописной либы, позволяющей хукать произвольные методы, прямо как в «Microsoft Detours».

    gost, 28 Декабря 2019

    Комментарии (12)
  2. Java / Говнокод #26208

    0

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    public void setSQLMode(Connection c, String mode) throws Exception
    {     
    Statement stmt = c.createStatement();   
    String qr = "SET SESSION sql_mode = '"+mode+"';";  
    stmt.execute(qr); 
    }

    Вообще трешак че откопал.

    mozga, 12 Декабря 2019

    Комментарии (8)
  3. Java / Говнокод #26206

    0

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    public class C1834 { }
    class C1835 extends  C1834 { }
    
    public class C1836 {
    
       public void m5(ArrayList<? extends C1834> strList)
        {
            List<? extends C1834> list = new ArrayList<>();
            list.add(new C1835());
       }
    
    }

    АААА... кто-нибудь знает почему нельзя добавить объект С1835 в список? Как это обойти?

    mozga, 12 Декабря 2019

    Комментарии (4)
  4. Java / Говнокод #26204

    −1

    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
    Statement stmt = null; 
    ResultSet rs = null; 
    
    try{     
    stmt = connection.createStatement();    
    ResultSet rs = stmt.executeQuery("select * from VENDORS");   
     while(rs.next())
         {
          //тело цикла....
           }
     } 
    finally
    { 
         rs.close(); stmt.close(); 
    }

    Тимлид сказал что за такое будет руки отрывать. Что тут не так?

    mozga, 12 Декабря 2019

    Комментарии (34)
  5. Java / Говнокод #26086

    −1

    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
    // https://cdn.staticaly.com/gh/landawn/abacus-util/master/docs/MutableBoolean_view.html
    // https://github.com/landawn/abacus-util/blob/76cb7c712d4ce2d167f9170f8d92fd9857db8f99/src/main/java/com/landawn/abacus/util/MutableBoolean.java
    
    public final class MutableBoolean implements Mutable, Serializable, Comparable<MutableBoolean> {
        /**
         * Constructs a new MutableBoolean with the default value of false.
         */
        MutableBoolean() {
            super();
        }
    
        /**
         * Constructs a new MutableBoolean with the specified value.
         * 
         * @param value the initial value to store
         */
        MutableBoolean(final boolean value) {
            super();
            this.value = value;
        }
    
        /**
         *
         * @param value
         * @return
         */
        public static MutableBoolean of(final boolean value) {
            return new MutableBoolean(value);
        }
    
        /**
         *
         * @return true, if successful
         */
        public boolean value() {
            return value;
        }
    
        /**
         * Sets the value.
         * 
         * @param value the value to set
         */
        public void setValue(final boolean value) {
            this.value = value;
        }
    }

    Тут человек изменяемый булеан сделал, что думаете? Функциональное программирование уже проиграло ООП?

    Fike, 11 Декабря 2019

    Комментарии (56)
  6. Java / Говнокод #26069

    +4

    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
    value =
                (obj instanceof ParameterAlias)
                    ? "@" + ((ParameterAlias) obj).getAlias()
                    : (obj instanceof Boolean)
                        ? BooleanUtils.toStringTrueFalse((Boolean) obj)
                        : (obj instanceof UUID)
                            ? obj.toString()
    
                            : (obj instanceof byte[])
                                ? EdmBinary.getInstance().toUriLiteral(Hex.encodeHexString((byte[]) obj))
                                : (obj instanceof Timestamp)
                                    ? timestamp((Timestamp) obj)
                                    : (obj instanceof Calendar)
                                        ? calendar((Calendar) obj)
                                        : (obj instanceof Duration)
                                            ? duration((Duration) obj)
                                            : (obj instanceof BigDecimal)
                                                ? EdmDecimal.getInstance().valueToString(obj, null, null,
                                                    Constants.DEFAULT_PRECISION, Constants.DEFAULT_SCALE, null)
                                                : (obj instanceof Double)
                                                    ? EdmDouble.getInstance().valueToString(obj, null, null,
                                                        Constants.DEFAULT_PRECISION, Constants.DEFAULT_SCALE, null)
                                                    : (obj instanceof Float)
                                                        ? EdmSingle.getInstance().valueToString(obj, null, null,
                                                            Constants.DEFAULT_PRECISION, Constants.DEFAULT_SCALE, null)
                                                        : (obj instanceof Long)
                                                            ? EdmInt64.getInstance().valueToString(obj, null, null,
                                                                Constants.DEFAULT_PRECISION, Constants.DEFAULT_SCALE, null)
                                                            : (obj instanceof Geospatial)
                                                                ? Encoder.encode(EdmPrimitiveTypeFactory.getInstance(
                                                                    ((Geospatial) obj).getEdmPrimitiveTypeKind()).
                                                                    valueToString(obj, null, null,
                                                                        Constants.DEFAULT_PRECISION,
                                                                        Constants.DEFAULT_SCALE, null))
                                                                : (obj instanceof String)
                                                                    ? quoteString((String) obj, singleQuoteEscape)
                                                                    : obj.toString();

    Петроградская тюрьма
    С поворотом лесенки.
    Мы с товарищем сидели –
    Распевали песенки

    Мистер Хэнки, 06 Декабря 2019

    Комментарии (45)
  7. Java / Говнокод #26057

    0

    1. 1
    2. 2
    @Mock
    QueryParser queryParserMock = mock(QueryParser.class);

    Для надежности

    the-alator, 29 Ноября 2019

    Комментарии (34)
  8. Java / Говнокод #26055

    +3

    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
    /**
         * Four state boolean.
         */
        enum Bool {
            /** */
            FALSE,
    
            /** */
            TRUE,
    
            /** */
            READY,
    
            /** */
            DONE
        }

    MAKAKA, 27 Ноября 2019

    Комментарии (23)
  9. Java / Говнокод #26042

    +1

    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
    private Map<Iterable<ItemStack>, Predicate<ItemStack>> getSubInventories(Map<Iterable<ItemStack>, Predicate<ItemStack>> subInventories, EntityPlayer player) {
        InventoryPlayer inv = player.inventory;
        ItemStack heldItem = inv.getCurrentItem();
    
        int wireless = tile.getNetwork().getSetting(NetworkSettings.NETWORK_WIRELESS);
        if((wireless >> 1 & 1) == 1) {
            subInventories.put(Lists.newArrayList(heldItem), NOT_EMPTY);
        }
        if((wireless >> 2 & 1) == 1) {
            subInventories.put(inv.offHandInventory, NOT_EMPTY);
        }
        if((wireless >> 3 & 1) == 1) {
            subInventories.put(inv.mainInventory.subList(0, 9), stack -> !stack.isEmpty() && (heldItem.isEmpty() || heldItem != stack));
        }
        if((wireless >> 4 & 1) == 1) {
            subInventories.put(inv.armorInventory, NOT_EMPTY);
        }
        if((wireless >> 5 & 1) == 1) {
            if(FluxNetworks.proxy.baublesLoaded) {
                if(player.hasCapability(BaublesCapabilities.CAPABILITY_BAUBLES, null)){
                    IItemHandler handler = player.getCapability(BaublesCapabilities.CAPABILITY_BAUBLES, null);
                    subInventories.put(() -> new ItemHandlerIterator(handler), NOT_EMPTY);
                }
            }
        }
    
        return subInventories;
    }

    gost, 24 Ноября 2019

    Комментарии (3)
  10. Java / Говнокод #26035

    +2

    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
    public class AdvancedBoolean {
        private boolean result;
        private DefenitionDictionary.RESULT_CODE code;
        
        
        
    //------------------------------------------------------------------------------  
    //constructors
    //------------------------------------------------------------------------------       
        public AdvancedBoolean() {
            result = true;
        }
            
        public AdvancedBoolean(boolean _result) {
            result = _result;
        }
     
         
        public AdvancedBoolean(boolean _result, DefenitionDictionary.RESULT_CODE _code) {
            result = _result;
            code = _code;
        }
    
        
        
    //------------------------------------------------------------------------------
    //get methods
    //------------------------------------------------------------------------------     
        public boolean isResult() {
            return result;
        }
    
        public DefenitionDictionary.RESULT_CODE getCode() {
            return code;
        }
    
    
            
    //------------------------------------------------------------------------------
    //set methods
    //------------------------------------------------------------------------------ 
        public void setResult(boolean _result) {
            result = _result;
        }
        
        public void setCode(DefenitionDictionary.RESULT_CODE _code) {
            code = _code;
        }
        
        
        
    //------------------------------------------------------------------------------
    //other methods
    //------------------------------------------------------------------------------     
        public String getLabel() {
            return code.getResultLabel();
        }
    }

    Без комментариев

    Veers, 19 Ноября 2019

    Комментарии (9)