diff options
author | Danny van Bruggen <hexagonaal@gmail.com> | 2017-11-05 01:39:56 +0100 |
---|---|---|
committer | Danny van Bruggen <hexagonaal@gmail.com> | 2017-11-05 01:39:56 +0100 |
commit | 660b7248ab889410a598d37bde32bbba7ed0ef4e (patch) | |
tree | cc8c83a737970cf79bb95bb2c4eccf6b1a689675 /javaparser-core/src | |
parent | 4192f687beb4b5feff069cae78117ca1e83fc870 (diff) | |
download | javaparser-660b7248ab889410a598d37bde32bbba7ed0ef4e.tar.gz |
Allow a receiver parameter on constructors
Diffstat (limited to 'javaparser-core/src')
8 files changed, 47 insertions, 63 deletions
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 a220f2bd9..61f607fb9 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 @@ -43,6 +43,8 @@ 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; + +import java.util.Optional; import java.util.function.Consumer; /** @@ -60,22 +62,25 @@ public abstract class CallableDeclaration<T extends CallableDeclaration<?>> exte private NodeList<ReferenceType> thrownExceptions; + private ReceiverParameter receiverParameter; + @AllFieldsConstructor - public CallableDeclaration(EnumSet<Modifier> modifiers, NodeList<AnnotationExpr> annotations, NodeList<TypeParameter> typeParameters, SimpleName name, NodeList<Parameter> parameters, NodeList<ReferenceType> thrownExceptions) { - this(null, modifiers, annotations, typeParameters, name, parameters, thrownExceptions); + CallableDeclaration(EnumSet<Modifier> modifiers, NodeList<AnnotationExpr> annotations, NodeList<TypeParameter> typeParameters, SimpleName name, NodeList<Parameter> parameters, NodeList<ReferenceType> thrownExceptions, ReceiverParameter receiverParameter) { + this(null, modifiers, annotations, typeParameters, name, parameters, thrownExceptions, receiverParameter); } /** * This constructor is used by the parser and is considered private. */ @Generated("com.github.javaparser.generator.core.node.MainConstructorGenerator") - public CallableDeclaration(TokenRange tokenRange, EnumSet<Modifier> modifiers, NodeList<AnnotationExpr> annotations, NodeList<TypeParameter> typeParameters, SimpleName name, NodeList<Parameter> parameters, NodeList<ReferenceType> thrownExceptions) { + CallableDeclaration(TokenRange tokenRange, EnumSet<Modifier> modifiers, NodeList<AnnotationExpr> annotations, NodeList<TypeParameter> typeParameters, SimpleName name, NodeList<Parameter> parameters, NodeList<ReferenceType> thrownExceptions, ReceiverParameter receiverParameter) { super(tokenRange, annotations); setModifiers(modifiers); setTypeParameters(typeParameters); setName(name); setParameters(parameters); setThrownExceptions(thrownExceptions); + setReceiverParameter(receiverParameter); customInitialization(); } @@ -377,4 +382,22 @@ public abstract class CallableDeclaration<T extends CallableDeclaration<?>> exte public void ifCallableDeclaration(Consumer<CallableDeclaration> action) { action.accept(this); } + + @Generated("com.github.javaparser.generator.core.node.PropertyGenerator") + public Optional<ReceiverParameter> getReceiverParameter() { + return Optional.ofNullable(receiverParameter); + } + + @Generated("com.github.javaparser.generator.core.node.PropertyGenerator") + public CallableDeclaration<T> setReceiverParameter(final ReceiverParameter receiverParameter) { + if (receiverParameter == this.receiverParameter) { + return (CallableDeclaration<T>) this; + } + notifyPropertyChange(ObservableProperty.RECEIVER_PARAMETER, this.receiverParameter, receiverParameter); + if (this.receiverParameter != null) + this.receiverParameter.setParentNode(null); + this.receiverParameter = receiverParameter; + setAsParentNodeOf(receiverParameter); + return this; + } } diff --git a/javaparser-core/src/main/java/com/github/javaparser/ast/body/ConstructorDeclaration.java b/javaparser-core/src/main/java/com/github/javaparser/ast/body/ConstructorDeclaration.java index 2ae4a9246..a48981bc3 100644 --- a/javaparser-core/src/main/java/com/github/javaparser/ast/body/ConstructorDeclaration.java +++ b/javaparser-core/src/main/java/com/github/javaparser/ast/body/ConstructorDeclaration.java @@ -34,9 +34,7 @@ import com.github.javaparser.ast.type.ReferenceType; import com.github.javaparser.ast.type.TypeParameter; import com.github.javaparser.ast.visitor.GenericVisitor; import com.github.javaparser.ast.visitor.VoidVisitor; -import java.util.Arrays; import java.util.EnumSet; -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; @@ -45,7 +43,6 @@ import com.github.javaparser.metamodel.JavaParserMetaModel; import javax.annotation.Generated; import com.github.javaparser.TokenRange; import com.github.javaparser.resolution.Resolvable; -import com.github.javaparser.resolution.declarations.ResolvedAnnotationDeclaration; import com.github.javaparser.resolution.declarations.ResolvedConstructorDeclaration; import java.util.function.Consumer; @@ -62,28 +59,32 @@ public final class ConstructorDeclaration extends CallableDeclaration<Constructo private BlockStmt body; public ConstructorDeclaration() { - this(null, EnumSet.noneOf(Modifier.class), new NodeList<>(), new NodeList<>(), new SimpleName(), new NodeList<>(), new NodeList<>(), new BlockStmt()); + this(null, EnumSet.noneOf(Modifier.class), new NodeList<>(), new NodeList<>(), new SimpleName(), new NodeList<>(), new NodeList<>(), new BlockStmt(), null); } public ConstructorDeclaration(String name) { - this(null, EnumSet.of(Modifier.PUBLIC), new NodeList<>(), new NodeList<>(), new SimpleName(name), new NodeList<>(), new NodeList<>(), new BlockStmt()); + this(null, EnumSet.of(Modifier.PUBLIC), new NodeList<>(), new NodeList<>(), new SimpleName(name), new NodeList<>(), new NodeList<>(), new BlockStmt(), null); } public ConstructorDeclaration(EnumSet<Modifier> modifiers, String name) { - this(null, modifiers, new NodeList<>(), new NodeList<>(), new SimpleName(name), new NodeList<>(), new NodeList<>(), new BlockStmt()); + this(null, modifiers, new NodeList<>(), new NodeList<>(), new SimpleName(name), new NodeList<>(), new NodeList<>(), new BlockStmt(), null); } - @AllFieldsConstructor public ConstructorDeclaration(EnumSet<Modifier> modifiers, NodeList<AnnotationExpr> annotations, NodeList<TypeParameter> typeParameters, SimpleName name, NodeList<Parameter> parameters, NodeList<ReferenceType> thrownExceptions, BlockStmt body) { - this(null, modifiers, annotations, typeParameters, name, parameters, thrownExceptions, body); + this(null, modifiers, annotations, typeParameters, name, parameters, thrownExceptions, body, null); + } + + @AllFieldsConstructor + public ConstructorDeclaration(EnumSet<Modifier> modifiers, NodeList<AnnotationExpr> annotations, NodeList<TypeParameter> typeParameters, SimpleName name, NodeList<Parameter> parameters, NodeList<ReferenceType> thrownExceptions, BlockStmt body, ReceiverParameter receiverParameter) { + this(null, modifiers, annotations, typeParameters, name, parameters, thrownExceptions, body, receiverParameter); } /** * This constructor is used by the parser and is considered private. */ @Generated("com.github.javaparser.generator.core.node.MainConstructorGenerator") - public ConstructorDeclaration(TokenRange tokenRange, EnumSet<Modifier> modifiers, NodeList<AnnotationExpr> annotations, NodeList<TypeParameter> typeParameters, SimpleName name, NodeList<Parameter> parameters, NodeList<ReferenceType> thrownExceptions, BlockStmt body) { - super(tokenRange, modifiers, annotations, typeParameters, name, parameters, thrownExceptions); + public ConstructorDeclaration(TokenRange tokenRange, EnumSet<Modifier> modifiers, NodeList<AnnotationExpr> annotations, NodeList<TypeParameter> typeParameters, SimpleName name, NodeList<Parameter> parameters, NodeList<ReferenceType> thrownExceptions, BlockStmt body, ReceiverParameter receiverParameter) { + super(tokenRange, modifiers, annotations, typeParameters, name, parameters, thrownExceptions, receiverParameter); setBody(body); customInitialization(); } diff --git a/javaparser-core/src/main/java/com/github/javaparser/ast/body/MethodDeclaration.java b/javaparser-core/src/main/java/com/github/javaparser/ast/body/MethodDeclaration.java index dc701e68a..658a2d8ef 100644 --- a/javaparser-core/src/main/java/com/github/javaparser/ast/body/MethodDeclaration.java +++ b/javaparser-core/src/main/java/com/github/javaparser/ast/body/MethodDeclaration.java @@ -36,9 +36,7 @@ import com.github.javaparser.ast.type.Type; import com.github.javaparser.ast.type.TypeParameter; import com.github.javaparser.ast.visitor.GenericVisitor; import com.github.javaparser.ast.visitor.VoidVisitor; -import java.util.Arrays; import java.util.EnumSet; -import java.util.List; import java.util.Optional; import static com.github.javaparser.ast.Modifier.*; import static com.github.javaparser.utils.Utils.assertNotNull; @@ -67,8 +65,6 @@ public final class MethodDeclaration extends CallableDeclaration<MethodDeclarati private BlockStmt body; - private ReceiverParameter receiverParameter; - public MethodDeclaration() { this(null, EnumSet.noneOf(Modifier.class), new NodeList<>(), new NodeList<>(), new ClassOrInterfaceType(), new SimpleName(), new NodeList<>(), new NodeList<>(), new BlockStmt(), null); } @@ -102,7 +98,7 @@ public final class MethodDeclaration extends CallableDeclaration<MethodDeclarati */ @Generated("com.github.javaparser.generator.core.node.MainConstructorGenerator") public MethodDeclaration(TokenRange tokenRange, EnumSet<Modifier> modifiers, NodeList<AnnotationExpr> annotations, NodeList<TypeParameter> typeParameters, Type type, SimpleName name, NodeList<Parameter> parameters, NodeList<ReferenceType> thrownExceptions, BlockStmt body, ReceiverParameter receiverParameter) { - super(tokenRange, modifiers, annotations, typeParameters, name, parameters, thrownExceptions); + super(tokenRange, modifiers, annotations, typeParameters, name, parameters, thrownExceptions, receiverParameter); setType(type); setBody(body); setReceiverParameter(receiverParameter); @@ -282,12 +278,6 @@ public final class MethodDeclaration extends CallableDeclaration<MethodDeclarati return true; } } - if (receiverParameter != null) { - if (node == receiverParameter) { - removeReceiverParameter(); - return true; - } - } return super.remove(node); } @@ -319,12 +309,6 @@ public final class MethodDeclaration extends CallableDeclaration<MethodDeclarati return true; } } - if (receiverParameter != null) { - if (node == receiverParameter) { - setReceiverParameter((ReceiverParameter) replacementNode); - return true; - } - } if (node == type) { setType((Type) replacementNode); return true; @@ -353,27 +337,4 @@ public final class MethodDeclaration extends CallableDeclaration<MethodDeclarati public ResolvedMethodDeclaration resolve() { return getSymbolResolver().resolveDeclaration(this, ResolvedMethodDeclaration.class); } - - @Generated("com.github.javaparser.generator.core.node.PropertyGenerator") - public Optional<ReceiverParameter> getReceiverParameter() { - return Optional.ofNullable(receiverParameter); - } - - @Generated("com.github.javaparser.generator.core.node.PropertyGenerator") - public MethodDeclaration setReceiverParameter(final ReceiverParameter receiverParameter) { - if (receiverParameter == this.receiverParameter) { - return (MethodDeclaration) this; - } - notifyPropertyChange(ObservableProperty.RECEIVER_PARAMETER, this.receiverParameter, receiverParameter); - if (this.receiverParameter != null) - this.receiverParameter.setParentNode(null); - this.receiverParameter = receiverParameter; - setAsParentNodeOf(receiverParameter); - return this; - } - - @Generated("com.github.javaparser.generator.core.node.RemoveMethodGenerator") - public MethodDeclaration removeReceiverParameter() { - return setReceiverParameter((ReceiverParameter) null); - } } diff --git a/javaparser-core/src/main/java/com/github/javaparser/ast/visitor/CloneVisitor.java b/javaparser-core/src/main/java/com/github/javaparser/ast/visitor/CloneVisitor.java index 5f77fc76a..43cd1487f 100644 --- a/javaparser-core/src/main/java/com/github/javaparser/ast/visitor/CloneVisitor.java +++ b/javaparser-core/src/main/java/com/github/javaparser/ast/visitor/CloneVisitor.java @@ -189,7 +189,7 @@ public class CloneVisitor implements GenericVisitor<Visitable, Object> { NodeList<TypeParameter> typeParameters = cloneList(n.getTypeParameters(), arg); NodeList<AnnotationExpr> annotations = cloneList(n.getAnnotations(), arg); Comment comment = cloneNode(n.getComment(), arg); - ConstructorDeclaration r = new ConstructorDeclaration(n.getTokenRange().orElse(null), n.getModifiers(), annotations, typeParameters, name, parameters, thrownExceptions, body); + ConstructorDeclaration r = new ConstructorDeclaration(n.getTokenRange().orElse(null), n.getModifiers(), annotations, typeParameters, name, parameters, thrownExceptions, body, null); r.setComment(comment); return r; } diff --git a/javaparser-core/src/main/java/com/github/javaparser/metamodel/CallableDeclarationMetaModel.java b/javaparser-core/src/main/java/com/github/javaparser/metamodel/CallableDeclarationMetaModel.java index 358ff424c..040762f0e 100644 --- a/javaparser-core/src/main/java/com/github/javaparser/metamodel/CallableDeclarationMetaModel.java +++ b/javaparser-core/src/main/java/com/github/javaparser/metamodel/CallableDeclarationMetaModel.java @@ -19,6 +19,8 @@ public class CallableDeclarationMetaModel extends BodyDeclarationMetaModel { public PropertyMetaModel parametersPropertyMetaModel; + public PropertyMetaModel receiverParameterPropertyMetaModel; + public PropertyMetaModel thrownExceptionsPropertyMetaModel; public PropertyMetaModel typeParametersPropertyMetaModel; diff --git a/javaparser-core/src/main/java/com/github/javaparser/metamodel/JavaParserMetaModel.java b/javaparser-core/src/main/java/com/github/javaparser/metamodel/JavaParserMetaModel.java index fa5132fa4..6c7c84444 100644 --- a/javaparser-core/src/main/java/com/github/javaparser/metamodel/JavaParserMetaModel.java +++ b/javaparser-core/src/main/java/com/github/javaparser/metamodel/JavaParserMetaModel.java @@ -23,6 +23,7 @@ public final class JavaParserMetaModel { callableDeclarationMetaModel.getConstructorParameters().add(callableDeclarationMetaModel.namePropertyMetaModel); callableDeclarationMetaModel.getConstructorParameters().add(callableDeclarationMetaModel.parametersPropertyMetaModel); callableDeclarationMetaModel.getConstructorParameters().add(callableDeclarationMetaModel.thrownExceptionsPropertyMetaModel); + callableDeclarationMetaModel.getConstructorParameters().add(callableDeclarationMetaModel.receiverParameterPropertyMetaModel); typeMetaModel.getConstructorParameters().add(typeMetaModel.annotationsPropertyMetaModel); annotationExprMetaModel.getConstructorParameters().add(annotationExprMetaModel.namePropertyMetaModel); typeDeclarationMetaModel.getConstructorParameters().add(typeDeclarationMetaModel.modifiersPropertyMetaModel); @@ -68,6 +69,7 @@ public final class JavaParserMetaModel { constructorDeclarationMetaModel.getConstructorParameters().add(callableDeclarationMetaModel.parametersPropertyMetaModel); constructorDeclarationMetaModel.getConstructorParameters().add(callableDeclarationMetaModel.thrownExceptionsPropertyMetaModel); constructorDeclarationMetaModel.getConstructorParameters().add(constructorDeclarationMetaModel.bodyPropertyMetaModel); + constructorDeclarationMetaModel.getConstructorParameters().add(callableDeclarationMetaModel.receiverParameterPropertyMetaModel); enumConstantDeclarationMetaModel.getConstructorParameters().add(bodyDeclarationMetaModel.annotationsPropertyMetaModel); enumConstantDeclarationMetaModel.getConstructorParameters().add(enumConstantDeclarationMetaModel.namePropertyMetaModel); enumConstantDeclarationMetaModel.getConstructorParameters().add(enumConstantDeclarationMetaModel.argumentsPropertyMetaModel); @@ -91,7 +93,7 @@ public final class JavaParserMetaModel { methodDeclarationMetaModel.getConstructorParameters().add(callableDeclarationMetaModel.parametersPropertyMetaModel); methodDeclarationMetaModel.getConstructorParameters().add(callableDeclarationMetaModel.thrownExceptionsPropertyMetaModel); methodDeclarationMetaModel.getConstructorParameters().add(methodDeclarationMetaModel.bodyPropertyMetaModel); - methodDeclarationMetaModel.getConstructorParameters().add(methodDeclarationMetaModel.receiverParameterPropertyMetaModel); + methodDeclarationMetaModel.getConstructorParameters().add(callableDeclarationMetaModel.receiverParameterPropertyMetaModel); parameterMetaModel.getConstructorParameters().add(parameterMetaModel.modifiersPropertyMetaModel); parameterMetaModel.getConstructorParameters().add(parameterMetaModel.annotationsPropertyMetaModel); parameterMetaModel.getConstructorParameters().add(parameterMetaModel.typePropertyMetaModel); @@ -365,6 +367,8 @@ public final class JavaParserMetaModel { callableDeclarationMetaModel.getDeclaredPropertyMetaModels().add(callableDeclarationMetaModel.namePropertyMetaModel); callableDeclarationMetaModel.parametersPropertyMetaModel = new PropertyMetaModel(callableDeclarationMetaModel, "parameters", com.github.javaparser.ast.body.Parameter.class, Optional.of(parameterMetaModel), false, false, true, false, false); callableDeclarationMetaModel.getDeclaredPropertyMetaModels().add(callableDeclarationMetaModel.parametersPropertyMetaModel); + callableDeclarationMetaModel.receiverParameterPropertyMetaModel = new PropertyMetaModel(callableDeclarationMetaModel, "receiverParameter", com.github.javaparser.ast.body.ReceiverParameter.class, Optional.of(receiverParameterMetaModel), true, false, false, false, false); + callableDeclarationMetaModel.getDeclaredPropertyMetaModels().add(callableDeclarationMetaModel.receiverParameterPropertyMetaModel); callableDeclarationMetaModel.thrownExceptionsPropertyMetaModel = new PropertyMetaModel(callableDeclarationMetaModel, "thrownExceptions", com.github.javaparser.ast.type.ReferenceType.class, Optional.of(referenceTypeMetaModel), false, false, true, false, false); callableDeclarationMetaModel.getDeclaredPropertyMetaModels().add(callableDeclarationMetaModel.thrownExceptionsPropertyMetaModel); callableDeclarationMetaModel.typeParametersPropertyMetaModel = new PropertyMetaModel(callableDeclarationMetaModel, "typeParameters", com.github.javaparser.ast.type.TypeParameter.class, Optional.of(typeParameterMetaModel), false, false, true, false, false); @@ -445,8 +449,6 @@ public final class JavaParserMetaModel { initializerDeclarationMetaModel.getDeclaredPropertyMetaModels().add(initializerDeclarationMetaModel.isStaticPropertyMetaModel); methodDeclarationMetaModel.bodyPropertyMetaModel = new PropertyMetaModel(methodDeclarationMetaModel, "body", com.github.javaparser.ast.stmt.BlockStmt.class, Optional.of(blockStmtMetaModel), true, false, false, false, false); methodDeclarationMetaModel.getDeclaredPropertyMetaModels().add(methodDeclarationMetaModel.bodyPropertyMetaModel); - methodDeclarationMetaModel.receiverParameterPropertyMetaModel = new PropertyMetaModel(methodDeclarationMetaModel, "receiverParameter", com.github.javaparser.ast.body.ReceiverParameter.class, Optional.of(receiverParameterMetaModel), true, false, false, false, false); - methodDeclarationMetaModel.getDeclaredPropertyMetaModels().add(methodDeclarationMetaModel.receiverParameterPropertyMetaModel); methodDeclarationMetaModel.typePropertyMetaModel = new PropertyMetaModel(methodDeclarationMetaModel, "type", com.github.javaparser.ast.type.Type.class, Optional.of(typeMetaModel), false, false, false, false, false); methodDeclarationMetaModel.getDeclaredPropertyMetaModels().add(methodDeclarationMetaModel.typePropertyMetaModel); parameterMetaModel.annotationsPropertyMetaModel = new PropertyMetaModel(parameterMetaModel, "annotations", com.github.javaparser.ast.expr.AnnotationExpr.class, Optional.of(annotationExprMetaModel), false, false, true, false, false); diff --git a/javaparser-core/src/main/java/com/github/javaparser/metamodel/MethodDeclarationMetaModel.java b/javaparser-core/src/main/java/com/github/javaparser/metamodel/MethodDeclarationMetaModel.java index 8378bd9aa..74aaeae69 100644 --- a/javaparser-core/src/main/java/com/github/javaparser/metamodel/MethodDeclarationMetaModel.java +++ b/javaparser-core/src/main/java/com/github/javaparser/metamodel/MethodDeclarationMetaModel.java @@ -10,7 +10,5 @@ public class MethodDeclarationMetaModel extends CallableDeclarationMetaModel { public PropertyMetaModel bodyPropertyMetaModel; - public PropertyMetaModel receiverParameterPropertyMetaModel; - public PropertyMetaModel typePropertyMetaModel; } diff --git a/javaparser-core/src/main/javacc/java.jj b/javaparser-core/src/main/javacc/java.jj index 9eccde9da..c38b1e429 100644 --- a/javaparser-core/src/main/javacc/java.jj +++ b/javaparser-core/src/main/javacc/java.jj @@ -1304,10 +1304,7 @@ ConstructorDeclaration ConstructorDeclaration(ModifierHolder modifier): if (exConsInv != null) { stmts = prepend(stmts, exConsInv); } - if (parameters.b != null) { - addProblem("The receiver cannot be used in a static context."); - } - return new ConstructorDeclaration(range(begin, token()), modifier.modifiers, modifier.annotations, typeParameters.list, name, parameters.a, throws_, new BlockStmt(range(blockBegin, token()), stmts)); + return new ConstructorDeclaration(range(begin, token()), modifier.modifiers, modifier.annotations, typeParameters.list, name, parameters.a, throws_, new BlockStmt(range(blockBegin, token()), stmts), parameters.b); } } |