Skip to content

Commit

Permalink
annotation with simple values parsed
Browse files Browse the repository at this point in the history
  • Loading branch information
Rafa committed Mar 25, 2016
1 parent ba9813f commit 186cf9e
Show file tree
Hide file tree
Showing 9 changed files with 53 additions and 35 deletions.
2 changes: 0 additions & 2 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,5 @@ dependencies {
compile 'org.ow2.asm:asm:5.0.4'
compile 'com.intellij:openapi:7.0.3'
compile 'com.intellij:annotations:9.0.4'
compile 'com.intellij:extensions:7.0.3'
compile 'org.jetbrains.plugins.groovy:extensions:7.0.3'
testCompile group: 'junit', name: 'junit', version: '4.11'
}
12 changes: 5 additions & 7 deletions src/main/groovy/interfaces/AnnotationInterface.groovy
Original file line number Diff line number Diff line change
@@ -1,20 +1,18 @@
package interfaces

import annotations.SimpleAnnotation
import com.sun.istack.internal.NotNull
import groovy.transform.NotYetImplemented

import javax.annotation.Resource
import javax.xml.bind.annotation.XmlID
import javax.xml.bind.annotation.XmlRootElement

@Resource
@XmlRootElement
@SimpleAnnotation(n = "SimpleAnnotationName", v= "42")
interface AnnotationInterface {
@XmlID
// @XmlID
def field

@NotYetImplemented
def method (@NotNull def arg)
// @NotYetImplemented
def method (
// @NotNull
def arg)
}
4 changes: 1 addition & 3 deletions src/main/groovy/interfaces/InterfaceWithFields.groovy
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
package interfaces
/**
* Created by Rafa on 23.02.2016.
*/

