Как стать автором
Обновить

Комментарии 39

Вопрос не ради холивара, а по профессиональной необходимости: для Java в вашей компании что-то такое есть?
«Что-то такое» — это вы про Java-декомпиляцию? Если да, то подобных продуктов у нас нет (насколько мне известно).
А вообще для Java у нас есть наша собственная IDE — IntelliJ IDEA.
А планируете сделать Java-декомпилятор?
Ну и Android-декомпилятор до кучи.
Так, я тут обратился за помощью к IDEA-коллегам, и получил примерно такой ответ:

Планов на подобные вещи с нашей стороны пока что нет, но есть сторонние плагины для декомпиляции Java

А вот, что я нашел в IDEA-репозитории: plugins.jetbrains.com/plugin/7100?pr=idea_ce
Надеюсь, поможет-пригодится.
Как это — до кучи? У них байт-код разный.
А вообще да, не хватает тулзы хака андроид-программ.
Связка dex2jar+jdgui глючная донельзя и часто просто декомпилит некорректно.
Про декомиляцию естественно. Просто с ростом разных «современных» проектов библиотек, растет и число ошибок в них. Очень ценно было бы создание быстрых патчей на уровне байт-кода. Ну или хотя бы среды в которой можно посмотреть, что конкретно скомпилировано в данный JAR-ник, потому как автор не очень дружит с мейвеном или другой организацией распространения исходников.
А планируется ли отображение IL кода декомпилированного?
К сожалению, иногда читаемость кода на выходе по-прежнему значительно уступает рефлектору.
Кусок метода SubtitleImage.CreateSubtitleArray из проекта SupRip,
Как его выдает Reflector
 for (int i = 0; i < this.subtitleBitmap.Size.Height; i++)
    {
        for (int j = 0; j < this.subtitleBitmap.Size.Width; j++)
        {
            byte num4 = (byte) ((((destination[num++] + destination[num++]) + destination[num++]) * destination[num++]) / 0x300);
            if (num4 < 30)
            {
                this.subtitleArray[i, j] = 0;
            }
            else
            {
                this.subtitleArray[i, j] = num4;
            }
        }
    }


И как dotPeek 1.1
      for (int index1 = 0; index1 < this.subtitleBitmap.Size.Height; ++index1)
      {
        for (int index2 = 0; index2 < this.subtitleBitmap.Size.Width; ++index2)
        {
          byte[] numArray1 = destination;
          int index3 = num1;
          int num2 = 1;
          int num3 = index3 + num2;
          int num4 = (int) numArray1[index3];
          byte[] numArray2 = destination;
          int index4 = num3;
          int num5 = 1;
          int num6 = index4 + num5;
          int num7 = (int) numArray2[index4];
          int num8 = num4 + num7;
          byte[] numArray3 = destination;
          int index5 = num6;
          int num9 = 1;
          int num10 = index5 + num9;
          int num11 = (int) numArray3[index5];
          int num12 = num8 + num11;
          byte[] numArray4 = destination;
          int index6 = num10;
          int num13 = 1;
          num1 = index6 + num13;
          int num14 = (int) numArray4[index6];
          byte num15 = (byte) (num12 * num14 / 768);
          this.subtitleArray[index1, index2] = (int) num15 >= 30 ? num15 : (byte) 0;
        }
      }


Пожалуй, главный (единственный?) недостаток в проекте для меня.
Спасибо за Go to Everything, удобно иметь его и здесь.
Согласен. Попробовал на своем проекте. Самые часто встречаемые проблемы — это огромное количество избыточных операций приведения типов (особенно в случае с лямбдами) и отсутствие распознавания extension-методов. Также обратил внимание на повсеместное явное использование this при обращении к экземплярным полям — но это мелочи.

С нетерпернием жду новой версии :)
Update: в некоторых местах вылезли сообщения:
// ISSUE: explicit reference operation
// ISSUE: variable of a reference type

Еще в одном месте появился оператор goto.

Если интересно, могу прислать примеры исходного кода, который это вызывает.
Кстати да, не хватает ReduceTypesCastingTransformation )))
А вы не могли бы попробовать еще и последний ILSpy? (придется собрать из исходников на github).
Интересно сравнить с dotPeek и Reflector.
Клёво, да
	for (int i = 0; i < this.subtitleBitmap.Size.Height; i++)
	{
		for (int j = 0; j < this.subtitleBitmap.Size.Width; j++)
		{
			byte b = (byte)((int)((array[num++] + array[num++] + array[num++]) * array[num++]) / 768);
			if (b < 30)
			{
				this.subtitleArray[i, j] = 0;
			}
			else
			{
				this.subtitleArray[i, j] = b;
			}
		}
	}


