Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Investigar bug em casos varargs como parametros causando erro nas linhas modificadas #56

Open
rafaelmotaalves opened this issue Oct 29, 2019 · 13 comments
Assignees

Comments

@rafaelmotaalves
Copy link
Collaborator

No description provided.

@rafaelmotaalves
Copy link
Collaborator Author

projeto: jsoup
merge_commit: 7ba0ee75547878ddccc5ab50777b67c712aa73e4
left_commit: 45a9de5
right_commit: 8121d8c
base_commit: f28c024ba127fd701f0d195a359afbabff04d7a1
class: org.jsoup.helper.HttpConnection
method: data(String)

Nesse caso foi reportado que o framework retornou linhas que não foram modificadas. Verificando isso melhor percebi que as linhas acusadas por um método com overloading.

@rafaelmotaalves
Copy link
Collaborator Author

@pauloborba testando esse caso na ferramenta obti a saída:

LEFT =============================
/home/rafael/projects/miningframework/f28c024ba127fd701f0d195a359afbabff04d7a1.java <=> /home/rafael/projects/miningframework/45a9de5.java
181c202: return type changed from Connection to Connection.KeyVal
181c202: parameter name changed from keyvals to key
182c203: code changed in data(String)
183d204: code removed in data(String)
184,187c204: code changed in data(String)
187,188c204,205: code changed in data(String)
188,189c205: code changed in data(String)
189c205,206: code changed in data(String)
191c208: code changed in data(String)
202c181: return type changed from Connection.KeyVal to Connection
202c181: parameter name changed from key to keyvals
203c182: code changed in data(String)
204c183,184: code changed in data(String)
205c185,189: code changed in data(String)
206d189: code removed in data(String)
208c191: code changed in data(String)
665a665,666: code added in execute(Connection.Request, Response)
RIGHT ============================
/home/rafael/projects/miningframework/f28c024ba127fd701f0d195a359afbabff04d7a1.java <=> /home/rafael/projects/miningframework/8121d8c.java
3a22: import added: staticorg.jsoup.internal.Normalizer.lowerCase
181c203: return type changed from Connection to Connection.KeyVal
181c203: parameter name changed from keyvals to key
182c204: code changed in data(String)
183d205: code removed in data(String)
184,187c205: code changed in data(String)
187,188c205,206: code changed in data(String)
188,189c206: code changed in data(String)
189c206,207: code changed in data(String)
191c209: code changed in data(String)
202c182: return type changed from Connection.KeyVal to Connection
202c182: parameter name changed from key to keyvals
203c183: code changed in data(String)
204c184,185: code changed in data(String)
205c186,190: code changed in data(String)
206d190: code removed in data(String)
208c192: code changed in data(String)
415c416: code changed in getHeaderCaseInsensitive(String)
425c426: code changed in scanHeaders(String)
427c428: code changed in scanHeaders(String)

@rafaelmotaalves
Copy link
Collaborator Author

o diffj retornou que ocorreram mudanças sem que elas tenham acontecido, provavelmente por causa do overloading de métodos.

@pauloborba
Copy link
Member

@jvcoutinho olha o bug no diffj. você já tinha notado algo similar?

@rafaelmotaalves desses uma olhada nas issues deles para ver se tem algo similar? ou se já foi resolvido em uma versão mais recente?

@rafaelmotaalves
Copy link
Collaborator Author

@pauloborba não achei nenhuma menção não. Me parece que o projeto não está sendo mantido ativamente, o último commit foi mais ou menos um ano atrás

@jvcoutinho
Copy link
Collaborator

@pauloborba nunca notei não

@rafaelmotaalves pelo código e pelo texto, aparentemente o diffj comparou o data(String) com o método data(String...) (de número variável de argumentos)

@pauloborba
Copy link
Member

@rafaelmotaalves, por favor, confirma com outro exemplo que é realmente o caso que o diffj nao lida com overloading.

@jvcoutinho você não tinha visto nenhuma restrição nesse sentido?

@rafaelmotaalves
Copy link
Collaborator Author

@pauloborba investigando melhor, na verdade é um problema bem específico que é:
Existem dois métodos:
data(String value)
e
data(String ...value)

Nesse caso especifico em que existem dois métodos com mesmo nome é com esses tipos de parâmetros que dá problema. Se os tipos dos parâmetros for diferente com mesmo nome, ele reconhece.

@jvcoutinho
Copy link
Collaborator

@jvcoutinho você não tinha visto nenhuma restrição nesse sentido?

Não, não. Aparentemente é um caso bem específico de sobrecarga que o DiffJ não lida, mas não é no geral.
De qualquer forma, é um bug crítico. Provavelmente seja hora de pivotar para o Gumtree.

@pauloborba
Copy link
Member

@pauloborba investigando melhor, na verdade é um problema bem específico que é:
Existem dois métodos:
data(String value)
e
data(String ...value)

Nesse caso especifico em que existem dois métodos com mesmo nome é com esses tipos de parâmetros que dá problema. Se os tipos dos parâmetros for diferente com mesmo nome, ele reconhece.

@rafaelmotaalves ah, ele tem problema então com overloading devido a varargs. por curiosidade, esse código compila? é possível em Java ter overloading nessa situação? é esquisito porque o segundo método pode ser chamado com um número arbitrário de argumentos, inclusive um argumento, o que conflita com o primeiro método

@rafaelmotaalves
Copy link
Collaborator Author

@rafaelmotaalves vou testar, mas acho que sim, porque se eu não me engano o build é gerado

@rafaelmotaalves
Copy link
Collaborator Author

@pauloborba ele compila sem problemas. Se chamar com apenas um argumento roda o método com apenas um, se rodar com mais ou nenhum roda a função com ...

@pauloborba
Copy link
Member

OK @rafaelmotaalves, para evoluir nisto então temos duas opções:

  1. verificar como o DiffJ lida com varargs (deve passar pelo parser, mas a árvore nao deve estar sendo criada adequadamente) e enviar um PR corrigindo;
  2. substituir o DiffJ pelo gumtree, se é que o gumtree lida bem com esse tipo de parâmetro!

mas nao parece ser prioritário já que identificamos apenas um caso. OK @leusonmario?

@rafaelmotaalves rafaelmotaalves changed the title Investigar bug em casos com multiplos métodos de mesmo nome causando erro nas linhas modificadas Investigar bug em casos varargs como parametros causando erro nas linhas modificadas Dec 23, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants