Skip to content

Commit

Permalink
Merge pull request #2976 from jlerbsc/descriptor
Browse files Browse the repository at this point in the history
Adding method descriptor resolution
  • Loading branch information
jlerbsc committed Dec 14, 2020
2 parents 8fb6e42 + 255603d commit 8976524
Show file tree
Hide file tree
Showing 9 changed files with 201 additions and 70 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -20,31 +20,47 @@
*/
package com.github.javaparser.ast.body;

import com.github.javaparser.ast.*;
import static com.github.javaparser.utils.Utils.assertNotNull;

import java.util.Optional;
import java.util.function.Consumer;

import com.github.javaparser.TokenRange;
import com.github.javaparser.ast.AccessSpecifier;
import com.github.javaparser.ast.AllFieldsConstructor;
import com.github.javaparser.ast.Generated;
import com.github.javaparser.ast.Modifier;
import com.github.javaparser.ast.Node;
import com.github.javaparser.ast.NodeList;
import com.github.javaparser.ast.expr.AnnotationExpr;
import com.github.javaparser.ast.expr.SimpleName;
import com.github.javaparser.ast.nodeTypes.*;
import com.github.javaparser.ast.nodeTypes.modifiers.*;
import com.github.javaparser.ast.nodeTypes.NodeWithDeclaration;
import com.github.javaparser.ast.nodeTypes.NodeWithJavadoc;
import com.github.javaparser.ast.nodeTypes.NodeWithOptionalBlockStmt;
import com.github.javaparser.ast.nodeTypes.NodeWithParameters;
import com.github.javaparser.ast.nodeTypes.NodeWithSimpleName;
import com.github.javaparser.ast.nodeTypes.NodeWithThrownExceptions;
import com.github.javaparser.ast.nodeTypes.NodeWithType;
import com.github.javaparser.ast.nodeTypes.NodeWithTypeParameters;
import com.github.javaparser.ast.nodeTypes.modifiers.NodeWithAbstractModifier;
import com.github.javaparser.ast.nodeTypes.modifiers.NodeWithAccessModifiers;
import com.github.javaparser.ast.nodeTypes.modifiers.NodeWithFinalModifier;
import com.github.javaparser.ast.nodeTypes.modifiers.NodeWithStaticModifier;
import com.github.javaparser.ast.nodeTypes.modifiers.NodeWithStrictfpModifier;
import com.github.javaparser.ast.observer.ObservableProperty;
import com.github.javaparser.ast.stmt.BlockStmt;
import com.github.javaparser.ast.type.ClassOrInterfaceType;
import com.github.javaparser.ast.type.ReferenceType;
import com.github.javaparser.ast.type.Type;
import com.github.javaparser.ast.type.TypeParameter;
import com.github.javaparser.ast.visitor.CloneVisitor;
import com.github.javaparser.ast.visitor.GenericVisitor;
import com.github.javaparser.ast.visitor.VoidVisitor;
import java.util.Optional;
import static com.github.javaparser.utils.Utils.assertNotNull;
import com.github.javaparser.ast.visitor.CloneVisitor;
import com.github.javaparser.metamodel.MethodDeclarationMetaModel;
import com.github.javaparser.metamodel.JavaParserMetaModel;
import com.github.javaparser.TokenRange;
import com.github.javaparser.metamodel.MethodDeclarationMetaModel;
import com.github.javaparser.metamodel.OptionalProperty;
import com.github.javaparser.resolution.Resolvable;
import com.github.javaparser.resolution.declarations.ResolvedMethodDeclaration;
import java.util.function.Consumer;
import com.github.javaparser.ast.Node;
import com.github.javaparser.ast.Generated;

