Skip to content

Fix for inner class inside interfaces#29

Merged
fabio-franco merged 4 commits intomainfrom
Fix_for_innerclass_inside_interface
Jan 26, 2024
Merged

Fix for inner class inside interfaces#29
fabio-franco merged 4 commits intomainfrom
Fix_for_innerclass_inside_interface

Conversation

@fabio-franco
Copy link
Copy Markdown
Collaborator

@fabio-franco fabio-franco commented Dec 15, 2023

** Important: this is a temp fix, and it does not include fixes for refTable.json, just symTable.json.

This code was tested with defaultapp modified with some classes inside Interfaces. In some cases the inner class is implementing the interface, in other cases not, as this one:

package com.ibm.defaultapplication;

public interface TestInterface2 
{
    void printM2M();
    void printM2M(String value);

    public static class TestPrint
    {
        public void printM2M() {
            System.out.println("***** Mono2Micro print test *****");
        }
        
        public void printM2M(String value) {
            System.out.println("***** Mono2Micro print test "+value+" *****");
        }
    }
}

When running with the finest log enabled, it shows the inner class has been skipped:

At least one of these files is in directory /Users/fabiofranco/Downloads/defaultapp/analysis/test-fix: "symTable.json", "instrumenter-config.json", or "refTable.json". Do you want to overwrite them? Enter 1 for Yes or 2 for No: 1
All packages in the application will be analyzed
Starting Minerva Binary Analyzer
Analyzing archive /Users/fabiofranco/Downloads/defaultapp/DefaultApplication.ear.
Analyzing class com.ibm.defaultapplication.SnoopServlet.
Analyzing class com.ibm.defaultapplication.TestInterface$TestPrint.
Analyzing class com.ibm.defaultapplication.IncrementAction.
Analyzing class com.ibm.defaultapplication.Increment.
Analyzing class com.ibm.defaultapplication.HitCount.
Analyzing class com.ibm.defaultapplication.TestInterface2$TestPrint.
Analyzing class com.ibm.defaultapplication.IncrementSSB.
Analyzing class com.ibm.defaultapplication.TestInterface3$TestPrint.
Analyzing class com.ibm.defaultapplication.TestInterface4$TestPrint.
[WARNING] The Class com.ibm.defaultapplication.TestInterface.$TestPrint is defined inside an interface and will not be analyzed.
[WARNING] The Class com.ibm.defaultapplication.TestInterface2.$TestPrint is defined inside an interface and will not be analyzed.
[WARNING] The Class com.ibm.defaultapplication.TestInterface3.$TestPrint is defined inside an interface and will not be analyzed.
[WARNING] The Class com.ibm.defaultapplication.TestInterface4.$TestPrint is defined inside an interface and will not be analyzed.
Writing file /Users/fabiofranco/Downloads/defaultapp/analysis/test-fix/symTable.json.
Writing file /Users/fabiofranco/Downloads/defaultapp/analysis/test-fix/refTable.json.
Writing file /Users/fabiofranco/Downloads/defaultapp/analysis/test-fix/instrumenter-config.json.
******************************
COMPLETED
******************************

Next steps: Collect more data by running use cases on your instrumented application with the "mono2micro usecase" command. Read this section of the Mono2Micro documentation for more details: https://www.ibm.com/docs/SS7H9Y/doc/m2m_dct_bininst.html

@fabio-franco fabio-franco self-assigned this Dec 15, 2023
@fabio-franco
Copy link
Copy Markdown
Collaborator Author

Just tested the fix by using the generated tables to collect use case logs and run aipl. In the logs, I can see that the inner classes inside the interfaces were not instrumented, that is:

[19/12/23 13:51:54:672 EST] 0000005c SystemErr                                                    R |v2.0.0r44|1703011914672,[92],Entering project/src/main/java/com/ibm/defaultapplication/HitCount.java::com.ibm.defaultapplication.HitCount::service(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)|
[19/12/23 13:51:54:673 EST] 0000005c SystemErr                                                    R |v2.0.0r44|1703011914673,[92],Entering project/src/main/java/com/ibm/defaultapplication/HitCount.java::com.ibm.defaultapplication.HitCount::incrementEJB(java.lang.String)|
[19/12/23 13:51:54:673 EST] 0000005c SystemErr                                                    R |v2.0.0r44|1703011914673,[92],Entering project/src/main/java/com/ibm/defaultapplication/IncrementAction.java::com.ibm.defaultapplication.IncrementAction::increment()|
[19/12/23 13:51:54:673 EST] 0000005c SystemOut                                                    O ***** Mono2Micro print test - TestInterface *****
[19/12/23 13:51:54:674 EST] 0000005c SystemOut                                                    O ***** Mono2Micro print test - TestInterface - com.ibm.defaultapplication.EJSLocalNSLIncrementEJB_f974993c@4ab572c9 *****
[19/12/23 13:51:54:674 EST] 0000005c SystemOut                                                    O ***** Mono2Micro print test - TestInterface2 *****
[19/12/23 13:51:54:674 EST] 0000005c SystemOut                                                    O ***** Mono2Micro print test - TestInterface2 - com.ibm.defaultapplication.EJSLocalNSLIncrementEJB_f974993c@4ab572c9 *****
[19/12/23 13:51:54:674 EST] 0000005c SystemOut                                                    O ***** Mono2Micro print test - TestInterface3 *****
[19/12/23 13:51:54:674 EST] 0000005c SystemOut                                                    O ***** Mono2Micro print test - TestInterface3 - com.ibm.defaultapplication.EJSLocalNSLIncrementEJB_f974993c@4ab572c9 *****
[19/12/23 13:51:54:674 EST] 0000005c SystemOut                                                    O ***** Mono2Micro print test - TestInterface4 *****
[19/12/23 13:51:54:674 EST] 0000005c SystemOut                                                    O ***** Mono2Micro print test - TestInterface4 - com.ibm.defaultapplication.EJSLocalNSLIncrementEJB_f974993c@4ab572c9 *****
[19/12/23 13:51:54:676 EST] 0000005c SystemErr                                                    R |v2.0.0r44|1703011914676,[92],Entering project/src/main/java/com/ibm/defaultapplication/IncrementSSB.java::com.ibm.defaultapplication.IncrementSSB::IncrementSSB()|
[19/12/23 13:51:54:676 EST] 0000005c SystemErr                                                    R |v2.0.0r44|1703011914676,[92],Exiting project/src/main/java/com/ibm/defaultapplication/IncrementSSB.java::com.ibm.defaultapplication.IncrementSSB::IncrementSSB()|
[19/12/23 13:51:54:677 EST] 0000005c SystemErr                                                    R |v2.0.0r44|1703011914677,[92],Entering project/src/main/java/com/ibm/defaultapplication/IncrementSSB.java::com.ibm.defaultapplication.IncrementSSB::increment()|

Then, running the aipl, I got a successful execution.

@fabio-franco
Copy link
Copy Markdown
Collaborator Author

Important: we need also discuss what are the impacts of the fix to callgraph generation and utility discovery.

Copy link
Copy Markdown
Collaborator

@lentheivendra lentheivendra left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@fabio-franco fabio-franco merged commit 6dd6c5d into main Jan 26, 2024
@fabio-franco fabio-franco deleted the Fix_for_innerclass_inside_interface branch January 26, 2024 14:24
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants