INRIA SPOON getSuperinterfaces класса и получает суперкласс интерфейса
У меня есть две проблемы:
Я хотел бы извлечь список интерфейсов класса, и я использую следующий код ниже, чтобы сделать это. Проблема в том, что этот код извлекает как суперклассы, так и интерфейсы, и я хотел бы извлечь только интерфейсы. Я пытался с помощью кода
if(inter.isInterface())
но это не сработало, и я все еще получаю и интерфейсы, и суперклассы одновременно. Не могли бы вы дать мне указания о том, как извлечь только классы (не включая суперклассы) для класса? Есть ли альтернатива методу getSuperInterfaces()?for(CtType<?> clazz : classFactory.getAll(true)) { String myinterfaceclassid = null; String myinterfacename = null; String myclassid = null; String myclassname = null; String FullClassName= clazz.getPackage()+"."+clazz.getSimpleName(); Set<CtTypeReference<?>> interfaces = clazz.getSuperInterfaces(); for(CtTypeReference<?> inter: interfaces) { ResultSet interfacesnames = st.executeQuery("SELECT classname from classes where classname='"+inter+"'"); while(interfacesnames.next()) { myinterfacename= interfacesnames.getString("classname"); } ResultSet interfacesclasses = st.executeQuery("SELECT id from classes where classname='"+inter+"'"); while(interfacesclasses.next()) { myinterfaceclassid= interfacesclasses.getString("id"); } ResultSet classesnames= st.executeQuery("SELECT classname from classes where classname='"+FullClassName+"'"); while(classesnames.next()) { myclassname= classesnames.getString("classname"); } ResultSet interfacesname = st.executeQuery("SELECT id from classes where classname='"+FullClassName+"'"); while(interfacesname.next()) { myclassid= interfacesname.getString("id"); } if(myinterfaceclassid != null) { st.executeUpdate("INSERT INTO `interfaces`(`interfaceclassid`,`interfacename`,`ownerclassid`, `classname`) VALUES ('"+myinterfaceclassid +"','" +myinterfacename+"','" +myclassid+"','" +myclassname+"')"); } System.out.println(inter); CtTypeReference<?> mysuperclass = inter.getSuperclass(); System.out.println("SUPERCLASS :"+ mysuperclass); } }
Вот пример интерфейса в проекте, который я анализирую с помощью Spoon. В этом случае интерфейсом является TransformationPly, а суперклассом - Ply. Метод
getSuperInterfaces()
в моем случае возвращает как суперклассы, так и интерфейсы, чего я не хочу.public interface TransformationPly extends Ply { // Methods /** * Get the new type of the piece after the transformation. * * @return The new piece after the transformation. */ byte getTypeAfterTransformation(); /** * Set the new piece type after the transformation. * * @param pieceType The new piece type after the transformation. */ void setTypeAfterTransformation( byte pieceType); }
Я также хотел бы извлечь суперклассы интерфейсов, как показано в примере выше. В приведенном выше случае Ply является суперклассом TransformationPly.
Я пробовал следующий код для извлечения суперкласса TransformarionPly, но mysuperclass всегда нулевой.
for(CtType<?> clazz : classFactory.getAll(true)) {
Set<CtTypeReference<?>> interfaces = clazz.getSuperInterfaces();
for(CtTypeReference<?> inter: interfaces) {
CtTypeReference<?> mysuperclass = inter.getSuperclass();
System.out.println("SUPERCLASS :"+ mysuperclass);
}
Не могли бы вы дать мне инструкции о том, как извлечь суперкласс интерфейса?