interface InterfaceWithFields {
def field;
def anotherField;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,5 @@
/**
* Created by Rafa on 26.03.2016.
*/
public class СlassHolder {
public class ClassHolder {
}
12 changes: 1 addition & 11 deletions src/main/java/decompiler/pasers/InterfaceParser.java
Original file line number Diff line number Diff line change
@@ -1,10 +1,6 @@
package decompiler.pasers;

import decompiler.visitors.AVisitor;
import decompiler.visitors.SVisitor;
import jdk.internal.org.objectweb.asm.Opcodes;
import jdk.internal.org.objectweb.asm.util.Printer;
import jdk.internal.org.objectweb.asm.util.Textifier;
import org.objectweb.asm.Type;
import org.objectweb.asm.signature.SignatureReader;

Expand Down Expand Up @@ -107,13 +103,7 @@ public StringBuilder parseHeader(int version, int access, String name,
@Override
public StringBuilder parseAnnotation(String desc, boolean visible) {
StringBuilder sb = new StringBuilder("@");
//TODO: implement parsing internals
AVisitor aVisitor = new AVisitor(Opcodes.ASM4);
Printer printer = new Textifier();
// TraceAnnotationVisitor v = new TraceAnnotationVisitor(aVisitor,printer);

// new (signature).accept(v);
sb.append(desc.substring(1).replace('/','.').replace(';','\n'));
sb.append(desc.substring(1).replace('/','.').replace(';',' '));
return sb;
}

Expand Down
2 changes: 1 addition & 1 deletion src/main/java/decompiler/pasers/ParserUtils.java
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ public static ASMParser getParser(int access) {

public static String parsePackagaName(String name) {
int i = name.lastIndexOf('/');
return "package " + name.substring(0, i).replace('/', '.') + ";";
return "package " + name.substring(0, i).replace('/', '.') + ";\n";
}

public static String parseInterfaceName(String name) {
Expand Down
29 changes: 27 additions & 2 deletions src/main/java/decompiler/utils/CVisitorUtils.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@


import decompiler.holders.FieldHolder;
import decompiler.visitors.AVisitor;
import decompiler.visitors.FVisitor;

import java.util.List;
Expand All @@ -11,14 +12,38 @@ public class CVisitorUtils {
public static StringBuilder toStringFiels(List<FieldHolder> fieldHolders, Map<String, FVisitor> annoattion) {
StringBuilder sb = new StringBuilder();
for (FieldHolder f : fieldHolders) {
sb.append(toStringFiel(f, annoattion));
sb.append(toStringFiel(f, annoattion.get(f.name)));
}
return sb;
}

public static StringBuilder toStringFiel(FieldHolder field, Map<String, FVisitor> annoattion) {
public static StringBuilder toStringFiel(FieldHolder field, FVisitor fVisitor) {
return field.field;
}


public static StringBuilder toStringAnnts(List<StringBuilder> annts, Map<StringBuilder, AVisitor> body) {
StringBuilder sb = new StringBuilder();
for (StringBuilder annt : annts) {
sb.append(toStringAnnt(annt, body.get(annt)));
}
return sb;
}

private static StringBuilder toStringAnnt(StringBuilder annt, AVisitor aVisitor) {
if (aVisitor == null) {
return annt;
}
List<String> bf = aVisitor.getBf();
StringBuilder body = new StringBuilder();
if (bf.size() > 0) {
body.append('(');
for (String s : bf) {
body.append(s).append(',');
}
body.setLength(body.length() - 1);
body.append(')');
}
return annt.append(body).append('\n');
}
}
10 changes: 9 additions & 1 deletion src/main/java/decompiler/visitors/AVisitor.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,8 @@ public AVisitor(int api, AnnotationVisitor av) {
public void visit(String name, Object value) {
String x = "visit| name : " + name + " value" + value;
System.err.println(x);
bf.add(x);
//TODO value has diff types
bf.add(name + " = " + parseValue(value)) ;
}

@Override
Expand Down Expand Up @@ -47,4 +48,11 @@ public void visitEnd() {
public List<String> getBf() {
return bf;
}

private String parseValue (Object val) {
if (val.getClass() == String.class) {
return "\"" + val + "\"";
}
return val + ""; //FACEPALM
}
}
15 changes: 8 additions & 7 deletions src/main/java/decompiler/visitors/CVisitor.java
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@

public class CVisitor extends ClassVisitor {

Map<String, AVisitor> classAnnotationsMap = new HashMap<>();
Map<StringBuilder, AVisitor> classAnnotationsMap = new HashMap<>();
Map<String, FVisitor> fieldAnnotationsMap = new HashMap<>();
Map<String, MVisitor> methodAnnotationsMap = new HashMap<>();

Expand All @@ -31,7 +31,7 @@ public class CVisitor extends ClassVisitor {
StringBuilder header = new StringBuilder();
StringBuilder pack = new StringBuilder();
StringBuilder clazz = new StringBuilder();
StringBuilder annt = new StringBuilder();
List<StringBuilder> annt = new ArrayList<>();

protected StringBuilder buffer = new StringBuilder();

Expand Down Expand Up @@ -71,11 +71,10 @@ public AnnotationVisitor visitAnnotation(String desc, boolean visible) {
if (isTrait(desc, visible)) {
parser = ParserUtils.getParser(ObjectType.TRAIT);
}
int i = buffer.indexOf("@");
StringBuilder annotation = parser.parseAnnotation(desc, visible);
annt.append(annotation);
annt.add(annotation);
AVisitor aVisitor = new AVisitor(Opcodes.ASM4);
classAnnotationsMap.put(desc, aVisitor);
classAnnotationsMap.put(annotation, aVisitor);
return aVisitor;
}

Expand Down Expand Up @@ -109,10 +108,12 @@ public MethodVisitor visitMethod(int access, String name, String desc, String si
@Override
public void visitEnd() {
buffer.append(CVisitorUtils.toStringFiels(fields, fieldAnnotationsMap));
clazz.append(pack).append(annt).append(header).append(buffer).append('}');
clazz.append(pack).append(
CVisitorUtils.toStringAnnts(annt, classAnnotationsMap)
).append(header).append(buffer).append('}');
}

public Map<String, AVisitor> getClassAnnotaitonsMap() {
public Map<StringBuilder, AVisitor> getClassAnnotaitonsMap() {
return classAnnotationsMap;
}

Expand Down

0 comments on commit 186cf9e

Please sign in to comment.