class LBFieldValuesAnalysis extends FPCFAnalysis
Computes for each private field an approximation of the type of values stored in the field.
Basically, we perform an abstract interpretation of all methods that assign a value to the field to compute the type of the values stored in the field.
This analysis is deliberately optimized for performance and, given that we don't have precise
call-graph information and also don't track the origin of values, we can't track
the overall nullness property of the values stored in a field. E.g., even if we always
see that a field is only written in the constructor we still don't know if that happens w.r.t.
this
or some other instance and whether the field was actually read before that!
- Self Type
- LBFieldValuesAnalysis
- Source
- LBFieldValuesAnalysis.scala
- Note
This is a very, very shallow analysis and improvements w.r.t. the precision are easily imaginable.
,ADDITIONALLY, WE HAVE TO IGNORE THOSE FIELDS WHICH SEEMS TO BE ALWAYS NULL BECAUSE THESE FIELDS ARE OFTEN INITIALZED - AT RUNTIME - BY SOME CODE OUTSIDE THE SCOPE OF "PURE" JAVA BASED ANALYSES. E.G., WE IGNORE THE FOLLOWING FIELDS FROM JAVA 8:
- [BY NAME] java.util.concurrent.FutureTask{ runner:null // Originaltype: java.lang.Thread }
- [BY NAME] java.nio.channels.SelectionKey{ attachment:null // Originaltype: java.lang.Object }
- [BY SETTER] java.lang.System{ err:null // Originaltype: java.io.PrintStream }
- [BY SETTER] java.lang.System{ in:null // Originaltype: java.io.InputStream }
- [BY SETTER] java.lang.System{ out:null // Originaltype: java.io.PrintStream }
- [BY CONSTRUCTOR] java.net.InterfaceAddress{ address:null // Originaltype: java.net.InetAddress } [UPDATE BY NATIVE CODE...] sun.nio.ch.sctp.ResultContainer{ value:null // Originaltype: java.lang.Object } THE FOLLOWING FIELDS ARE "REALLY" NULL in JAVA 8 (1.8.0 - 1.8.0_25):
- [OK] java.util.TimeZone{ NO_TIMEZONE:null // Originaltype: java.util.TimeZone }
- [OK - DEPRECATED] java.security.SecureRandom{ digest:null // Originaltype: java.security.MessageDigest } The reason/purpose is not 100% clear:
- [OK] javax.swing.JList.AccessibleJList.AccessibleJListChild{ accessibleContext:null }
- [OK] javax.swing.JList.AccessibleJList.AccessibleJListChild{ component:null }
- [OK] com.sun.corba.se.impl.io.IIOPInputStream{ abortIOException:null }
- [OK] com.sun.corba.se.impl.orb.ORBImpl{ codeBaseIOR:null }
- [OK - ACCIDENTIALLY CREATED?] com.sun.org.apache.xpath.internal.jaxp.XPathImpl{ d:null }
- [OK - LEGACY CODE?] javax.swing.JPopupMenu{ margin:null }
- [OK - LEGACY CODE?] sun.audio.AudioDevice{ mixer:null }
- [OK - RESERVED FOR FUTURE USAGE] com.sun.corba.se.impl.corba.ServerRequestImpl{ _ctx:null }
- [OK - LEGACY CODE?] com.sun.java.swing.plaf.motif.MotifPopupMenuUI{ border:null }
- [OK - LEGACY CODE?] com.sun.media.sound.SoftSynthesizer{ testline:null }
- [OK - LEGACY CODE?] com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaLoader{ fSymbolTable:null }
- [OK - LEGACY CODE] com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl{ _piParams:null }
- [OK - RESERVED FOR FUTURE USAGE?] com.sun.org.apache.xml.internal.dtm.ref.DTMDefaultBase{ m_namespaceLists:null }
- [OK - LEGACY CODE?] sun.awt.motif.MFontConfiguration{ fontConfig:null }
- [OK - LEGACY CODE?] sun.print.PSStreamPrintJob{ reader:null }
- Alphabetic
- By Inheritance
- LBFieldValuesAnalysis
- FPCFAnalysis
- ProjectBasedAnalysis
- AnyRef
- Any
- Hide All
- Show All
- Public
- Protected
Type Members
- class FieldValuesAnalysisDomain extends CorrelationalDomain with TheProject with TheCode with DefaultSpecialDomainValuesBinding with ThrowAllPotentialExceptionsConfiguration with DefaultIntegerValues with DefaultTypeLevelLongValues with DefaultTypeLevelFloatValues with DefaultTypeLevelDoubleValues with TypeLevelPrimitiveValuesConversions with TypeLevelLongValuesShiftOperators with TypeLevelFieldAccessInstructions with TypeLevelInvokeInstructions with TypeLevelDynamicLoads with DefaultReferenceValuesBinding with DefaultHandlingOfMethodResults with IgnoreSynchronization with RefinedTypeLevelFieldAccessInstructions
The domain used for analyzing the values stored in a field.
The domain used for analyzing the values stored in a field.
One instance of this domain is used to analyze all methods of the respective class. Only after the analysis of all methods, the information returned by FieldValuesAnalysisDomain#fieldInformation is guaranteed to be correct.
Value Members
- final def !=(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
- final def ##: Int
- Definition Classes
- AnyRef → Any
- final def ==(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
- final def asInstanceOf[T0]: T0
- Definition Classes
- Any
- final def ch: ClassHierarchy
- Definition Classes
- ProjectBasedAnalysis
- implicit final def classHierarchy: ClassHierarchy
- Definition Classes
- ProjectBasedAnalysis
- def clone(): AnyRef
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.CloneNotSupportedException]) @native() @IntrinsicCandidate()
- final def eq(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
- def equals(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef → Any
- final val fieldAccessInformation: FieldAccessInformation
- final def getClass(): Class[_ <: AnyRef]
- Definition Classes
- AnyRef → Any
- Annotations
- @native() @IntrinsicCandidate()
- def hashCode(): Int
- Definition Classes
- AnyRef → Any
- Annotations
- @native() @IntrinsicCandidate()
- final def isInstanceOf[T0]: Boolean
- Definition Classes
- Any
- implicit final def logContext: LogContext
- Definition Classes
- ProjectBasedAnalysis
- final def ne(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
- final def notify(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native() @IntrinsicCandidate()
- final def notifyAll(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native() @IntrinsicCandidate()
- implicit final def p: SomeProject
- Definition Classes
- ProjectBasedAnalysis
- val project: SomeProject
- Definition Classes
- LBFieldValuesAnalysis → ProjectBasedAnalysis
- implicit final val propertyStore: PropertyStore
- Definition Classes
- FPCFAnalysis
- final def ps: PropertyStore
- Definition Classes
- FPCFAnalysis
- def relevantFieldsIterable(classFile: ClassFile): Iterable[Field]
Computes the set of the fields which are potentially refinable w.r.t.
Computes the set of the fields which are potentially refinable w.r.t. type information.
- final def synchronized[T0](arg0: => T0): T0
- Definition Classes
- AnyRef
- def toString(): String
- Definition Classes
- AnyRef → Any
- final def wait(arg0: Long, arg1: Int): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])
- final def wait(arg0: Long): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])
- final def wait(): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])
Deprecated Value Members
- def finalize(): Unit
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.Throwable]) @Deprecated
- Deprecated