Спасибо за наводку на проект, не знал о нем.
А вы не могли бы ещё сравнить с Telerik's JustDecompile?
Да без проблем
            for (int i = 0; i < this.subtitleBitmap.Size.Height; i++)
            {
                for (int j = 0; j < this.subtitleBitmap.Size.Width; j++)
                {
                    int num1 = num;
                    num = num1 + 1;
                    int num2 = num;
                    num = num2 + 1;
                    int num3 = num;
                    num = num3 + 1;
                    int num4 = num;
                    num = num4 + 1;
                    byte num5 = (byte)((numArray[num1] + numArray[num2] + numArray[num3]) * numArray[num4] / 768);
                    if (num5 >= 30)
                    {
                        this.subtitleArray[i, j] = num5;
                    }
                    else
                    {
                        this.subtitleArray[i, j] = 0;
                    }
                }
            }


Лично мне версия от ILSpy понравилась больше всех.
Он доступен и в качестве инсталлятора ))
А планируется ли поддержка отображения IL кода в dotPeek? Reflector очень удобен тем, что можно переключаться между декомпилированным кодом и его IL-эквивалентом.
Кстати, да. Приходится грузить ILSpy для этих целей )
Отлично! А не подскажете, есть какие-нибудь примерные планы по срокам на эту задачу? Сколько осталось ждать до получения этой прекрасной функциональности? А то issue лежит в системе уже два года…
Ну, ничего кроме как «запланировано на версию 2.0», к сожалению, ответить не могу — у нас еще нет конкретных сроков/дат… То, что IL хотят — мы знаем, да, так что обязательно сделаем! :-)
Ок, будем ждать. Спасибо вам за такой чудесный продукт =)
Вам спасибо!
декомпилировал сам dotPeek, получив солюшен )) Чувствую себя злым гением ))
А скомпилиировать этот солюшен и запустить у вас получилось?
Очень приятная фича Reflector — отладка по декомпиленым исходникам. Нету ли планов реализовать это в dotPeek/ReSharper?
В dotPeek — нет, поскольу он никак не интегрируется с Visual Studio.
В ReSharper — есть, но не ранее 9.0
Я понимаю что Вы не связанны с отделом маркетинга, но всё же:
Планируются ли в скором времени какие-то распродажи и акции? А то я уже довольно давно с грустью поглядываю на ваши PhpStorm и IntelliJ IDEA (я пользуюсь комьюнити едишн, но хотел-бы вас поддержать купив лицензию)
Увы цены как для скромного сотрудника колледжа(трудовой я записан как инженер-электронщик, хотя и имею часы) не подьёмные.
У JB пару раз в год какая-нибудь фишка с дикой скидкой точно бывает + бесплатные лицензии для open-source некоммерческих проектов, емнип.
Ну их требованиям опен-сорс я не соответствую, програмирую в основном Just For Fun. Вот о такого рода акции я и спрашиваю, т.к. уже довольно давно её жду и жалею что на прошлой не скупился. Если нет — попробую подать запрос на академическую лицензию, но всё портит то что основная должность у меня — инженер :(
Здравствуйте!
Забавно, но я имею самое непосредственное отношение к маркетингу: я один из marketing lead-ов в JetBrains )
Отвечая на ваш вопрос, серьезные распродажи в ближайшее время не планируются (ну а если бы и планировались, мы бы об этом разве что намекали, да и то только за несколько дней до). Мы с ними несколько переборщили за последний год, хотелось бы перевести дух.
Сейчас действует 10% скидка на персональные лицензии IntelliJ IDEA, но серьезной распродажей я бы это не назвал — скорее способ пощупать эластичность спроса с очередной стороны.
Это были плохие новости. Теперь хорошие.
Если посмотреть на лицензионные соглашения на PhpStorm и IntelliJ IDEA, то там есть параграф 1b, который гласит:
(b) «Licensee» means (i) the individual who is a student, faculty or staff member at an educational institution, or (ii) the educational institution specified in the License Certificate. For purposes of this definition, «educational institution» means a public or private school, college, university and other post secondary educational establishment.

Обратите внимание на cловосочетание «staff member» — даже выступая в роли инженера, а не преподавателя, вы вполне можете быть лицензиатом по академическому соглашению. При этом, как следует из дальнейшего текста соглашения, лицензия должна использоваться в некоммерческих целях, но это, как я понимаю, также выполнимое для вас условие.
Поэтому я не вижу никаких препятствий для подачи заявок на академические лицензии с вашей стороны.
И еще: большое спасибо, что хотите нас поддержать. Это важно и приятно. Правда.
Большое спасибо, подал заявку на академическую лицензию на PhpStorm(для начала) с нетерпением буду ждать ответа :)
Немного не в тему, но я не могу удержаться. Когда JetBrains объявит, ну хоть примерную, дату релиза С++ IDE?
Финальный релиз случится вряд ли раньше зимы. Впрочем, в сентябре или октябре мы намерены открыть Early Access Program.
Не хватает функционала как в reflexil для Reflector
Зарегистрируйтесь на Хабре, чтобы оставить комментарий