From Fedora Project Wiki
Line 21: Line 21:


====How do you intend to implement your proposal====
====How do you intend to implement your proposal====
I will write a Java application that will:
1. Parse java .class files and generate lists of methods defined in classes (exports) and called by the code (imports). Parsing will be done using some third-party library, possibly it will be [[http://commons.apache.org/bcel/]]. .class files will be read using standard java I/O stream classes, so loading from archive, archive-in-archive, etc. will be possible.
2. Record exports in some database that would keep track of library versions.
3. Try to "statically link" these libraries and report errors if occurred.
This also can be implemented as Ant tasks.


====Final deliverable of the proposal at the end of the period====
====Final deliverable of the proposal at the end of the period====

Revision as of 07:01, 3 April 2012

Java API changes checker

Contact Information

Why do you want to work with the Fedora Project?

1. I want to improve OS which I use every day. First of all, it will make my life easier.

2. I found a proposal that is very interesting to implement: Summer_coding_ideas_for_2012#Java_API.2FABI_changes_checker

3. I want to participate in development of a big real-world project. I didn't have such experience yet.

Do you have any past involvement with the Fedora project or with any another open source project as a contributor (if possible please add some references as well)?

1. No, this is my first time.

Did you participate with the past GSoC programs, if so which years, which organizations?

1. Last year I proposed an improvement to SDL([1]), but they didn't find mentor for me.

Will you continue contributing/ supporting the Fedora project after the GSoC 2012 program, if yes, which team(s)/area(s), you are interested with?

1. Of course I will continue improving project I'm done.

2. I'm interested in improving laptop support. I got a new laptop, and found that can't use some hardware under Linux.

3. I use Eclipse as my main IDE, so maybe I'll contribute to Fedora Eclipse project.

Why should we choose you over the other applicants?

1. I propose a project that I really want to implement, so I won't give up on my project after month or two.

2. I have experience in writing code in C++, Java, C#. Basically it is experience gained from courses in university. Part of my code is hosted on github: [2]

3. I can learn new things very fast, if these things are related to programming. So if it will be needed to use some library/tool unknown to me, I will be able to learn how to use it and finish project.

4. I have experience of participating in ACM ICPC and other coding competitions, so I know how to test and optimize code.

Proposal Description

Overview

Original idea: Summer_coding_ideas_for_2012#Java_API.2FABI_changes_checker

I will create a tool that takes a set of .jar archives (and/or .class files) and tries to resolve dependencies between them like C/C++ linker do. Checking if new version of library don't break anything will be easy - just replace the library with new version and check dependencies again. Of course, if dependency check fails, this tool must output all information that possibly can help. And, of course, all dependency information must be generated automatically from .jars/.class files. As RPM is just a specially structured archive, it will be easy to read .jars/classes from it. Old dependency information must be kept somewhere, so error reports would contain not only message "Class/method xxx required by yyy not found", but also "Xxx was provided by zzz".

The need you believe it fulfills

Typically Java searches for a class/method at runtime when it is requested by currently executing code. If you launched a java application and it didn't report any errors at startup, you can't be sure that the application wouldn't crash because of unsatisfied dependencies later.

Proposed tool will be able to ensure that all dependencies can be resolved without launching, or even installing/unpacking java applications. It will enable easier and safer updates of java applications/libraries, and will make java package maintainers' life easier.

Any relevant experience you have

I have much experience of writing code in Java, because in my university java is used for more than half of all programming courses. Also, I am familiar with packaging system. I didn't create a new package, but at least I am able to add a patch or rebuild kernel package with my own configuration.

How do you intend to implement your proposal

I will write a Java application that will:

1. Parse java .class files and generate lists of methods defined in classes (exports) and called by the code (imports). Parsing will be done using some third-party library, possibly it will be [[3]]. .class files will be read using standard java I/O stream classes, so loading from archive, archive-in-archive, etc. will be possible.

2. Record exports in some database that would keep track of library versions.

3. Try to "statically link" these libraries and report errors if occurred.

This also can be implemented as Ant tasks.

Final deliverable of the proposal at the end of the period

A rough timeline for your progress

Have you communicated with a potential mentor? If so, who?

No, not yet. I will email him a link to this page as soon as I finish writing it.