Skip to content

Commit

Permalink
reduce noargsconstructor and summarize getter setter
Browse files Browse the repository at this point in the history
  • Loading branch information
timo-a committed Apr 9, 2021
1 parent 3b06966 commit d469c03
Show file tree
Hide file tree
Showing 8 changed files with 221 additions and 8 deletions.
4 changes: 3 additions & 1 deletion app/src/main/java/de/lomboker/app/Reduce.java
Original file line number Diff line number Diff line change
@@ -1,13 +1,15 @@
package de.lomboker.app;

import de.lomboker.app.constructor.ReduceNoArgsConstructor;
import de.lomboker.app.getter.ReduceGetter;
import de.lomboker.app.setter.ReduceSetter;
import picocli.CommandLine.Command;

@Command(name = "reduce",
subcommands = {
ReduceGetter.class,
ReduceSetter.class},
ReduceSetter.class,
ReduceNoArgsConstructor.class},
description = "no options or positional parameters")
public class Reduce implements Runnable {

Expand Down
20 changes: 20 additions & 0 deletions app/src/main/java/de/lomboker/app/Summarize.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package de.lomboker.app;

import de.lomboker.app.constructor.ReduceNoArgsConstructor;
import de.lomboker.app.getter.ReduceGetter;
import de.lomboker.app.setter.ReduceSetter;
import de.lomboker.app.summarize.SummarizeGetterSetter;
import picocli.CommandLine.Command;

@Command(name = "summarize",
subcommands = {
SummarizeGetterSetter.class},
description = "no options or positional parameters")
public class Summarize implements Runnable {

@Override
public void run() {
System.out.println("I'm Summarize. You need to call a subcommand like gs");
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
/*
* This Java source file was generated by the Gradle 'init' task.
*/
package de.lomboker.app.constructor;

import picocli.CommandLine.Command;
import picocli.CommandLine.Parameters;

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;

import static de.lomboker.lib.NoArgsConstructor.reduceNoArgsConstructor;
import static de.lomboker.lib.TrivialGetters.reduceGetters;

@Command(name = "constructor", description = "reduce no args constructor")
public class ReduceNoArgsConstructor implements Runnable {

@Parameters(index = "0")
File file;

@Override
public void run() {
try {
String code = Files.readString(file.toPath());
String converted = reduceNoArgsConstructor(code);
Files.writeString(file.toPath(), converted);
} catch (IOException e) {
e.printStackTrace();
}

}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package de.lomboker.app.summarize;

import picocli.CommandLine;

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;

import static de.lomboker.lib.SummarizeGetterSetter.summarizeGetters;
import static de.lomboker.lib.SummarizeGetterSetter.summarizeSetters;

@CommandLine.Command(name = "gs", description = "summarize getters and setters")
public class SummarizeGetterSetter implements Runnable {
@CommandLine.Parameters(index = "0")
File file;

@Override
public void run() {
try {
String code = Files.readString(file.toPath());
String convG = summarizeGetters(code);
String convGS = summarizeSetters(convG);
Files.writeString(file.toPath(), convGS);
} catch (IOException e) {
e.printStackTrace();
}

}

}
23 changes: 19 additions & 4 deletions lib/src/main/java/de/lomboker/lib/ClassWrapper.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,14 @@

import com.github.javaparser.StaticJavaParser;
import com.github.javaparser.ast.CompilationUnit;
import com.github.javaparser.ast.NodeList;
import com.github.javaparser.ast.body.ClassOrInterfaceDeclaration;
import com.github.javaparser.ast.body.FieldDeclaration;
import com.github.javaparser.ast.body.MethodDeclaration;
import com.github.javaparser.ast.expr.AnnotationExpr;
import com.github.javaparser.printer.lexicalpreservation.LexicalPreservingPrinter;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.*;
import java.util.stream.Collectors;

public class ClassWrapper {
Expand All @@ -35,4 +36,18 @@ public ClassWrapper(String code) {
fieldsByName.put(fd.getVariable(0).getName().asString(), fd);
}
}

public boolean writeAnnotationToClass(String annotation){
Optional<ClassOrInterfaceDeclaration> oFirstClass = cu.findFirst(ClassOrInterfaceDeclaration.class);

if(oFirstClass.isEmpty()) {
return false;
}

ClassOrInterfaceDeclaration firstClass = oFirstClass.get();

NodeList<AnnotationExpr> as = firstClass.getAnnotations();
firstClass.addMarkerAnnotation(annotation);
return true;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -36,10 +36,8 @@ public static String reduceFuzzyEqualsAndHashCode(String code) {
if (equals.isPresent() && hashCode.isPresent()) {
cu.addImport("lombok.EqualsAndHashCode");

cu.findAll(ClassOrInterfaceDeclaration.class);
Optional<ClassOrInterfaceDeclaration> oFirstClass = cu.findFirst(ClassOrInterfaceDeclaration.class);

//add annotation
Optional<ClassOrInterfaceDeclaration> oFirstClass = cu.findFirst(ClassOrInterfaceDeclaration.class);
if(oFirstClass.isEmpty()) {
System.out.println("Error! no class found");
return LexicalPreservingPrinter.print(cu);
Expand Down
52 changes: 52 additions & 0 deletions lib/src/main/java/de/lomboker/lib/NoArgsConstructor.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
package de.lomboker.lib;

import com.github.javaparser.ast.CompilationUnit;
import com.github.javaparser.ast.NodeList;
import com.github.javaparser.ast.body.ClassOrInterfaceDeclaration;
import com.github.javaparser.ast.body.ConstructorDeclaration;
import com.github.javaparser.ast.body.FieldDeclaration;
import com.github.javaparser.ast.expr.AnnotationExpr;
import com.github.javaparser.printer.lexicalpreservation.LexicalPreservingPrinter;

import java.util.List;
import java.util.Map;
import java.util.Optional;

public class NoArgsConstructor {

public static String reduceNoArgsConstructor(String code) {

ClassWrapper wrapper = new ClassWrapper(code);

CompilationUnit cu = wrapper.cu;
LexicalPreservingPrinter.setup(cu);

Map<String, FieldDeclaration> members = wrapper.fieldsByName;

List<ConstructorDeclaration> constructors = cu.findAll(ConstructorDeclaration.class);

for (var cd : constructors) {
if (cd.getBody().isEmpty()){
cu.addImport("lombok.NoArgsConstructor");

Optional<ClassOrInterfaceDeclaration> oFirstClass = cu.findFirst(ClassOrInterfaceDeclaration.class);

if(oFirstClass.isEmpty()) {
System.out.println("Error! no class found");
return LexicalPreservingPrinter.print(cu);
}

ClassOrInterfaceDeclaration firstClass = oFirstClass.get();

NodeList<AnnotationExpr> as = firstClass.getAnnotations();
firstClass.addMarkerAnnotation("NoArgsConstructor");

//remove no args constructor
cd.removeJavaDocComment();
cd.remove();

}
}
return LexicalPreservingPrinter.print(cu);
}
}
63 changes: 63 additions & 0 deletions lib/src/main/java/de/lomboker/lib/SummarizeGetterSetter.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
package de.lomboker.lib;

import com.github.javaparser.ast.AccessSpecifier;
import com.github.javaparser.ast.CompilationUnit;
import com.github.javaparser.ast.NodeList;
import com.github.javaparser.ast.body.ClassOrInterfaceDeclaration;
import com.github.javaparser.ast.body.FieldDeclaration;
import com.github.javaparser.ast.body.MethodDeclaration;
import com.github.javaparser.ast.body.Parameter;
import com.github.javaparser.ast.expr.AnnotationExpr;
import com.github.javaparser.ast.expr.MarkerAnnotationExpr;
import com.github.javaparser.printer.lexicalpreservation.LexicalPreservingPrinter;

import java.util.List;
import java.util.Optional;
import java.util.Set;
import java.util.stream.Collectors;

import static de.lomboker.lib.Utils.nameMatch;

public class SummarizeGetterSetter {


public static String summarizeGetters(String code) {
return summarizeFieldAnnotation(code, "Getter");
}

public static String summarizeSetters(String code) {
return summarizeFieldAnnotation(code, "Setter");
}

public static String summarizeFieldAnnotation(String code, final String annotation) {
ClassWrapper wrapper = new ClassWrapper(code);

CompilationUnit cu = wrapper.cu;
LexicalPreservingPrinter.setup(cu);

List<FieldDeclaration> allNonStatic = wrapper.fields.stream()
.filter(fd -> !fd.isStatic()).collect(Collectors.toList());

MarkerAnnotationExpr mae = new MarkerAnnotationExpr(annotation);

boolean fullyAnnotated = allNonStatic.stream()
.allMatch(fd -> fd.getAnnotations().contains(mae));

if (fullyAnnotated) {

if(!wrapper.writeAnnotationToClass(annotation)) {
System.out.println("Error! no class found");
return LexicalPreservingPrinter.print(cu);
}


allNonStatic.forEach(fd ->
fd.getAnnotations().remove(mae));

}

return LexicalPreservingPrinter.print(cu);

}

}

0 comments on commit d469c03

Please sign in to comment.