Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

PatternExpr -> TypePatternExpr refactor in preparation for record pattern implementation #4387

Merged
merged 18 commits into from
May 2, 2024
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
c04439b
Intellij refactor: PatternExpr -> TypePatternExpr
johannescoetzee Apr 24, 2024
42405a2
Refactor: PatternExpr -> TypePatternExpr in java.jj
johannescoetzee Apr 24, 2024
bbc8f26
Add TypePatternExpr codegen
johannescoetzee Apr 24, 2024
4b5e2fd
Remove now-unused PatternExprMetaModel and Expression.XPatternExpress…
johannescoetzee Apr 24, 2024
ca9f594
Add PatternExpr abstract class and add it to the MetaModelGenerator
johannescoetzee Apr 24, 2024
8ef52f9
Add PatternExpr codegen
johannescoetzee Apr 24, 2024
07dd530
Make TypePatternExpr a subclass of PatternExpr with codegen
johannescoetzee Apr 24, 2024
0667001
Update grammar to reflect new pattern inheritance structure
johannescoetzee Apr 24, 2024
7611bf5
Move TypePatternExpr type to PatternExpr
johannescoetzee Apr 24, 2024
d3fb640
Expect PatternExpr instead of TypePatternExpr in instanceof
johannescoetzee Apr 24, 2024
b59fc92
Replace TypePatternExpr with PatternExpr in javaparsermodel.contexts
johannescoetzee Apr 24, 2024
c33390a
Replace TypePatternExpr cast and instanceof where possible
johannescoetzee Apr 29, 2024
c2f3eea
Fix copyright feedback
johannescoetzee Apr 30, 2024
2a364d8
Remove unused imports
johannescoetzee Apr 30, 2024
3c506b3
Merge branch 'master' into johannes/record-patterns
johannescoetzee May 2, 2024
3f33cef
Add documentation for PatternExpr
johannescoetzee May 2, 2024
bf90de2
Add tests for generated pattern methods
johannescoetzee May 2, 2024
aab474b
Merge branch 'master' into johannes/record-patterns
jlerbsc May 2, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -30,12 +30,10 @@
import com.github.javaparser.metamodel.ExpressionMetaModel;
import com.github.javaparser.metamodel.JavaParserMetaModel;
import com.github.javaparser.resolution.types.ResolvedType;

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

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

