это мой первый опубликованный вопрос. У меня довольно сложный OQL-запрос, в котором перечислены статические поля классов, загруженных в наши пакеты. Одна из проблем, с которыми я сталкиваюсь при выполнении запроса к jhat из Java 1.6.0_24, заключается в том, что «уникальная» функция не работает должным образом. Я ожидаю
select unique(['a', 'b', 'c', 'a'])
чтобы вернуть ['a', 'b', 'c'], но вместо этого он возвращает ['a'], wtf?
Если кого-то интересует фактический полный запрос (замените com.mydomain на то, что вам нравится):
select cl.name + ' -- ' + unique(map(filter(referees(cl), "classof(it).name != 'java.lang.Class' && classof(it).name != 'java.lang.String' && classof(it).name != 'sun.misc.Launcher$AppClassLoader' && classof(it).name != 'java.security.ProtectionDomain' && classof(it).name != '[Ljava.security.cert.Certificate;' && classof(it).name != 'sun.plugin2.applet.JNLP2ClassLoader'"), "classof(it).name")).join(', ')
from instanceof java.lang.Class cl
where /com.mydomain./(cl.name) && ! /com.mydomain.xs.protobuf./(cl.name)
&& length(filter(referees(cl), "classof(it).name != 'java.lang.Class' && classof(it).name != 'java.lang.String' && classof(it).name != 'sun.misc.Launcher$AppClassLoader' && classof(it).name != 'java.security.ProtectionDomain'")) > 0;