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
Odpowiedz
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
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
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
OK. Jeśli clazz.getClassLoader() == null jest z rt.jar –
Jak to pomaga? – Chase
- 1. Czy null jest klasą w języku Java?
- 2. Dlaczego klasa Java jest klasą <T>?
- 3. niewłaściwa klasa wartości: klasa org.apache.hadoop.io.Text nie jest klasą org.apache.hadoop.io.IntWritable
- 4. Czy istnieje interfejs API czujnika Java SE?
- 5. Czy Java 7 SE obsługuje obsługę EJB?
- 6. Silna kryptografia Java SE dla Java 7?
- 7. Ustal, czy typ jest statyczny.
- 8. Jak sprawdzić, czy klasa Java jest abstrakcyjna?
- 9. Czy w Java jest klasa okręgu, jak klasa Rectangle
- 10. Co to jest klasa kierowcy? (Java)
- 11. Jak określić, czy typ jest klasą statyczną?
- 12. Jak ustalić, czy IType jest klasą abstrakcyjną?
- 13. czy można ustalić, czy obecną maszyną wirtualną jest Java SE, czy Dalvik?
- 14. Jaka jest struktura katalogu projektu dla samodzielnej aplikacji Java SE?
- 15. Czy klasa narzędziowa może być klasą modelu w strukturze MVC?
- 16. Dlaczego String jest klasą?
- 17. Konfiguracja metra jest niedostępna w języku Java SE 8
- 18. jsp: param z klasą Java
- 19. Otwórz w platformie Java (TM) SE binarny
- 20. Ustal, czy obiekt jest liczbą całkowitą
- 21. Ustal, czy data Oracle jest weekendem?
- 22. Ustal, czy widok jest na ekranie - Android
- 23. Ustal, czy znak jest liczbą lub literą
- 24. Ustal, czy podgląd jest widoczny w UIScrollView
- 25. Ustal, czy karta przeglądarki jest aktywna? - IE?
- 26. Ustal, czy pasek akcji jest podzielony
- 27. Ustal, czy ciąg znaków jest "pusty".
- 28. Klasa zamówienia powinna być klasą abstrakcyjną
- 29. Java se "wystąpił podczas inicjowania maszyny wirtualnej"
- 30. Jaka jest różnica między klasą Class.This a klasą Java w języku Java?
Javac generuje ostrzeżenie, gdy używam nie przenośnego API. Możesz tam zbadać. – assylias
Do wersji Java 9 z modułem, listę klas Java środowiska Oracle, listę klas OpenJDK. Przecięcie "powinno" być przenośne. –