/**
* A method declaration. "public int abc() {return 1;}" in this example: {@code class X { public int abc() {return 1;}
Expand Down Expand Up @@ -229,6 +245,23 @@ public String getDeclarationAsString(boolean includingModifiers, boolean includi
sb.append(appendThrowsIfRequested(includingThrows));
return sb.toString();
}

/*
* Returns the method descriptor (https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html#jvms-4.3.3)
* The method descriptor for the method: {@code Object m(int i, double d, Thread t) {...}}
* is {@code (IDLjava/lang/Thread;)Ljava/lang/Object;}
* Note that the internal forms of the binary names of Thread and Object are used.
*/
public String toDescriptor() {
StringBuilder sb = new StringBuilder();
sb.append("(");
for (int i = 0; i < getParameters().size(); i++) {
sb.append(getParameter(i).getType().toDescriptor());
}
sb.append(")");
sb.append(getType().toDescriptor());
return sb.toString();
}

public boolean isNative() {
return hasModifier(Modifier.Keyword.NATIVE);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,17 @@
*/
package com.github.javaparser.ast.type;

import static com.github.javaparser.ast.NodeList.nodeList;
import static com.github.javaparser.utils.Utils.assertNotNull;

import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import java.util.function.Consumer;

import com.github.javaparser.TokenRange;
import com.github.javaparser.ast.AllFieldsConstructor;
import com.github.javaparser.ast.Generated;
import com.github.javaparser.ast.Node;
import com.github.javaparser.ast.NodeList;
import com.github.javaparser.ast.expr.AnnotationExpr;
Expand All @@ -34,13 +43,6 @@
import com.github.javaparser.metamodel.JavaParserMetaModel;
import com.github.javaparser.resolution.types.ResolvedArrayType;
import com.github.javaparser.utils.Pair;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import static com.github.javaparser.ast.NodeList.nodeList;
import static com.github.javaparser.utils.Utils.assertNotNull;
import java.util.function.Consumer;
import com.github.javaparser.ast.Generated;

/**
* To indicate that a type is an array, it gets wrapped in an ArrayType for every array level it has.
Expand Down Expand Up @@ -243,6 +245,14 @@ public boolean remove(Node node) {
public String asString() {
return componentType.asString() + "[]";
}

@Override
public String toDescriptor() {
StringBuffer sb = new StringBuffer();
sb.append("[");
sb.append(componentType.toDescriptor());
return sb.toString();
}

@Override
@Generated("com.github.javaparser.generator.core.node.CloneGenerator")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,15 @@
*/
package com.github.javaparser.ast.type;

import static com.github.javaparser.utils.Utils.assertNotNull;
import static java.util.stream.Collectors.joining;

import java.util.Optional;
import java.util.function.Consumer;

import com.github.javaparser.TokenRange;
import com.github.javaparser.ast.AllFieldsConstructor;
import com.github.javaparser.ast.Generated;
import com.github.javaparser.ast.Node;
import com.github.javaparser.ast.NodeList;
import com.github.javaparser.ast.expr.AnnotationExpr;
Expand All @@ -34,14 +42,8 @@
import com.github.javaparser.ast.visitor.VoidVisitor;
import com.github.javaparser.metamodel.ClassOrInterfaceTypeMetaModel;
import com.github.javaparser.metamodel.JavaParserMetaModel;
import java.util.Optional;
import static com.github.javaparser.utils.Utils.assertNotNull;
import static java.util.stream.Collectors.joining;
import com.github.javaparser.TokenRange;
import com.github.javaparser.metamodel.OptionalProperty;
import com.github.javaparser.resolution.types.ResolvedReferenceType;
import java.util.function.Consumer;
import com.github.javaparser.ast.Generated;

/**
* A class or an interface type.
Expand Down Expand Up @@ -235,6 +237,15 @@ public String asString() {
getTypeArguments().ifPresent(ta -> str.append(ta.stream().map(Type::asString).collect(joining(",", "<", ">"))));
return str.toString();
}

/*
* Note that the internal forms of the binary names of object are used.
* for example java/lang/Object
*/
@Override
public String toDescriptor() {
return String.format("L%s;", resolve().getQualifiedName().replace(".", "/"));
}

@Generated("com.github.javaparser.generator.core.node.RemoveMethodGenerator")
public ClassOrInterfaceType removeScope() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,25 +20,27 @@
*/
package com.github.javaparser.ast.type;

import static com.github.javaparser.StaticJavaParser.parseClassOrInterfaceType;
import static com.github.javaparser.utils.Utils.assertNotNull;

import java.util.HashMap;
import java.util.Optional;
import java.util.function.Consumer;

import com.github.javaparser.TokenRange;
import com.github.javaparser.ast.AllFieldsConstructor;
import com.github.javaparser.ast.Generated;
import com.github.javaparser.ast.Node;
import com.github.javaparser.ast.NodeList;
import com.github.javaparser.ast.expr.AnnotationExpr;
import com.github.javaparser.ast.nodeTypes.NodeWithAnnotations;
import com.github.javaparser.ast.observer.ObservableProperty;
import com.github.javaparser.ast.visitor.CloneVisitor;
import com.github.javaparser.ast.visitor.GenericVisitor;
import com.github.javaparser.ast.visitor.VoidVisitor;
import java.util.HashMap;
import static com.github.javaparser.StaticJavaParser.parseClassOrInterfaceType;
import static com.github.javaparser.utils.Utils.assertNotNull;
import com.github.javaparser.ast.Node;
import com.github.javaparser.ast.visitor.CloneVisitor;
import com.github.javaparser.metamodel.PrimitiveTypeMetaModel;
import com.github.javaparser.metamodel.JavaParserMetaModel;
import com.github.javaparser.TokenRange;
import com.github.javaparser.metamodel.PrimitiveTypeMetaModel;
import com.github.javaparser.resolution.types.ResolvedPrimitiveType;
import java.util.function.Consumer;
import java.util.Optional;
import com.github.javaparser.ast.Generated;

/**
* A primitive type.
Expand Down Expand Up @@ -84,16 +86,18 @@ public static PrimitiveType doubleType() {

public enum Primitive {

BOOLEAN("Boolean"),
CHAR("Character"),
BYTE("Byte"),
SHORT("Short"),
INT("Integer"),
LONG("Long"),
FLOAT("Float"),
DOUBLE("Double");
BOOLEAN("Boolean", "Z"),
CHAR("Character", "C"),
BYTE("Byte" ,"B"),
SHORT("Short" ,"S"),
INT("Integer", "I"),
LONG("Long", "L"),
FLOAT("Float", "F"),
DOUBLE("Double", "D");

final String nameOfBoxedType;

final String descriptor;

private String codeRepresentation;

Expand All @@ -105,9 +109,10 @@ public String asString() {
return codeRepresentation;
}

Primitive(String nameOfBoxedType) {
Primitive(String nameOfBoxedType, String descriptor) {
this.nameOfBoxedType = nameOfBoxedType;
this.codeRepresentation = name().toLowerCase();
this.descriptor = descriptor;
}
}

Expand All @@ -128,7 +133,7 @@ public PrimitiveType() {
public PrimitiveType(final Primitive type) {
this(null, type, new NodeList<>());
}

@AllFieldsConstructor
public PrimitiveType(final Primitive type, NodeList<AnnotationExpr> annotations) {
this(null, type, annotations);
Expand Down Expand Up @@ -164,6 +169,11 @@ public Primitive getType() {
public ClassOrInterfaceType toBoxedType() {
return type.toBoxedType();
}

@Override
public String toDescriptor() {
return type.descriptor;
}

@Generated("com.github.javaparser.generator.core.node.PropertyGenerator")
public PrimitiveType setType(final Primitive type) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,17 +20,18 @@
*/
package com.github.javaparser.ast.type;

import java.util.Optional;
import java.util.function.Consumer;

import com.github.javaparser.TokenRange;
import com.github.javaparser.ast.AllFieldsConstructor;
import com.github.javaparser.ast.Generated;
import com.github.javaparser.ast.Node;
import com.github.javaparser.ast.NodeList;
import com.github.javaparser.ast.expr.AnnotationExpr;
import com.github.javaparser.ast.visitor.CloneVisitor;
import com.github.javaparser.metamodel.JavaParserMetaModel;
import com.github.javaparser.metamodel.ReferenceTypeMetaModel;
import com.github.javaparser.ast.Generated;
import java.util.function.Consumer;
import java.util.Optional;

/**
* Base class for reference types.
Expand Down Expand Up @@ -107,4 +108,6 @@ public void ifReferenceType(Consumer<ReferenceType> action) {
public Optional<ReferenceType> toReferenceType() {
return Optional.of(this);
}

public abstract String toDescriptor();
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,22 +20,24 @@
*/
package com.github.javaparser.ast.type;

import static com.github.javaparser.utils.CodeGenerationUtils.f;
import static com.github.javaparser.utils.Utils.assertNotNull;

import java.util.Optional;
import java.util.function.Consumer;

import com.github.javaparser.TokenRange;
import com.github.javaparser.ast.AllFieldsConstructor;
import com.github.javaparser.ast.Generated;
import com.github.javaparser.ast.Node;
import com.github.javaparser.ast.NodeList;
import com.github.javaparser.ast.expr.AnnotationExpr;
import com.github.javaparser.ast.observer.ObservableProperty;
import com.github.javaparser.ast.visitor.CloneVisitor;
import com.github.javaparser.metamodel.JavaParserMetaModel;
import com.github.javaparser.metamodel.TypeMetaModel;
import static com.github.javaparser.utils.Utils.assertNotNull;
import com.github.javaparser.TokenRange;
import com.github.javaparser.resolution.Resolvable;
import com.github.javaparser.resolution.types.ResolvedType;
import com.github.javaparser.ast.Generated;
import java.util.function.Consumer;
import static com.github.javaparser.utils.CodeGenerationUtils.f;
import java.util.Optional;

/**
* Base class for types.
Expand Down Expand Up @@ -111,6 +113,10 @@ public int getArrayLevel() {
return 0;
}
}

public String toDescriptor() {
return "";
}

@Override
@Generated("com.github.javaparser.generator.core.node.RemoveMethodGenerator")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,27 +20,28 @@
*/
package com.github.javaparser.ast.type;

import com.github.javaparser.Range;
import static com.github.javaparser.utils.Utils.assertNotNull;
import static java.util.stream.Collectors.joining;

import java.util.Optional;
import java.util.function.Consumer;

import com.github.javaparser.TokenRange;
import com.github.javaparser.ast.AllFieldsConstructor;
import com.github.javaparser.ast.Generated;
import com.github.javaparser.ast.Node;
import com.github.javaparser.ast.NodeList;
import com.github.javaparser.ast.expr.AnnotationExpr;
import com.github.javaparser.ast.expr.SimpleName;
import com.github.javaparser.ast.nodeTypes.NodeWithAnnotations;
import com.github.javaparser.ast.nodeTypes.NodeWithSimpleName;
import com.github.javaparser.ast.observer.ObservableProperty;
import com.github.javaparser.ast.visitor.CloneVisitor;
import com.github.javaparser.ast.visitor.GenericVisitor;
import com.github.javaparser.ast.visitor.VoidVisitor;
import static com.github.javaparser.utils.Utils.assertNotNull;
import static java.util.stream.Collectors.joining;
import com.github.javaparser.ast.Node;
import com.github.javaparser.ast.visitor.CloneVisitor;
import com.github.javaparser.metamodel.TypeParameterMetaModel;
import com.github.javaparser.metamodel.JavaParserMetaModel;
import com.github.javaparser.TokenRange;
import com.github.javaparser.metamodel.TypeParameterMetaModel;
import com.github.javaparser.resolution.types.ResolvedTypeVariable;
import java.util.function.Consumer;
import java.util.Optional;
import com.github.javaparser.ast.Generated;

/**
* A type parameter. Examples:
Expand Down Expand Up @@ -175,6 +176,12 @@ public String asString() {
getTypeBound().ifNonEmpty(l -> str.append(l.stream().map(ClassOrInterfaceType::asString).collect(joining("&", " extends ", ""))));
return str.toString();
}


@Override
public String toDescriptor() {
return String.format("L%s;", resolve().qualifiedName());
}

@Override
@Generated("com.github.javaparser.generator.core.node.CloneGenerator")
Expand Down
Loading

0 comments on commit 8976524

Please sign in to comment.