2010-06-24 11 views
7

Sto lavorando a un'analisi per i programmi Java che richiede informazioni sugli effetti collaterali sulle chiamate ai metodi. Per le classi di libreria standard, vorrei compilare un elenco di metodi con parametri di sola lettura. Cioè, i metodi che non modificano i loro argomenti o qualsiasi cosa raggiungibile dai loro argomenti. Posso dedurre molto dai javadocs, ma ci vorrà del tempo.Metodi free-side nella libreria standard Java

Qualcuno potrebbe suggerire un riferimento o un metodo più semplice per determinare se le chiamate al metodo standard modificano i loro argomenti? La lettura di ogni voce di javadoc sta davvero nel modo migliore?

Grazie!

MODIFICA: Un bonus sarebbe l'identificazione di metodi che non hanno effetti collaterali sull'oggetto. Ad esempio, stack.pop() dovrebbe invece che stack.size() non lo farebbe.

+1

Sarei interessato a vedere la tua soluzione. Puoi assumere che tutti i metodi che accettano tipi immutabili sono privi di effetti collaterali. Non sei sicuro di cos'altro puoi fare oltre a javadocs e codice. –

+0

@SB: basti ricordare che 'String' è immutabile, ma le classi che implementano' CharSequence' possono o non possono essere. – Powerlord

risposta

1

Bene, tutti i metodi che accettano solo tipi primitivi/stringhe/Oggetto/tipi generici come parametri dovrebbero soddisfarvi senza ulteriori considerazioni. E per java.lang e java.util questo dovrebbe coprire la maggior parte dei metodi.

Ma sarebbe davvero meglio limitare i pacchetti che si desidera elaborare, perché jdk standard offre un'enorme libreria di classi per tutte le attività e scopi.

modificare
E 'un po' più confusa per i tipi generici dichiarati E extends ModifiableObject, in modo da vedere di persona.

+0

Questo è un buon suggerimento come punto di partenza, grazie. – Owen

1

Si potrebbe provare a eseguire un motore di inferenza di tipo contro il codice sorgente del JDK.

Forse la carta Type qualifier inference for Java potrebbe essere utile. (Il testo completo non sembra essere online)

1

Il nostro DMS Software Reengineering Toolkit è uno strumento di analisi e trasformazione del programma personalizzabile e per scopi generici. Ha un Java Front End che analizza Java e produce tabelle di simboli, relazioni di ereditarietà delle classi, controllo e informazioni sul flusso di dati.

Da queste informazioni, è possibile calcolare le informazioni locali sull'eventualità che un metodo M modifichi direttamente un argomento o qualsiasi cosa raggiungibile da un argomento. Un grafo di chiamata può essere costruito e qualsiasi cosa modificata da un metodo X chiamato direttamente o indirettamente da M. Questa è in effetti la tua risposta. Dovresti applicarlo alla fonte del codice di interesse, nel tuo caso, la libreria standard Java.

La configurazione del DMS per eseguire questa operazione non è banale anche con tutte le informazioni fornite. OTOH, questa risposta sarà abbastanza accurata (ipotesi e riflessioni conservative del modulo), ripetibile e facile da applicare a qualsiasi metodo tu scelga. Fare questo manualmente tramite Javadocs rischia di essere estremamente dispendioso in termini di tempo e di errori.

Problemi correlati