I am trying to make a program that corrects me a certain Java class according to the input data type.
I was given a .java file that defines Animals, it has the following form:
Animals.java
public class Animal {
  Mammal mammal;
  Bird bird;
  Fish fish;
  ...
  
  class Mammal {
    Dog dog;
    Cat cat;
    Horse horse;
    ...
    class Dog {
      String name;
      String weight;
      void setWeight(String name){...}
      String getWeight() {...}
    }
    class Cat {
      String name;
      Double weight;
      void setWeight(Double name){...}
      Double getWeight() {...}
    }
    ...
  }
  class Bird {...}
  class Fish {...}
  ...
}
And text files containing:
a.getMammal().getDog().setWeight("50");
a.getMammal().getDog().setName("Fluffy");
a.getMammal().getCat().setWeight("25");
a.getMammal().getCat().setName("Kitty");
...
...
...
...
Since I have tons of text files with tons of lines in it, it is infeasible (manually) verifiying that the input parameter (always is a String) matches with the required datatype of the setter, and if not changing the class that matches the input parameter.
So I started searching for some tools to change a Java class (methods and attributes) programatically.
What I want to achive in pseudocode would be:
1) OPEN A TXT FILE
2) READ LINES
3) IF DATATYPE OF METHOD SIGNATURE != DATATYPE INPUT
4) THEN FIX .Java FILE
5) ELSE CONTINUE
I already have steps 1 - 3, I used Reflections library, but I don't know how to proceed to Step 4 (I don't even know if it is possible to modify a java file programmatically)
To clarify, an example:
lines.txt
----------------------------------------
1   a.getMammal().getDog().setWeight("50");
2   a.getMammal().getCat().setWeight("23");
----------------------------------------
open lines.txt
read line -> line = a.getMammal().getDog().setWeight("50");
get params type -> 
    methodType = String  (a.getMammal().getDog().setWeight(), the attribute weight in Dog is defined as String)
    inputType = String   ("50" is a String)
compare types -> Since both coincide, do nothing to Animals.java and read next line
read line -> a.getMammal().getCat().setWeight("23");
get params type -> 
    methodType = Double  (a.getMammal().getCat().setWeight(), the attribute weight in Cat is defined as Double)
    inputType = String   ("23" is a String)
compare types -> Since both  no coincide, fix and update Animals.java
end program
At the end of the execution, the file Animals.java would look like this:
Animals.java
public class Animal {
  Mammal mammal;
  Bird bird;
  Fish fish;
  ...
  
  class Mammal {
    Dog dog;
    Cat cat;
    Horse horse;
    ...
    class Dog {
      String name;
      String weight;
      void setWeight(String name){...}
      String getWeight() {...}
    }
    class Cat {
      String name;
      **String** weight;
      void setWeight(**String** name){...}
      **String** getWeight() {...}
    }
    ...
  }
  class Bird {...}
  class Fish {...}
  ...
}
Aucun commentaire:
Enregistrer un commentaire