From ab12a2e2180dc32fdb99c57b25f391f0de8e066b Mon Sep 17 00:00:00 2001 From: Danny van Bruggen Date: Sat, 22 Apr 2017 23:16:43 +0200 Subject: [PATCH] Add custom initialization code option for constructors --- .../generator/core/node/MainConstructorGenerator.java | 4 +++- .../src/main/java/com/github/javaparser/ast/Node.java | 8 ++++++++ .../github/javaparser/ast/body/VariableDeclarator.java | 3 ++- 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/javaparser-core-generators/src/main/java/com/github/javaparser/generator/core/node/MainConstructorGenerator.java b/javaparser-core-generators/src/main/java/com/github/javaparser/generator/core/node/MainConstructorGenerator.java index a01775b293..867e09d081 100644 --- a/javaparser-core-generators/src/main/java/com/github/javaparser/generator/core/node/MainConstructorGenerator.java +++ b/javaparser-core-generators/src/main/java/com/github/javaparser/generator/core/node/MainConstructorGenerator.java @@ -40,13 +40,15 @@ protected void generateNode(BaseNodeMetaModel nodeMetaModel, CompilationUnit nod for (PropertyMetaModel parameter : nodeMetaModel.getConstructorParameters()) { constructor.addParameter(parameter.getTypeNameForSetter(), parameter.getName()); if (nodeMetaModel.getDeclaredPropertyMetaModels().contains(parameter)) { - body.addStatement(parseStatement(f("%s(%s);", parameter.getSetterMethodName(), parameter.getName()))); + body.addStatement(f("%s(%s);", parameter.getSetterMethodName(), parameter.getName())); } else { superCall.append(parameter.getName()); } } body.getStatements().add(0, parseExplicitConstructorInvocationStmt(superCall.toString())); + + body.addStatement("customInitialization();"); replaceWhenSameSignature(nodeCoid, constructor); nodeCu.addImport(Range.class); diff --git a/javaparser-core/src/main/java/com/github/javaparser/ast/Node.java b/javaparser-core/src/main/java/com/github/javaparser/ast/Node.java index 49755e4457..05f3375acb 100644 --- a/javaparser-core/src/main/java/com/github/javaparser/ast/Node.java +++ b/javaparser-core/src/main/java/com/github/javaparser/ast/Node.java @@ -150,6 +150,14 @@ public Node(Range range) { this.range = range; } + /** + * Called in every constructor for node specific code. + * It can't be written in the constructor itself because it will + * be overwritten during code generation. + */ + protected void customInitialization() { + } + /** * This is a comment associated with this node. * diff --git a/javaparser-core/src/main/java/com/github/javaparser/ast/body/VariableDeclarator.java b/javaparser-core/src/main/java/com/github/javaparser/ast/body/VariableDeclarator.java index b50a41248b..d4bf3e702d 100644 --- a/javaparser-core/src/main/java/com/github/javaparser/ast/body/VariableDeclarator.java +++ b/javaparser-core/src/main/java/com/github/javaparser/ast/body/VariableDeclarator.java @@ -91,9 +91,10 @@ public VariableDeclarator(Range range, Type type, SimpleName name, Expression in setType(type); setName(name); setInitializer(initializer); + customInitialization(); } - private void registerObserversForDerivedProperties() { + private void customInitialization() { // We register an observer on the type property. When it is changed the MaximumCommonType is changes as well, // because it is derived from the type of the variables it contains, for this reason we notify about the change this.register(new AstObserverAdapter() {