Hello,
I have this apk and try to extract its callgraph. However, I get the following callgraph edges for class "". It says there should be an edge from "<dummyMainClass: com.ichi2.anki.StudyOptionsFragment dummyMainMethod_com_ichi2_anki_StudyOptionsFragment(android.content.Intent,android.app.Activity)" to method "<com.ichi2.anki.StudyOptionsFragment: void ()> " whilst the source function doesn't exist in the callgraph. Why this happens?
Part of the callgraph is given below:
Class 292: com.ichi2.anki.StudyOptionsFragment------- Method: <com.ichi2.anki.StudyOptionsFragment: void ()> -------
Coming edge is: <dummyMainClass: com.ichi2.anki.StudyOptionsFragment dummyMainMethod_com_ichi2_anki_StudyOptionsFragment(android.content.Intent,android.app.Activity)>Coming edge is: <dummyMainClass: com.ichi2.anki.StudyOptionsActivity dummyMainMethod_com_ichi2_anki_StudyOptionsActivity(android.content.Intent)>Coming edge is: <dummyMainClass: com.ichi2.anki.StudyOptionsActivity dummyMainMethod_com_ichi2_anki_StudyOptionsActivity(android.content.Intent)>Coming edge is: <dummyMainClass: com.ichi2.anki.MyAccount dummyMainMethod_com_ichi2_anki_MyAccount(android.content.Intent)>Coming edge is: <dummyMainClass: com.ichi2.anki.MyAccount dummyMainMethod_com_ichi2_anki_MyAccount(android.content.Intent)>Coming edge is: <com.ichi2.anki.StudyOptionsFragment: com.ichi2.anki.StudyOptionsFragment newInstance(boolean)>Coming edge is: <dummyMainClass: com.ichi2.anki.DeckPicker dummyMainMethod_com_ichi2_anki_DeckPicker(android.content.Intent)>Coming edge is: <dummyMainClass: com.ichi2.anki.DeckPicker dummyMainMethod_com_ichi2_anki_DeckPicker(android.content.Intent)>Coming edge is: <dummyMainClass: com.ichi2.anki.CardBrowser dummyMainMethod_com_ichi2_anki_CardBrowser(android.content.Intent)>Coming edge is: <dummyMainClass: com.ichi2.anki.ModelBrowser dummyMainMethod_com_ichi2_anki_ModelBrowser(android.content.Intent)>Coming edge is: <dummyMainClass: com.ichi2.anki.ModelFieldEditor dummyMainMethod_com_ichi2_anki_ModelFieldEditor(android.content.Intent)>Coming edge is: <dummyMainClass: com.ichi2.anki.NoteEditor dummyMainMethod_com_ichi2_anki_NoteEditor(android.content.Intent)>Coming edge is: <dummyMainClass: com.ichi2.anki.Reviewer dummyMainMethod_com_ichi2_anki_Reviewer(android.content.Intent)>Outgoing edge is: <com.ichi2.anki.StudyOptionsFragment$1: void (com.ichi2.anki.StudyOptionsFragment)>
Outgoing edge is: <android.support.v4.app.Fragment: void ()>
Method , #IncomeEdges: 13, #OutgoingEdges: 2
------- Method: <com.ichi2.anki.StudyOptionsFragment: int access$000(com.ichi2.anki.StudyOptionsFragment)> -------
Coming edge is: <com.ichi2.anki.StudyOptionsFragment$1: void onClick(android.view.View)> Method access$000, #IncomeEdges: 1, #OutgoingEdges: 0
------- Method: <com.ichi2.anki.StudyOptionsFragment: int access$002(com.ichi2.anki.StudyOptionsFragment,int)> -------
Coming edge is: <com.ichi2.anki.StudyOptionsFragment$3: void onPostExecute(com.ichi2.async.DeckTask$TaskData)>Coming edge is: <com.ichi2.anki.StudyOptionsFragment$3: void onPostExecute(com.ichi2.async.DeckTask$TaskData)>Coming edge is: <com.ichi2.anki.StudyOptionsFragment$3: void onPostExecute(com.ichi2.async.DeckTask$TaskData)> Method access$002, #IncomeEdges: 3, #OutgoingEdges: 0
------- Method: <com.ichi2.anki.StudyOptionsFragment: void access$100(com.ichi2.anki.StudyOptionsFragment)> -------
Coming edge is: <com.ichi2.anki.StudyOptionsFragment$1: void onClick(android.view.View)>Outgoing edge is: <com.ichi2.anki.StudyOptionsFragment: void openReviewer()>
Method access$100, #IncomeEdges: 1, #OutgoingEdges: 1
------- Method: <com.ichi2.anki.StudyOptionsFragment: android.widget.TextView access$1000(com.ichi2.anki.StudyOptionsFragment)> -------
Coming edge is: <com.ichi2.anki.StudyOptionsFragment$3: void onPostExecute(com.ichi2.async.DeckTask$TaskData)>Coming edge is: <com.ichi2.anki.StudyOptionsFragment$3: void onPostExecute(com.ichi2.async.DeckTask$TaskData)>Coming edge is: <com.ichi2.anki.StudyOptionsFragment$3: void onPostExecute(com.ichi2.async.DeckTask$TaskData)>Coming edge is: <com.ichi2.anki.StudyOptionsFragment$3: void onPostExecute(com.ichi2.async.DeckTask$TaskData)>Coming edge is: <com.ichi2.anki.StudyOptionsFragment$3: void onPostExecute(com.ichi2.async.DeckTask$TaskData)> Method access$1000, #IncomeEdges: 5, #OutgoingEdges: 0
------- Method: <com.ichi2.anki.StudyOptionsFragment: android.widget.Button access$1100(com.ichi2.anki.StudyOptionsFragment)> -------
Coming edge is: <com.ichi2.anki.StudyOptionsFragment$3: void onPostExecute(com.ichi2.async.DeckTask$TaskData)>Coming edge is: <com.ichi2.anki.StudyOptionsFragment$3: void onPostExecute(com.ichi2.async.DeckTask$TaskData)>Coming edge is: <com.ichi2.anki.StudyOptionsFragment$3: void onPostExecute(com.ichi2.async.DeckTask$TaskData)>Coming edge is: <com.ichi2.anki.StudyOptionsFragment$3: void onPostExecute(com.ichi2.async.DeckTask$TaskData)>Coming edge is: <com.ichi2.anki.StudyOptionsFragment$3: void onPostExecute(com.ichi2.async.DeckTask$TaskData)>Coming edge is: <com.ichi2.anki.StudyOptionsFragment$3: void onPostExecute(com.ichi2.async.DeckTask$TaskData)> Method access$1100, #IncomeEdges: 6, #OutgoingEdges: 0
------- Method: <com.ichi2.anki.StudyOptionsFragment: android.widget.TextView access$1200(com.ichi2.anki.StudyOptionsFragment)> -------
Coming edge is: <com.ichi2.anki.StudyOptionsFragment$3: void onPostExecute(com.ichi2.async.DeckTask$TaskData)>Coming edge is: <com.ichi2.anki.StudyOptionsFragment$3: void onPostExecute(com.ichi2.async.DeckTask$TaskData)>Coming edge is: <com.ichi2.anki.StudyOptionsFragment$3: void onPostExecute(com.ichi2.async.DeckTask$TaskData)> Method access$1200, #IncomeEdges: 3, #OutgoingEdges: 0
------- Method: <com.ichi2.anki.StudyOptionsFragment: android.widget.TextView access$1300(com.ichi2.anki.StudyOptionsFragment)> -------
Coming edge is: <com.ichi2.anki.StudyOptionsFragment$3: void onPostExecute(com.ichi2.async.DeckTask$TaskData)> Method access$1300, #IncomeEdges: 1, #OutgoingEdges: 0
------- Method: <com.ichi2.anki.StudyOptionsFragment: android.widget.TextView access$1400(com.ichi2.anki.StudyOptionsFragment)> -------
Coming edge is: <com.ichi2.anki.StudyOptionsFragment$3: void onPostExecute(com.ichi2.async.DeckTask$TaskData)> Method access$1400, #IncomeEdges: 1, #OutgoingEdges: 0
------- Method: <com.ichi2.anki.StudyOptionsFragment: android.widget.TextView access$1500(com.ichi2.anki.StudyOptionsFragment)> -------
Coming edge is: <com.ichi2.anki.StudyOptionsFragment$3: void onPostExecute(com.ichi2.async.DeckTask$TaskData)> Method access$1500, #IncomeEdges: 1, #OutgoingEdges: 0
------- Method: <com.ichi2.anki.StudyOptionsFragment: android.widget.TextView access$1600(com.ichi2.anki.StudyOptionsFragment)> -------
Coming edge is: <com.ichi2.anki.StudyOptionsFragment$3: void onPostExecute(com.ichi2.async.DeckTask$TaskData)>Coming edge is: <com.ichi2.anki.StudyOptionsFragment$3$1$1: void run()>Coming edge is: <com.ichi2.anki.StudyOptionsFragment$3$1: void run()>Coming edge is: <com.ichi2.anki.StudyOptionsFragment$3: void onPostExecute(com.ichi2.async.DeckTask$TaskData)> Method access$1600, #IncomeEdges: 4, #OutgoingEdges: 0
------- Method: <com.ichi2.anki.StudyOptionsFragment: java.lang.Thread access$1700(com.ichi2.anki.StudyOptionsFragment)> -------
Coming edge is: <com.ichi2.anki.StudyOptionsFragment$3: void onPostExecute(com.ichi2.async.DeckTask$TaskData)>Coming edge is: <com.ichi2.anki.StudyOptionsFragment$3: void onPostExecute(com.ichi2.async.DeckTask$TaskData)>Coming edge is: <com.ichi2.anki.StudyOptionsFragment$3: void onPostExecute(com.ichi2.async.DeckTask$TaskData)> Method access$1700, #IncomeEdges: 3, #OutgoingEdges: 0
------- Method: <com.ichi2.anki.StudyOptionsFragment: java.lang.Thread access$1702(com.ichi2.anki.StudyOptionsFragment,java.lang.Thread)> -------
Coming edge is: <com.ichi2.anki.StudyOptionsFragment$3: void onPostExecute(com.ichi2.async.DeckTask$TaskData)> Method access$1702, #IncomeEdges: 1, #OutgoingEdges: 0
------- Method: <com.ichi2.anki.StudyOptionsFragment: android.widget.TextView access$1800(com.ichi2.anki.StudyOptionsFragment)> -------
Coming edge is: <com.ichi2.anki.StudyOptionsFragment$3: void onPostExecute(com.ichi2.async.DeckTask$TaskData)> Method access$1800, #IncomeEdges: 1, #OutgoingEdges: 0
------- Method: <com.ichi2.anki.StudyOptionsFragment: android.widget.TextView access$1900(com.ichi2.anki.StudyOptionsFragment)> -------
Coming edge is: <com.ichi2.anki.StudyOptionsFragment$3: void onPostExecute(com.ichi2.async.DeckTask$TaskData)>Coming edge is: <com.ichi2.anki.StudyOptionsFragment$3: void onPostExecute(com.ichi2.async.DeckTask$TaskData)> Method access$1900, #IncomeEdges: 2, #OutgoingEdges: 0
------- Method: <com.ichi2.anki.StudyOptionsFragment: void access$200(com.ichi2.anki.StudyOptionsFragment)> -------
Coming edge is: <com.ichi2.anki.StudyOptionsFragment$1: void onClick(android.view.View)>Outgoing edge is: <com.ichi2.anki.StudyOptionsFragment: void showCustomStudyContextMenu()>
Method access$200, #IncomeEdges: 1, #OutgoingEdges: 1
------- Method: <com.ichi2.anki.StudyOptionsFragment: boolean access$2000(com.ichi2.anki.StudyOptionsFragment)> -------
Coming edge is: <com.ichi2.anki.StudyOptionsFragment$3: void onPostExecute(com.ichi2.async.DeckTask$TaskData)> Method access$2000, #IncomeEdges: 1, #OutgoingEdges: 0
------- Method: <com.ichi2.anki.StudyOptionsFragment: void access$300(com.ichi2.anki.StudyOptionsFragment)> -------
Coming edge is: <com.ichi2.anki.StudyOptionsFragment$3: void onPostExecute(com.ichi2.async.DeckTask$TaskData)>Outgoing edge is: <com.ichi2.anki.StudyOptionsFragment: void dismissProgressDialog()>
Method access$300, #IncomeEdges: 1, #OutgoingEdges: 1
------- Method: <com.ichi2.anki.StudyOptionsFragment: void access$400(com.ichi2.anki.StudyOptionsFragment)> -------
Coming edge is: <com.ichi2.anki.StudyOptionsFragment$3: void onPostExecute(com.ichi2.async.DeckTask$TaskData)>Outgoing edge is: <com.ichi2.anki.StudyOptionsFragment: void initAllContentViews()>
Method access$400, #IncomeEdges: 1, #OutgoingEdges: 1
------- Method: <com.ichi2.anki.StudyOptionsFragment: com.ichi2.libanki.Collection access$500(com.ichi2.anki.StudyOptionsFragment)> -------
Coming edge is: <com.ichi2.anki.StudyOptionsFragment$3: void onPostExecute(com.ichi2.async.DeckTask$TaskData)>Coming edge is: <com.ichi2.anki.StudyOptionsFragment$3$1: void run()>Coming edge is: <com.ichi2.anki.StudyOptionsFragment$3: void onPostExecute(com.ichi2.async.DeckTask$TaskData)>Coming edge is: <com.ichi2.anki.StudyOptionsFragment$3: void onPostExecute(com.ichi2.async.DeckTask$TaskData)>Outgoing edge is: <com.ichi2.anki.StudyOptionsFragment: com.ichi2.libanki.Collection getCol()>
Method access$500, #IncomeEdges: 4, #OutgoingEdges: 1
------- Method: <com.ichi2.anki.StudyOptionsFragment: android.widget.TextView access$600(com.ichi2.anki.StudyOptionsFragment)> -------
Coming edge is: <com.ichi2.anki.StudyOptionsFragment$3: void onPostExecute(com.ichi2.async.DeckTask$TaskData)> Method access$600, #IncomeEdges: 1, #OutgoingEdges: 0
------- Method: <com.ichi2.anki.StudyOptionsFragment: boolean access$700(com.ichi2.anki.StudyOptionsFragment)> -------
Coming edge is: <com.ichi2.anki.StudyOptionsFragment$3: void onPostExecute(com.ichi2.async.DeckTask$TaskData)>Coming edge is: <com.ichi2.anki.StudyOptionsFragment$3: void onPostExecute(com.ichi2.async.DeckTask$TaskData)> Method access$700, #IncomeEdges: 2, #OutgoingEdges: 0
------- Method: <com.ichi2.anki.StudyOptionsFragment: boolean access$702(com.ichi2.anki.StudyOptionsFragment,boolean)> -------
Coming edge is: <com.ichi2.anki.StudyOptionsFragment$3: void onPostExecute(com.ichi2.async.DeckTask$TaskData)> Method access$702, #IncomeEdges: 1, #OutgoingEdges: 0
------- Method: <com.ichi2.anki.StudyOptionsFragment: void access$800(com.ichi2.anki.StudyOptionsFragment,boolean)> -------
Coming edge is: <com.ichi2.anki.StudyOptionsFragment$3: void onPostExecute(com.ichi2.async.DeckTask$TaskData)>Outgoing edge is: <com.ichi2.anki.StudyOptionsFragment: void openFilteredDeckOptions(boolean)>
Method access$800, #IncomeEdges: 1, #OutgoingEdges: 1
------- Method: <com.ichi2.anki.StudyOptionsFragment: android.view.View access$900(com.ichi2.anki.StudyOptionsFragment)> -------
Coming edge is: <com.ichi2.anki.StudyOptionsFragment$3: void onPostExecute(com.ichi2.async.DeckTask$TaskData)>Coming edge is: <com.ichi2.anki.StudyOptionsFragment$3: void onPostExecute(com.ichi2.async.DeckTask$TaskData)>Coming edge is: <com.ichi2.anki.StudyOptionsFragment$3: void onPostExecute(com.ichi2.async.DeckTask$TaskData)> Method access$900, #IncomeEdges: 3, #OutgoingEdges: 0
------- Method: <com.ichi2.anki.StudyOptionsFragment: void animateLeft()> -------
Coming edge is: <com.ichi2.anki.StudyOptionsFragment: void openReviewer()>Outgoing edge is: <com.ichi2.anim.ActivityTransitionAnimation: void ()>
Outgoing edge is: <android.support.v4.app.Fragment: android.support.v4.app.FragmentActivity getActivity()>
Outgoing edge is: <com.ichi2.anim.ActivityTransitionAnimation: void slide(android.app.Activity,int)>
Method animateLeft, #IncomeEdges: 1, #OutgoingEdges: 3
------- Method: <com.ichi2.anki.StudyOptionsFragment: void closeStudyOptions(int)> -------
Coming edge is: <com.ichi2.anki.StudyOptionsFragment: void onActivityResult(int,int,android.content.Intent)>Outgoing edge is: <com.ichi2.anim.ActivityTransitionAnimation: void ()>
Outgoing edge is: <android.support.v4.app.Fragment: android.support.v4.app.FragmentActivity getActivity()>
Outgoing edge is: <timber.log.Timber: void ()>
Outgoing edge is: <com.ichi2.anim.ActivityTransitionAnimation: void slide(android.app.Activity,int)>
Outgoing edge is: <timber.log.Timber: void e(java.lang.String,java.lang.Object[])>
Method closeStudyOptions, #IncomeEdges: 1, #OutgoingEdges: 5
------- Method: <com.ichi2.anki.StudyOptionsFragment: void dismissProgressDialog()> -------
Coming edge is: <com.ichi2.anki.StudyOptionsFragment: void access$300(com.ichi2.anki.StudyOptionsFragment)>Outgoing edge is: <timber.log.Timber: void ()>
Outgoing edge is: <com.afollestad.materialdialogs.MaterialDialog: void dismiss()>
Outgoing edge is: <android.app.Dialog: boolean isShowing()>
Outgoing edge is: <java.lang.Throwable: java.lang.String getMessage()>
Outgoing edge is: <java.lang.StringBuilder: java.lang.String toString()>
Outgoing edge is: <java.lang.StringBuilder: java.lang.StringBuilder append(java.lang.String)>
Outgoing edge is: <java.lang.StringBuilder: java.lang.StringBuilder append(java.lang.String)>
Outgoing edge is: <java.lang.StringBuilder: void ()>
Outgoing edge is: <timber.log.Timber: void e(java.lang.String,java.lang.Object[])>
Hi, is there any update on this issue? can someone help me with it ?