/**
Expand All @@ -44,28 +42,26 @@
* @author Julio Vilmar Gesser
*/
public abstract class Expression extends Node {

/**
* Returns {@code true} when the Node to be tested is not an
* {@link EnclosedExpr}, {@code false} otherwise.
*/
public static final Predicate<Node> IS_NOT_ENCLOSED_EXPR = n -> !(n instanceof EnclosedExpr);


/**
* A {@link Function} that returns its argument (an {@link Expression}) when
* the argument is not an {@link EnclosedExpr}, otherwise the first
* {@link Expression} down the argument's 'inner' path that is not an
* A {@link Function} that returns its argument (an {@link Expression}) when
* the argument is not an {@link EnclosedExpr}, otherwise the first
* {@link Expression} down the argument's 'inner' path that is not an
* {@link EnclosedExpr}.
*
*/
public static final Function<Expression, Expression> EXCLUDE_ENCLOSED_EXPR = expr -> {
while (expr.isEnclosedExpr()) {
expr = expr.asEnclosedExpr().getInner();
}
return expr;
};

@AllFieldsConstructor
public Expression() {
this(null);
Expand Down Expand Up @@ -881,4 +877,19 @@ public final boolean elidesTypeArguments() {
NodeWithTypeArguments nwta = (NodeWithTypeArguments) this;
return scope.elidesTypeArguments() && (!nwta.getTypeArguments().isPresent() || nwta.isUsingDiamondOperator());
}

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This appears to be generated by the TypeCastingGenerator, whereas it seems to have been added manually.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think the same applies as the comment I left below regarding formatting and project configuration. I think this is generated formatting which just hasn't been included before.

public boolean isTypePatternExpr() {
return false;
}

public TypePatternExpr asTypePatternExpr() {
throw new IllegalStateException(f("%s is not TypePatternExpr, it is %s", this, this.getClass().getSimpleName()));
}

public Optional<TypePatternExpr> toTypePatternExpr() {
return Optional.empty();
}

public void ifTypePatternExpr(Consumer<TypePatternExpr> action) {
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -32,12 +32,10 @@
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.PatternExprMetaModel;

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

import static com.github.javaparser.utils.Utils.assertNotNull;
import com.github.javaparser.metamodel.TypePatternExprMetaModel;

/**
* <h1>The instanceof statement</h1>
Expand Down Expand Up @@ -152,30 +150,6 @@ public TypePatternExpr setType(final ReferenceType type) {
return this;
}

@Override
@Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
public boolean isPatternExpr() {
return true;
}

@Override
@Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
public TypePatternExpr asPatternExpr() {
return this;
}

@Override
@Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
public Optional<TypePatternExpr> toPatternExpr() {
return Optional.of(this);
}

@Override
@Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
public void ifPatternExpr(Consumer<TypePatternExpr> action) {
action.accept(this);
}

@Override
@Generated("com.github.javaparser.generator.core.node.ReplaceMethodGenerator")
public boolean replace(Node node, Node replacementNode) {
Expand Down Expand Up @@ -207,8 +181,8 @@ public TypePatternExpr clone() {

@Override
@Generated("com.github.javaparser.generator.core.node.GetMetaModelGenerator")
public PatternExprMetaModel getMetaModel() {
return JavaParserMetaModel.patternExprMetaModel;
public TypePatternExprMetaModel getMetaModel() {
return JavaParserMetaModel.typePatternExprMetaModel;
}

@Generated("com.github.javaparser.generator.core.node.PropertyGenerator")
Expand Down Expand Up @@ -244,4 +218,23 @@ public boolean remove(Node node) {
}
return super.remove(node);
}

@Override
public boolean isTypePatternExpr() {
return true;
}

@Override
public TypePatternExpr asTypePatternExpr() {
return this;
}

@Override
public Optional<TypePatternExpr> toTypePatternExpr() {
return Optional.of(this);
}

public void ifTypePatternExpr(Consumer<TypePatternExpr> action) {
action.accept(this);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@

import com.github.javaparser.ast.Generated;
import com.github.javaparser.ast.expr.TypePatternExpr;

import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
Expand Down Expand Up @@ -205,9 +204,9 @@ private static void initializeConstructorParameters() {
objectCreationExprMetaModel.getConstructorParameters().add(objectCreationExprMetaModel.typeArgumentsPropertyMetaModel);
objectCreationExprMetaModel.getConstructorParameters().add(objectCreationExprMetaModel.argumentsPropertyMetaModel);
objectCreationExprMetaModel.getConstructorParameters().add(objectCreationExprMetaModel.anonymousClassBodyPropertyMetaModel);
patternExprMetaModel.getConstructorParameters().add(patternExprMetaModel.modifiersPropertyMetaModel);
patternExprMetaModel.getConstructorParameters().add(patternExprMetaModel.typePropertyMetaModel);
patternExprMetaModel.getConstructorParameters().add(patternExprMetaModel.namePropertyMetaModel);
typePatternExprMetaModel.getConstructorParameters().add(typePatternExprMetaModel.modifiersPropertyMetaModel);
typePatternExprMetaModel.getConstructorParameters().add(typePatternExprMetaModel.typePropertyMetaModel);
typePatternExprMetaModel.getConstructorParameters().add(typePatternExprMetaModel.namePropertyMetaModel);
singleMemberAnnotationExprMetaModel.getConstructorParameters().add(annotationExprMetaModel.namePropertyMetaModel);
singleMemberAnnotationExprMetaModel.getConstructorParameters().add(singleMemberAnnotationExprMetaModel.memberValuePropertyMetaModel);
simpleNameMetaModel.getConstructorParameters().add(simpleNameMetaModel.identifierPropertyMetaModel);
Expand Down Expand Up @@ -379,7 +378,6 @@ private static void initializeNodeMetaModels() {
nodeMetaModels.add(objectCreationExprMetaModel);
nodeMetaModels.add(packageDeclarationMetaModel);
nodeMetaModels.add(parameterMetaModel);
nodeMetaModels.add(patternExprMetaModel);
nodeMetaModels.add(primitiveTypeMetaModel);
nodeMetaModels.add(receiverParameterMetaModel);
nodeMetaModels.add(recordDeclarationMetaModel);
Expand All @@ -402,6 +400,7 @@ private static void initializeNodeMetaModels() {
nodeMetaModels.add(typeExprMetaModel);
nodeMetaModels.add(typeMetaModel);
nodeMetaModels.add(typeParameterMetaModel);
nodeMetaModels.add(typePatternExprMetaModel);
nodeMetaModels.add(unaryExprMetaModel);
nodeMetaModels.add(unionTypeMetaModel);
nodeMetaModels.add(unknownTypeMetaModel);
Expand Down Expand Up @@ -615,7 +614,7 @@ private static void initializePropertyMetaModels() {
fieldAccessExprMetaModel.getDerivedPropertyMetaModels().add(fieldAccessExprMetaModel.usingDiamondOperatorPropertyMetaModel);
instanceOfExprMetaModel.expressionPropertyMetaModel = new PropertyMetaModel(instanceOfExprMetaModel, "expression", com.github.javaparser.ast.expr.Expression.class, Optional.of(expressionMetaModel), false, false, false, false);
instanceOfExprMetaModel.getDeclaredPropertyMetaModels().add(instanceOfExprMetaModel.expressionPropertyMetaModel);
instanceOfExprMetaModel.patternPropertyMetaModel = new PropertyMetaModel(instanceOfExprMetaModel, "pattern", TypePatternExpr.class, Optional.of(patternExprMetaModel), true, false, false, false);
instanceOfExprMetaModel.patternPropertyMetaModel = new PropertyMetaModel(instanceOfExprMetaModel, "pattern", com.github.javaparser.ast.expr.TypePatternExpr.class, Optional.of(typePatternExprMetaModel), true, false, false, false);
instanceOfExprMetaModel.getDeclaredPropertyMetaModels().add(instanceOfExprMetaModel.patternPropertyMetaModel);
instanceOfExprMetaModel.typePropertyMetaModel = new PropertyMetaModel(instanceOfExprMetaModel, "type", com.github.javaparser.ast.type.ReferenceType.class, Optional.of(referenceTypeMetaModel), false, false, false, false);
instanceOfExprMetaModel.getDeclaredPropertyMetaModels().add(instanceOfExprMetaModel.typePropertyMetaModel);
Expand Down Expand Up @@ -669,12 +668,12 @@ private static void initializePropertyMetaModels() {
objectCreationExprMetaModel.getDeclaredPropertyMetaModels().add(objectCreationExprMetaModel.typeArgumentsPropertyMetaModel);
objectCreationExprMetaModel.usingDiamondOperatorPropertyMetaModel = new PropertyMetaModel(objectCreationExprMetaModel, "usingDiamondOperator", boolean.class, Optional.empty(), false, false, false, false);
objectCreationExprMetaModel.getDerivedPropertyMetaModels().add(objectCreationExprMetaModel.usingDiamondOperatorPropertyMetaModel);
patternExprMetaModel.modifiersPropertyMetaModel = new PropertyMetaModel(patternExprMetaModel, "modifiers", com.github.javaparser.ast.Modifier.class, Optional.of(modifierMetaModel), false, false, true, false);
patternExprMetaModel.getDeclaredPropertyMetaModels().add(patternExprMetaModel.modifiersPropertyMetaModel);
patternExprMetaModel.namePropertyMetaModel = new PropertyMetaModel(patternExprMetaModel, "name", com.github.javaparser.ast.expr.SimpleName.class, Optional.of(simpleNameMetaModel), false, false, false, false);
patternExprMetaModel.getDeclaredPropertyMetaModels().add(patternExprMetaModel.namePropertyMetaModel);
patternExprMetaModel.typePropertyMetaModel = new PropertyMetaModel(patternExprMetaModel, "type", com.github.javaparser.ast.type.ReferenceType.class, Optional.of(referenceTypeMetaModel), false, false, false, false);
patternExprMetaModel.getDeclaredPropertyMetaModels().add(patternExprMetaModel.typePropertyMetaModel);
typePatternExprMetaModel.modifiersPropertyMetaModel = new PropertyMetaModel(typePatternExprMetaModel, "modifiers", com.github.javaparser.ast.Modifier.class, Optional.of(modifierMetaModel), false, false, true, false);
typePatternExprMetaModel.getDeclaredPropertyMetaModels().add(typePatternExprMetaModel.modifiersPropertyMetaModel);
typePatternExprMetaModel.namePropertyMetaModel = new PropertyMetaModel(typePatternExprMetaModel, "name", com.github.javaparser.ast.expr.SimpleName.class, Optional.of(simpleNameMetaModel), false, false, false, false);
typePatternExprMetaModel.getDeclaredPropertyMetaModels().add(typePatternExprMetaModel.namePropertyMetaModel);
typePatternExprMetaModel.typePropertyMetaModel = new PropertyMetaModel(typePatternExprMetaModel, "type", com.github.javaparser.ast.type.ReferenceType.class, Optional.of(referenceTypeMetaModel), false, false, false, false);
typePatternExprMetaModel.getDeclaredPropertyMetaModels().add(typePatternExprMetaModel.typePropertyMetaModel);
singleMemberAnnotationExprMetaModel.memberValuePropertyMetaModel = new PropertyMetaModel(singleMemberAnnotationExprMetaModel, "memberValue", com.github.javaparser.ast.expr.Expression.class, Optional.of(expressionMetaModel), false, false, false, false);
singleMemberAnnotationExprMetaModel.getDeclaredPropertyMetaModels().add(singleMemberAnnotationExprMetaModel.memberValuePropertyMetaModel);
simpleNameMetaModel.identifierPropertyMetaModel = new PropertyMetaModel(simpleNameMetaModel, "identifier", java.lang.String.class, Optional.empty(), false, true, false, false);
Expand Down Expand Up @@ -783,8 +782,6 @@ private static void initializePropertyMetaModels() {
switchEntryMetaModel.getDeclaredPropertyMetaModels().add(switchEntryMetaModel.statementsPropertyMetaModel);
switchEntryMetaModel.typePropertyMetaModel = new PropertyMetaModel(switchEntryMetaModel, "type", com.github.javaparser.ast.stmt.SwitchEntry.Type.class, Optional.empty(), false, false, false, false);
switchEntryMetaModel.getDeclaredPropertyMetaModels().add(switchEntryMetaModel.typePropertyMetaModel);
switchEntryMetaModel.guardedEntryPropertyMetaModel = new PropertyMetaModel(switchEntryMetaModel, "guardedEntry", boolean.class, Optional.empty(), false, false, false, false);
switchEntryMetaModel.getDerivedPropertyMetaModels().add(switchEntryMetaModel.guardedEntryPropertyMetaModel);
switchEntryMetaModel.switchStatementEntryPropertyMetaModel = new PropertyMetaModel(switchEntryMetaModel, "switchStatementEntry", boolean.class, Optional.empty(), false, false, false, false);
switchEntryMetaModel.getDerivedPropertyMetaModels().add(switchEntryMetaModel.switchStatementEntryPropertyMetaModel);
switchStmtMetaModel.entriesPropertyMetaModel = new PropertyMetaModel(switchStmtMetaModel, "entries", com.github.javaparser.ast.stmt.SwitchEntry.class, Optional.of(switchEntryMetaModel), false, false, true, false);
Expand Down Expand Up @@ -1056,7 +1053,7 @@ public static Optional<BaseNodeMetaModel> getNodeMetaModel(Class<?> c) {
public static final ObjectCreationExprMetaModel objectCreationExprMetaModel = new ObjectCreationExprMetaModel(Optional.of(expressionMetaModel));

@Generated("com.github.javaparser.generator.metamodel.NodeMetaModelGenerator")
public static final PatternExprMetaModel patternExprMetaModel = new PatternExprMetaModel(Optional.of(expressionMetaModel));
public static final TypePatternExprMetaModel typePatternExprMetaModel = new TypePatternExprMetaModel(Optional.of(expressionMetaModel));

@Generated("com.github.javaparser.generator.metamodel.NodeMetaModelGenerator")
public static final SingleMemberAnnotationExprMetaModel singleMemberAnnotationExprMetaModel = new SingleMemberAnnotationExprMetaModel(Optional.of(annotationExprMetaModel));
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
/*
* Copyright (C) 2007-2010 Júlio Vilmar Gesser.
johannescoetzee marked this conversation as resolved.
Show resolved Hide resolved
* Copyright (C) 2011, 2013-2024 The JavaParser Team.
*
* This file is part of JavaParser.
*
* JavaParser can be used either under the terms of
* a) the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
* b) the terms of the Apache License
*
* You should have received a copy of both licenses in LICENCE.LGPL and
* LICENCE.APACHE. Please refer to those files for details.
*
* JavaParser is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*/
package com.github.javaparser.metamodel;

import java.util.Optional;
import com.github.javaparser.ast.expr.TypePatternExpr;
import com.github.javaparser.ast.Generated;

/**
* This file, class, and its contents are completely generated based on:
* <ul>
* <li>The contents and annotations within the package `com.github.javaparser.ast`, and</li>
* <li>`ALL_NODE_CLASSES` within the class `com.github.javaparser.generator.metamodel.MetaModelGenerator`.</li>
* </ul>
*
* For this reason, any changes made directly to this file will be overwritten the next time generators are run.
*/
@Generated("com.github.javaparser.generator.metamodel.NodeMetaModelGenerator")
public class TypePatternExprMetaModel extends ExpressionMetaModel {

@Generated("com.github.javaparser.generator.metamodel.NodeMetaModelGenerator")
TypePatternExprMetaModel(Optional<BaseNodeMetaModel> superBaseNodeMetaModel) {
super(superBaseNodeMetaModel, TypePatternExpr.class, "TypePatternExpr", "com.github.javaparser.ast.expr", false, false);
}

public PropertyMetaModel modifiersPropertyMetaModel;

public PropertyMetaModel namePropertyMetaModel;

public PropertyMetaModel typePropertyMetaModel;
}
Loading