2424 */
2525package com .oracle .graal .pointsto ;
2626
27+ import com .oracle .graal .pointsto .ObjectScanner .ScanReason ;
2728import com .oracle .graal .pointsto .flow .ArrayElementsTypeFlow ;
2829import com .oracle .graal .pointsto .flow .FieldTypeFlow ;
2930import com .oracle .graal .pointsto .flow .context .object .AnalysisObject ;
@@ -42,35 +43,37 @@ public AnalysisObjectScanningObserver(BigBang bb) {
4243 }
4344
4445 @ Override
45- public void forRelocatedPointerFieldValue (JavaConstant receiver , AnalysisField field , JavaConstant fieldValue ) {
46+ public boolean forRelocatedPointerFieldValue (JavaConstant receiver , AnalysisField field , JavaConstant fieldValue , ScanReason reason ) {
4647 if (!field .isWritten ()) {
47- field .registerAsWritten (null );
48+ return field .registerAsWritten (null );
4849 }
50+ return false ;
4951 }
5052
5153 @ Override
52- public void forNullFieldValue (JavaConstant receiver , AnalysisField field ) {
54+ public boolean forNullFieldValue (JavaConstant receiver , AnalysisField field , ScanReason reason ) {
5355 FieldTypeFlow fieldTypeFlow = getFieldTypeFlow (field , receiver );
5456 if (!fieldTypeFlow .getState ().canBeNull ()) {
5557 /* Signal that the field can contain null. */
56- fieldTypeFlow .addState (getAnalysis (), TypeState .forNull ());
58+ return fieldTypeFlow .addState (getAnalysis (), TypeState .forNull ());
5759 }
60+ return false ;
5861 }
5962
6063 @ Override
61- public void forNonNullFieldValue (JavaConstant receiver , AnalysisField field , JavaConstant fieldValue ) {
64+ public boolean forNonNullFieldValue (JavaConstant receiver , AnalysisField field , JavaConstant fieldValue , ScanReason reason ) {
6265 PointsToAnalysis analysis = getAnalysis ();
6366 AnalysisType fieldType = analysis .getMetaAccess ().lookupJavaType (analysis .getSnippetReflectionProvider ().asObject (Object .class , fieldValue ).getClass ());
64- assert fieldType .isInstantiated () : fieldType ;
6567
6668 /* Add the constant value object to the field's type flow. */
6769 FieldTypeFlow fieldTypeFlow = getFieldTypeFlow (field , receiver );
6870 AnalysisObject constantObject = bb .analysisPolicy ().createConstantObject (analysis , fieldValue , fieldType );
6971 if (!fieldTypeFlow .getState ().containsObject (constantObject )) {
7072 /* Add the new constant to the field's flow state. */
7173 TypeState constantTypeState = TypeState .forNonNullObject (analysis , constantObject );
72- fieldTypeFlow .addState (analysis , constantTypeState );
74+ return fieldTypeFlow .addState (analysis , constantTypeState );
7375 }
76+ return false ;
7477 }
7578
7679 /**
@@ -94,25 +97,26 @@ private FieldTypeFlow getFieldTypeFlow(AnalysisField field, JavaConstant receive
9497 }
9598
9699 @ Override
97- public void forNullArrayElement (JavaConstant array , AnalysisType arrayType , int elementIndex ) {
100+ public boolean forNullArrayElement (JavaConstant array , AnalysisType arrayType , int elementIndex , ScanReason reason ) {
98101 ArrayElementsTypeFlow arrayObjElementsFlow = getArrayElementsFlow (array , arrayType );
99102 if (!arrayObjElementsFlow .getState ().canBeNull ()) {
100103 /* Signal that the constant array can contain null. */
101- arrayObjElementsFlow .addState (getAnalysis (), TypeState .forNull ());
104+ return arrayObjElementsFlow .addState (getAnalysis (), TypeState .forNull ());
102105 }
106+ return false ;
103107 }
104108
105109 @ Override
106- public void forNonNullArrayElement (JavaConstant array , AnalysisType arrayType , JavaConstant elementConstant , AnalysisType elementType , int elementIndex ) {
107- assert elementType .isInstantiated () : elementType ;
110+ public boolean forNonNullArrayElement (JavaConstant array , AnalysisType arrayType , JavaConstant elementConstant , AnalysisType elementType , int elementIndex , ScanReason reason ) {
108111 ArrayElementsTypeFlow arrayObjElementsFlow = getArrayElementsFlow (array , arrayType );
109112 PointsToAnalysis analysis = getAnalysis ();
110113 AnalysisObject constantObject = bb .analysisPolicy ().createConstantObject (analysis , elementConstant , elementType );
111114 if (!arrayObjElementsFlow .getState ().containsObject (constantObject )) {
112115 /* Add the constant element to the constant's array type flow. */
113116 TypeState elementTypeState = TypeState .forNonNullObject (analysis , constantObject );
114- arrayObjElementsFlow .addState (analysis , elementTypeState );
117+ return arrayObjElementsFlow .addState (analysis , elementTypeState );
115118 }
119+ return false ;
116120 }
117121
118122 /**
@@ -125,7 +129,7 @@ private ArrayElementsTypeFlow getArrayElementsFlow(JavaConstant array, AnalysisT
125129 }
126130
127131 @ Override
128- public void forScannedConstant (JavaConstant value , ObjectScanner . ScanReason reason ) {
132+ public void forScannedConstant (JavaConstant value , ScanReason reason ) {
129133 PointsToAnalysis analysis = getAnalysis ();
130134 Object valueObj = analysis .getSnippetReflectionProvider ().asObject (Object .class , value );
131135 AnalysisType type = bb .getMetaAccess ().lookupJavaType (valueObj .getClass ());
0 commit comments