diff options
author | Danny van Bruggen <hexagonaal@gmail.com> | 2017-04-14 15:43:20 +0200 |
---|---|---|
committer | Danny van Bruggen <hexagonaal@gmail.com> | 2017-04-14 15:43:20 +0200 |
commit | 7cd83c2e73deb47d79e71cc6afc3eb4b613302d1 (patch) | |
tree | 3acd7ed0094034c2cd57ce84573c824b555fecf4 /javaparser-core/src/main/java/com | |
parent | fb5ace2780cb770721de30672ba3df6210e1dfe2 (diff) | |
download | platform_external_javaparser-7cd83c2e73deb47d79e71cc6afc3eb4b613302d1.tar.gz platform_external_javaparser-7cd83c2e73deb47d79e71cc6afc3eb4b613302d1.tar.bz2 platform_external_javaparser-7cd83c2e73deb47d79e71cc6afc3eb4b613302d1.zip |
* Make "asString" methods for types
* Strip signature types of annotations and generics
Diffstat (limited to 'javaparser-core/src/main/java/com')
14 files changed, 128 insertions, 22 deletions
diff --git a/javaparser-core/src/main/java/com/github/javaparser/ast/NodeList.java b/javaparser-core/src/main/java/com/github/javaparser/ast/NodeList.java index adc7563a8..6cbd8556b 100644 --- a/javaparser-core/src/main/java/com/github/javaparser/ast/NodeList.java +++ b/javaparser-core/src/main/java/com/github/javaparser/ast/NodeList.java @@ -452,4 +452,9 @@ public class NodeList<N extends Node> implements List<N>, Iterable<N>, HasParent public boolean isNonEmpty() { return !isEmpty(); } + + public void ifNonEmpty(Consumer<? super NodeList<N>> consumer) { + if (isNonEmpty()) + consumer.accept(this); + } } diff --git a/javaparser-core/src/main/java/com/github/javaparser/ast/body/CallableDeclaration.java b/javaparser-core/src/main/java/com/github/javaparser/ast/body/CallableDeclaration.java index 2e9c06fe0..8e6d7e1f0 100644 --- a/javaparser-core/src/main/java/com/github/javaparser/ast/body/CallableDeclaration.java +++ b/javaparser-core/src/main/java/com/github/javaparser/ast/body/CallableDeclaration.java @@ -26,6 +26,8 @@ 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.NodeWithTypeArguments; import com.github.javaparser.ast.observer.ObservableProperty; import com.github.javaparser.ast.type.ArrayType; import com.github.javaparser.ast.type.ReferenceType; @@ -34,10 +36,13 @@ import com.github.javaparser.ast.type.TypeParameter; import com.github.javaparser.ast.visitor.CloneVisitor; import com.github.javaparser.metamodel.CallableDeclarationMetaModel; import com.github.javaparser.metamodel.JavaParserMetaModel; + import java.util.Arrays; import java.util.EnumSet; import java.util.List; + import static com.github.javaparser.utils.Utils.assertNotNull; +import static java.util.stream.Collectors.joining; import static java.util.stream.Collectors.toList; /** @@ -215,12 +220,10 @@ public abstract class CallableDeclaration<T extends Node> extends BodyDeclaratio * this will fail in some cases. (java.util.String != String for example, and generics are not taken into account.) */ public static class Signature { - private final String name; - private final List<Type> parameterTypes; - public Signature(String name, List<Type> parameterTypes) { + private Signature(String name, List<Type> parameterTypes) { this.name = name; this.parameterTypes = parameterTypes; } @@ -253,10 +256,37 @@ public abstract class CallableDeclaration<T extends Node> extends BodyDeclaratio result = 31 * result + parameterTypes.hashCode(); return result; } + + public String asString() { + return parameterTypes.stream().map(Type::asString).collect(joining(", ", name + "(", ")")); + } + + @Override + public String toString() { + return asString(); + } } public Signature getSignature() { - return new Signature(getName().getIdentifier(), getParameters().stream().map(this::getTypeWithVarargsAsArray).collect(toList())); + return new Signature(getName().getIdentifier(), getParameters().stream() + .map(this::getTypeWithVarargsAsArray) + .map(this::stripGenerics) + .map(this::stripAnnotations) + .collect(toList())); + } + + private Type stripAnnotations(Type type) { + if (type instanceof NodeWithAnnotations) { + ((NodeWithAnnotations) type).setAnnotations(new NodeList<>()); + } + return type; + } + + private Type stripGenerics(Type type) { + if (type instanceof NodeWithTypeArguments) { + ((NodeWithTypeArguments) type).setTypeArguments((NodeList<Type>) null); + } + return type; } private Type getTypeWithVarargsAsArray(Parameter p) { diff --git a/javaparser-core/src/main/java/com/github/javaparser/ast/expr/SimpleName.java b/javaparser-core/src/main/java/com/github/javaparser/ast/expr/SimpleName.java index c76072401..44b24cbda 100644 --- a/javaparser-core/src/main/java/com/github/javaparser/ast/expr/SimpleName.java +++ b/javaparser-core/src/main/java/com/github/javaparser/ast/expr/SimpleName.java @@ -88,6 +88,10 @@ public class SimpleName extends Node implements NodeWithIdentifier<SimpleName> { return false; return super.remove(node); } + + public String asString() { + return identifier; + } @Override public SimpleName clone() { diff --git a/javaparser-core/src/main/java/com/github/javaparser/ast/type/ArrayType.java b/javaparser-core/src/main/java/com/github/javaparser/ast/type/ArrayType.java index 9111a729b..ac26028c7 100644 --- a/javaparser-core/src/main/java/com/github/javaparser/ast/type/ArrayType.java +++ b/javaparser-core/src/main/java/com/github/javaparser/ast/type/ArrayType.java @@ -22,23 +22,25 @@ package com.github.javaparser.ast.type; import com.github.javaparser.Range; import com.github.javaparser.ast.AllFieldsConstructor; +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 com.github.javaparser.metamodel.ArrayTypeMetaModel; +import com.github.javaparser.metamodel.JavaParserMetaModel; import com.github.javaparser.utils.Pair; + import java.util.ArrayList; import java.util.Arrays; 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 com.github.javaparser.ast.Node; -import com.github.javaparser.ast.visitor.CloneVisitor; -import com.github.javaparser.metamodel.ArrayTypeMetaModel; -import com.github.javaparser.metamodel.JavaParserMetaModel; /** * To indicate that a type is an array, it gets wrapped in an ArrayType for every array level it has. @@ -179,6 +181,11 @@ public class ArrayType extends ReferenceType implements NodeWithAnnotations<Arra } @Override + public String asString() { + return componentType.asString() + "[]"; + } + + @Override public ArrayType clone() { return (ArrayType) accept(new CloneVisitor(), null); } diff --git a/javaparser-core/src/main/java/com/github/javaparser/ast/type/ClassOrInterfaceType.java b/javaparser-core/src/main/java/com/github/javaparser/ast/type/ClassOrInterfaceType.java index aef700f84..78f28c57f 100644 --- a/javaparser-core/src/main/java/com/github/javaparser/ast/type/ClassOrInterfaceType.java +++ b/javaparser-core/src/main/java/com/github/javaparser/ast/type/ClassOrInterfaceType.java @@ -22,6 +22,7 @@ package com.github.javaparser.ast.type; import com.github.javaparser.Range; import com.github.javaparser.ast.AllFieldsConstructor; +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; @@ -29,16 +30,18 @@ import com.github.javaparser.ast.nodeTypes.NodeWithAnnotations; import com.github.javaparser.ast.nodeTypes.NodeWithSimpleName; import com.github.javaparser.ast.nodeTypes.NodeWithTypeArguments; 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 com.github.javaparser.metamodel.ClassOrInterfaceTypeMetaModel; +import com.github.javaparser.metamodel.JavaParserMetaModel; + import java.util.Arrays; import java.util.List; import java.util.Optional; + 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.ClassOrInterfaceTypeMetaModel; -import com.github.javaparser.metamodel.JavaParserMetaModel; +import static java.util.stream.Collectors.joining; /** * A class or an interface type. <br/><code>Object</code> <br/><code>HashMap<String, String></code> @@ -201,6 +204,16 @@ public final class ClassOrInterfaceType extends ReferenceType implements NodeWit return super.remove(node); } + @Override + public String asString() { + StringBuilder str = new StringBuilder(); + getScope().ifPresent(s -> str.append(s.asString()).append(".")); + str.append(name.asString()); + + getTypeArguments().ifPresent(ta -> str.append(ta.stream().map(Type::asString).collect(joining(",", "<", ">")))); + return str.toString(); + } + public ClassOrInterfaceType removeScope() { return setScope((ClassOrInterfaceType) null); } diff --git a/javaparser-core/src/main/java/com/github/javaparser/ast/type/IntersectionType.java b/javaparser-core/src/main/java/com/github/javaparser/ast/type/IntersectionType.java index 56ce3b57c..6e609c1a0 100644 --- a/javaparser-core/src/main/java/com/github/javaparser/ast/type/IntersectionType.java +++ b/javaparser-core/src/main/java/com/github/javaparser/ast/type/IntersectionType.java @@ -22,19 +22,22 @@ package com.github.javaparser.ast.type; import com.github.javaparser.Range; import com.github.javaparser.ast.AllFieldsConstructor; +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 com.github.javaparser.metamodel.IntersectionTypeMetaModel; +import com.github.javaparser.metamodel.JavaParserMetaModel; + import java.util.Arrays; import java.util.List; + 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.IntersectionTypeMetaModel; -import com.github.javaparser.metamodel.JavaParserMetaModel; +import static java.util.stream.Collectors.joining; /** * Represents a set of types. A given value of this type has to be assignable to at all of the element types. @@ -121,4 +124,9 @@ public class IntersectionType extends Type implements NodeWithAnnotations<Inters public IntersectionTypeMetaModel getMetaModel() { return JavaParserMetaModel.intersectionTypeMetaModel; } + + @Override + public String asString() { + return elements.stream().map(Type::asString).collect(joining("&")); + } } diff --git a/javaparser-core/src/main/java/com/github/javaparser/ast/type/PrimitiveType.java b/javaparser-core/src/main/java/com/github/javaparser/ast/type/PrimitiveType.java index 74b9db401..1eea75ca1 100644 --- a/javaparser-core/src/main/java/com/github/javaparser/ast/type/PrimitiveType.java +++ b/javaparser-core/src/main/java/com/github/javaparser/ast/type/PrimitiveType.java @@ -153,6 +153,7 @@ public final class PrimitiveType extends Type implements NodeWithAnnotations<Pri return this; } + @Override public String asString() { return type.asString(); } diff --git a/javaparser-core/src/main/java/com/github/javaparser/ast/type/Type.java b/javaparser-core/src/main/java/com/github/javaparser/ast/type/Type.java index 7eb94f9fe..2f70f5f66 100644 --- a/javaparser-core/src/main/java/com/github/javaparser/ast/type/Type.java +++ b/javaparser-core/src/main/java/com/github/javaparser/ast/type/Type.java @@ -98,6 +98,8 @@ public abstract class Type extends Node { return super.remove(node); } + public abstract String asString(); + @Override public Type clone() { return (Type) accept(new CloneVisitor(), null); diff --git a/javaparser-core/src/main/java/com/github/javaparser/ast/type/TypeParameter.java b/javaparser-core/src/main/java/com/github/javaparser/ast/type/TypeParameter.java index 5bb2800e2..90f2db6a4 100644 --- a/javaparser-core/src/main/java/com/github/javaparser/ast/type/TypeParameter.java +++ b/javaparser-core/src/main/java/com/github/javaparser/ast/type/TypeParameter.java @@ -31,8 +31,12 @@ import com.github.javaparser.ast.observer.ObservableProperty; import com.github.javaparser.ast.visitor.GenericVisitor; import com.github.javaparser.ast.visitor.VoidVisitor; import java.util.Arrays; +import java.util.Iterator; import java.util.List; import static com.github.javaparser.utils.Utils.assertNotNull; +import static com.github.javaparser.utils.Utils.isNullOrEmpty; +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; @@ -174,4 +178,11 @@ public final class TypeParameter extends ReferenceType<TypeParameter> implements public TypeParameterMetaModel getMetaModel() { return JavaParserMetaModel.typeParameterMetaModel; } + + @Override + public String asString() { + StringBuilder str = new StringBuilder(getNameAsString()); + getTypeBound().ifNonEmpty(l -> str.append(l.stream().map(ClassOrInterfaceType::asString).collect(joining("&", " extends ", "")))); + return str.toString(); + } } diff --git a/javaparser-core/src/main/java/com/github/javaparser/ast/type/UnionType.java b/javaparser-core/src/main/java/com/github/javaparser/ast/type/UnionType.java index db4048952..09a8d8aef 100644 --- a/javaparser-core/src/main/java/com/github/javaparser/ast/type/UnionType.java +++ b/javaparser-core/src/main/java/com/github/javaparser/ast/type/UnionType.java @@ -31,6 +31,8 @@ import com.github.javaparser.ast.visitor.VoidVisitor; import java.util.Arrays; import java.util.List; 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.UnionTypeMetaModel; @@ -110,6 +112,11 @@ public class UnionType extends Type implements NodeWithAnnotations<UnionType> { } @Override + public String asString() { + return elements.stream().map(Type::asString).collect(joining("|")); + } + + @Override public UnionType clone() { return (UnionType) accept(new CloneVisitor(), null); } diff --git a/javaparser-core/src/main/java/com/github/javaparser/ast/type/UnknownType.java b/javaparser-core/src/main/java/com/github/javaparser/ast/type/UnknownType.java index 39c1f7630..a36a44cf8 100644 --- a/javaparser-core/src/main/java/com/github/javaparser/ast/type/UnknownType.java +++ b/javaparser-core/src/main/java/com/github/javaparser/ast/type/UnknownType.java @@ -84,6 +84,11 @@ public final class UnknownType extends Type { } @Override + public String asString() { + return ""; + } + + @Override public UnknownType clone() { return (UnknownType) accept(new CloneVisitor(), null); } diff --git a/javaparser-core/src/main/java/com/github/javaparser/ast/type/VoidType.java b/javaparser-core/src/main/java/com/github/javaparser/ast/type/VoidType.java index 19674031a..92e378ca4 100644 --- a/javaparser-core/src/main/java/com/github/javaparser/ast/type/VoidType.java +++ b/javaparser-core/src/main/java/com/github/javaparser/ast/type/VoidType.java @@ -80,6 +80,11 @@ public final class VoidType extends Type implements NodeWithAnnotations<VoidType } @Override + public String asString() { + return "void"; + } + + @Override public VoidType clone() { return (VoidType) accept(new CloneVisitor(), null); } diff --git a/javaparser-core/src/main/java/com/github/javaparser/ast/type/WildcardType.java b/javaparser-core/src/main/java/com/github/javaparser/ast/type/WildcardType.java index 61c532041..430c38db0 100644 --- a/javaparser-core/src/main/java/com/github/javaparser/ast/type/WildcardType.java +++ b/javaparser-core/src/main/java/com/github/javaparser/ast/type/WildcardType.java @@ -22,19 +22,20 @@ package com.github.javaparser.ast.type; import com.github.javaparser.Range; import com.github.javaparser.ast.AllFieldsConstructor; +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 com.github.javaparser.metamodel.JavaParserMetaModel; +import com.github.javaparser.metamodel.WildcardTypeMetaModel; + import java.util.Arrays; import java.util.List; import java.util.Optional; -import com.github.javaparser.ast.Node; -import com.github.javaparser.ast.visitor.CloneVisitor; -import com.github.javaparser.metamodel.WildcardTypeMetaModel; -import com.github.javaparser.metamodel.JavaParserMetaModel; /** * A wildcard type argument. @@ -120,7 +121,6 @@ public final class WildcardType extends Type implements NodeWithAnnotations<Wild * * @param extendedType the extends, can be null * @return this, the WildcardType - * * @deprecated use setExtendedType instead, */ @Deprecated @@ -151,7 +151,6 @@ public final class WildcardType extends Type implements NodeWithAnnotations<Wild * * @param superType the super, can be null * @return this, the WildcardType - * * @deprecated use setSuperType instead */ @Deprecated @@ -188,6 +187,14 @@ public final class WildcardType extends Type implements NodeWithAnnotations<Wild return super.remove(node); } + @Override + public String asString() { + StringBuilder str = new StringBuilder("?"); + getExtendedType().ifPresent(t -> str.append(" extends ").append(t.asString())); + getSuperType().ifPresent(t -> str.append(" super ").append(t.asString())); + return str.toString(); + } + @Deprecated public WildcardType removeExtendedTypes() { return removeExtendedType(); diff --git a/javaparser-core/src/main/java/com/github/javaparser/utils/SeparatedItemStringBuilder.java b/javaparser-core/src/main/java/com/github/javaparser/utils/SeparatedItemStringBuilder.java index 096e9ca5f..3cef7237c 100644 --- a/javaparser-core/src/main/java/com/github/javaparser/utils/SeparatedItemStringBuilder.java +++ b/javaparser-core/src/main/java/com/github/javaparser/utils/SeparatedItemStringBuilder.java @@ -3,6 +3,7 @@ package com.github.javaparser.utils; /** * Builds a string containing a list of items with a prefix, a postfix, and a separator. * <br/>Example: (1,2,3) which has prefix "(", separator ",", postfix ")" and the items 1 through 3. + * <p/>Java 8 offers the very nice Collectors.joining(String, String, String) which does the same thing. */ public class SeparatedItemStringBuilder { private final String separator; |