2013-07-31 18 views
5

Pracuję nad analizatorem kodu Java (rzeczy AST przy użyciu interfejsu API drzewa) i próbuję utworzyć raport o tym, czy sprawdzany kod korzysta z nieprzenośne interfejsy API. Rzeczy takie jak pakiety słoneczne i takie powinny powodować ostrzeżenie. Gdzie znajduje się zdefiniowana lista klas przenośnych SE 7? Czy istnieje coś więcej parsable niż SE Javadocs? Jeśli Javadocs są "przenośnymi listami", jak są generowane ze wszystkich źródeł java z OpenJDK? Czy przenośny kod jest oddzielny czy ...?Ustal, czy klasa Java jest przenośną klasą SE

+0

Javac generuje ostrzeżenie, gdy używam nie przenośnego API. Możesz tam zbadać. – assylias

+0

Do wersji Java 9 z modułem, listę klas Java środowiska Oracle, listę klas OpenJDK. Przecięcie "powinno" być przenośne. –

Odpowiedz

1

Podstawowe klasy SE są definiowane przez jeden z plików używanych w kompilacji JDK proces, który można znaleźć pod adresem: https://github.com/openjdk-mirror/jdk7u-jdk/blob/master/make/docs/CORE_PKGS.gmk

# CORE_PKGS is the list of packages that form the 
# Java API Specification. 
# 
### ***IMPORTANT NOTE*** 
### There is also a "REGEXP" variable in the docs/makefile that 
### determines which table the packages go in on the main page. 
### Currently, there is only table ("Platform Packages") and 
### everything goes in it, so REGEXP is "*". But if that policy 
### changes, packages added will need to be reflected in that 
### list of wildcard expressions, as well. 
### 
CORE_PKGS =          \ 
    java.applet         \ 
    java.awt          \ 
    java.awt.color         \ 
    java.awt.datatransfer       \ 
    java.awt.dnd         \ 
    java.awt.event         \ 
    java.awt.font         \ 
    java.awt.geom         \ 
    java.awt.im         \ 
    java.awt.im.spi        \ 
    java.awt.image         \ 
    java.awt.image.renderable      \ 
    java.awt.print         \ 
    java.beans          \ 
    java.beans.beancontext       \ 
    java.io          \ 
    java.lang          \ 
    java.lang.annotation       \ 
    java.lang.instrument       \ 
    java.lang.invoke        \ 
    java.lang.management       \ 
    java.lang.ref         \ 
    java.lang.reflect        \ 
    java.math          \ 
    java.net          \ 
    java.nio          \ 
    java.nio.channels        \ 
    java.nio.channels.spi       \ 
    java.nio.charset        \ 
    java.nio.charset.spi       \ 
    java.nio.file     \ 
    java.nio.file.attribute   \ 
    java.nio.file.spi    \ 
    java.rmi          \ 
    java.rmi.activation       \ 
    java.rmi.dgc         \ 
    java.rmi.registry        \ 
    java.rmi.server        \ 
    java.security         \ 
    java.security.acl        \ 
    java.security.cert        \ 
    java.security.interfaces      \ 
    java.security.spec        \ 
    java.sql          \ 
    java.text          \ 
    java.text.spi         \ 
    java.util          \ 
    java.util.concurrent       \ 
    java.util.concurrent.atomic     \ 
    java.util.concurrent.locks      \ 
    java.util.jar         \ 
    java.util.logging        \ 
    java.util.prefs        \ 
    java.util.regex        \ 
    java.util.spi         \ 
    java.util.zip         \ 
    javax.accessibility       \ 
    javax.activation        \ 
    javax.activity         \ 
    javax.annotation        \ 
    javax.annotation.processing     \ 
    javax.crypto         \ 
    javax.crypto.interfaces      \ 
    javax.crypto.spec        \ 
    javax.imageio         \ 
    javax.imageio.event       \ 
    javax.imageio.metadata       \ 
    javax.imageio.plugins.jpeg      \ 
    javax.imageio.plugins.bmp      \ 
    javax.imageio.spi        \ 
    javax.imageio.stream       \ 
    javax.jws          \ 
    javax.jws.soap         \ 
    javax.lang.model        \ 
    javax.lang.model.element      \ 
    javax.lang.model.type       \ 
    javax.lang.model.util       \ 
    javax.management        \ 
    javax.management.loading      \ 
    javax.management.monitor      \ 
    javax.management.relation      \ 
    javax.management.openmbean      \ 
    javax.management.timer       \ 
    javax.management.modelmbean     \ 
    javax.management.remote      \ 
    javax.management.remote.rmi     \ 
    javax.naming         \ 
    javax.naming.directory       \ 
    javax.naming.event        \ 
    javax.naming.ldap        \ 
    javax.naming.spi        \ 
    javax.net          \ 
    javax.net.ssl         \ 
    javax.print         \ 
    javax.print.attribute       \ 
    javax.print.attribute.standard     \ 
    javax.print.event        \ 
    javax.rmi          \ 
    javax.rmi.CORBA        \ 
    javax.rmi.ssl         \ 
    javax.script         \ 
    javax.security.auth       \ 
    javax.security.auth.callback     \ 
    javax.security.auth.kerberos     \ 
    javax.security.auth.login      \ 
    javax.security.auth.spi      \ 
    javax.security.auth.x500      \ 
    javax.security.cert       \ 
    javax.security.sasl       \ 
    javax.sound.sampled       \ 
    javax.sound.sampled.spi      \ 
    javax.sound.midi        \ 
    javax.sound.midi.spi       \ 
    javax.sql          \ 
    javax.sql.rowset        \ 
    javax.sql.rowset.serial      \ 
    javax.sql.rowset.spi       \ 
    javax.swing         \ 
    javax.swing.border        \ 
    javax.swing.colorchooser      \ 
    javax.swing.filechooser      \ 
    javax.swing.event        \ 
    javax.swing.table        \ 
    javax.swing.text        \ 
    javax.swing.text.html       \ 
    javax.swing.text.html.parser     \ 
    javax.swing.text.rtf       \ 
    javax.swing.tree        \ 
    javax.swing.undo        \ 
    javax.swing.plaf        \ 
    javax.swing.plaf.basic       \ 
    javax.swing.plaf.metal       \ 
    javax.swing.plaf.multi       \ 
    javax.swing.plaf.nimbus      \ 
    javax.swing.plaf.synth       \ 
    javax.tools         \ 
    javax.transaction        \ 
    javax.transaction.xa       \ 
    javax.xml.parsers        \ 
    javax.xml.bind         \ 
    javax.xml.bind.annotation      \ 
    javax.xml.bind.annotation.adapters    \ 
    javax.xml.bind.attachment      \ 
    javax.xml.bind.helpers       \ 
    javax.xml.bind.util       \ 
    javax.xml.soap         \ 
    javax.xml.ws         \ 
    javax.xml.ws.handler       \ 
    javax.xml.ws.handler.soap      \ 
    javax.xml.ws.http        \ 
    javax.xml.ws.soap        \ 
    javax.xml.ws.spi        \ 
    javax.xml.ws.spi.http       \ 
    javax.xml.ws.wsaddressing      \ 
    javax.xml.transform       \ 
    javax.xml.transform.sax      \ 
    javax.xml.transform.dom      \ 
    javax.xml.transform.stax      \ 
    javax.xml.transform.stream      \ 
    javax.xml          \ 
    javax.xml.crypto    \ 
    javax.xml.crypto.dom    \ 
    javax.xml.crypto.dsig    \ 
    javax.xml.crypto.dsig.dom   \ 
    javax.xml.crypto.dsig.keyinfo   \ 
    javax.xml.crypto.dsig.spec    \ 
    javax.xml.datatype        \ 
    javax.xml.validation       \ 
    javax.xml.namespace       \ 
    javax.xml.xpath        \ 
    javax.xml.stream        \ 
    javax.xml.stream.events      \ 
    javax.xml.stream.util       \ 
    org.ietf.jgss         \ 
    org.omg.CORBA         \ 
    org.omg.CORBA.DynAnyPackage     \ 
    org.omg.CORBA.ORBPackage      \ 
    org.omg.CORBA.TypeCodePackage     \ 
    org.omg.stub.java.rmi       \ 
    org.omg.CORBA.portable       \ 
    org.omg.CORBA_2_3        \ 
    org.omg.CORBA_2_3.portable      \ 
    org.omg.CosNaming        \ 
    org.omg.CosNaming.NamingContextExtPackage  \ 
    org.omg.CosNaming.NamingContextPackage   \ 
    org.omg.SendingContext       \ 
    org.omg.PortableServer       \ 
    org.omg.PortableServer.CurrentPackage   \ 
    org.omg.PortableServer.POAPackage    \ 
    org.omg.PortableServer.POAManagerPackage  \ 
    org.omg.PortableServer.ServantLocatorPackage \ 
    org.omg.PortableServer.portable    \ 
    org.omg.PortableInterceptor     \ 
    org.omg.PortableInterceptor.ORBInitInfoPackage \ 
    org.omg.Messaging        \ 
    org.omg.IOP         \ 
    org.omg.IOP.CodecFactoryPackage    \ 
    org.omg.IOP.CodecPackage      \ 
    org.omg.Dynamic        \ 
    org.omg.DynamicAny        \ 
    org.omg.DynamicAny.DynAnyPackage    \ 
    org.omg.DynamicAny.DynAnyFactoryPackage  \ 
    org.w3c.dom         \ 
    org.w3c.dom.events        \ 
    org.w3c.dom.bootstrap       \ 
    org.w3c.dom.ls         \ 
    org.xml.sax         \ 
    org.xml.sax.ext        \ 
    org.xml.sax.helpers 
0

Jeśli analizujesz pliki .class, możesz użyć Javassist http://www.csg.ci.i.u-tokyo.ac.jp/~chiba/javassist/, aby uzyskać listę wszystkich nazw klas przywoływanych przez klasę. Następnie możesz analizować pakiety klas. Klasy obejmujące publiczny interfejs API Java znajdują się w podpakietach pakietów java, javax i org.omg, org.w3c.dom, org.xml.sax

+0

Uzyskanie listy używanych klas nie jest tym, gdzie utknąłem. Jest to wiedza na pewno, czy dany pakiet/klasa/metoda jest przenośna w różnych implementacjach. Nie jestem w 100% pewien, że wszystkie klasy java/javax w rt.jar są zdefiniowane w publicznym interfejsie API i chciałbym to wiedzieć. Również niektóre klasy EE zaczynają się od tych samych nazw i chciałbym zgłosić, że kod używa 100% przenośnych * SE * klas. – Chase

+0

OK. Jeśli clazz.getClassLoader() == null jest z rt.jar –

+0

Jak to pomaga? – Chase

Powiązane problemy