Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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 @@ -23,9 +23,9 @@

/**
* Declaration of a pattern expression.
*
* <p>
* WARNING: Implemented fairly blindly. Unsure if required or even appropriate. Use with extreme caution.

*
* @author Roger Howell
* @see com.github.javaparser.ast.expr.PatternExpr
*/
Expand All @@ -36,7 +36,12 @@ default boolean isPattern() {
return true;
}

@Override
default ResolvedPatternDeclaration asPattern() {
return this;
}

@Override
default boolean hasName() {
return true;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
import com.github.javaparser.ast.AccessSpecifier;
import com.github.javaparser.ast.Node;
import com.github.javaparser.ast.body.BodyDeclaration;
import com.github.javaparser.ast.body.EnumDeclaration;
import com.github.javaparser.ast.body.FieldDeclaration;
import com.github.javaparser.ast.body.MethodDeclaration;
import com.github.javaparser.ast.type.ClassOrInterfaceType;
Expand All @@ -48,22 +49,18 @@
import com.github.javaparser.symbolsolver.reflectionmodel.ReflectionFactory;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Optional;
import java.util.Set;
import java.util.*;
import java.util.stream.Collectors;

/**
* @author Federico Tomassetti
*/
public class JavaParserEnumDeclaration extends AbstractTypeDeclaration
implements ResolvedEnumDeclaration, MethodResolutionCapability, MethodUsageResolutionCapability {
implements ResolvedEnumDeclaration, MethodResolutionCapability, MethodUsageResolutionCapability,
AssociableToAST<EnumDeclaration> {

private TypeSolver typeSolver;
private com.github.javaparser.ast.body.EnumDeclaration wrappedNode;
private EnumDeclaration wrappedNode;
private JavaParserTypeAdapter<com.github.javaparser.ast.body.EnumDeclaration> javaParserTypeAdapter;

public JavaParserEnumDeclaration(com.github.javaparser.ast.body.EnumDeclaration wrappedNode, TypeSolver typeSolver) {
Expand Down Expand Up @@ -564,4 +561,10 @@ public Optional<ResolvedReferenceTypeDeclaration> containerType() {
public List<ResolvedConstructorDeclaration> getConstructors() {
return AstResolutionUtils.getConstructors(this.wrappedNode, typeSolver, this);
}

@Override
public Optional<EnumDeclaration> toAst() {
return Optional.of(wrappedNode);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -21,25 +21,26 @@

package com.github.javaparser.symbolsolver.javaparsermodel.declarations;

import static com.github.javaparser.symbolsolver.javaparser.Navigator.demandParentNode;

import java.util.Optional;

import com.github.javaparser.ast.AccessSpecifier;
import com.github.javaparser.ast.Modifier;
import com.github.javaparser.ast.body.FieldDeclaration;
import com.github.javaparser.ast.body.TypeDeclaration;
import com.github.javaparser.ast.body.VariableDeclarator;
import com.github.javaparser.resolution.declarations.AssociableToAST;
import com.github.javaparser.resolution.declarations.ResolvedFieldDeclaration;
import com.github.javaparser.resolution.declarations.ResolvedTypeDeclaration;
import com.github.javaparser.resolution.types.ResolvedType;
import com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade;
import com.github.javaparser.symbolsolver.model.resolution.TypeSolver;

import java.util.Optional;

import static com.github.javaparser.symbolsolver.javaparser.Navigator.demandParentNode;

/**
* @author Federico Tomassetti
*/
public class JavaParserFieldDeclaration implements ResolvedFieldDeclaration {
public class JavaParserFieldDeclaration implements ResolvedFieldDeclaration, AssociableToAST<FieldDeclaration> {

private VariableDeclarator variableDeclarator;
private com.github.javaparser.ast.body.FieldDeclaration wrappedNode;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -114,21 +114,6 @@ public String getName() {
return wrappedNode.getName().getId();
}

@Override
public boolean isField() {
throw new UnsupportedOperationException();
}

@Override
public boolean isParameter() {
throw new UnsupportedOperationException();
}

@Override
public boolean isType() {
throw new UnsupportedOperationException();
}

@Override
public List<ResolvedTypeParameterDeclaration> getTypeParameters() {
return this.wrappedNode.getTypeParameters().stream().map((astTp) -> new JavaParserTypeParameter(astTp, typeSolver)).collect(Collectors.toList());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@

import com.github.javaparser.ast.body.Parameter;
import com.github.javaparser.ast.type.UnknownType;
import com.github.javaparser.resolution.declarations.AssociableToAST;
import com.github.javaparser.resolution.declarations.ResolvedParameterDeclaration;
import com.github.javaparser.resolution.types.ResolvedArrayType;
import com.github.javaparser.resolution.types.ResolvedType;
Expand All @@ -37,10 +38,10 @@
/**
* @author Federico Tomassetti
*/
public class JavaParserParameterDeclaration implements ResolvedParameterDeclaration {
public class JavaParserParameterDeclaration implements ResolvedParameterDeclaration, AssociableToAST<Parameter> {

private Parameter wrappedNode;
private TypeSolver typeSolver;
private final Parameter wrappedNode;
private final TypeSolver typeSolver;

public JavaParserParameterDeclaration(Parameter wrappedNode, TypeSolver typeSolver) {
this.wrappedNode = wrappedNode;
Expand All @@ -52,26 +53,11 @@ public String getName() {
return wrappedNode.getName().getId();
}

@Override
public boolean isField() {
return false;
}

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

@Override
public boolean isVariadic() {
return wrappedNode.isVarArgs();
}

@Override
public boolean isType() {
throw new UnsupportedOperationException();
}

@Override
public ResolvedType getType() {
if (wrappedNode.getType() instanceof UnknownType && JavaParserFactory.getContext(wrappedNode, typeSolver) instanceof LambdaExprContext) {
Expand All @@ -87,11 +73,6 @@ public ResolvedType getType() {
return res;
}

@Override
public ResolvedParameterDeclaration asParameter() {
return this;
}

/**
* Returns the JavaParser node associated with this JavaParserParameterDeclaration.
*
Expand All @@ -101,5 +82,9 @@ public Parameter getWrappedNode() {
return wrappedNode;
}

@Override
public Optional<Parameter> toAst() {
return Optional.of(wrappedNode);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -22,20 +22,23 @@
package com.github.javaparser.symbolsolver.javaparsermodel.declarations;

import com.github.javaparser.ast.expr.PatternExpr;
import com.github.javaparser.resolution.declarations.AssociableToAST;
import com.github.javaparser.resolution.declarations.ResolvedPatternDeclaration;
import com.github.javaparser.resolution.types.ResolvedType;
import com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade;
import com.github.javaparser.symbolsolver.model.resolution.TypeSolver;

import java.util.Optional;

/**
* WARNING: Implemented fairly blindly. Unsure if required or even appropriate. Use with extreme caution.
*
* @author Roger Howell
*/
public class JavaParserPatternDeclaration implements ResolvedPatternDeclaration {
public class JavaParserPatternDeclaration implements ResolvedPatternDeclaration, AssociableToAST<PatternExpr> {

private PatternExpr wrappedNode;
private TypeSolver typeSolver;
private final PatternExpr wrappedNode;
private final TypeSolver typeSolver;

public JavaParserPatternDeclaration(PatternExpr wrappedNode, TypeSolver typeSolver) {
this.wrappedNode = wrappedNode;
Expand All @@ -47,11 +50,6 @@ public String getName() {
return wrappedNode.getName().getId();
}

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

@Override
public ResolvedType getType() {
return JavaParserFacade.get(typeSolver).convert(wrappedNode.getType(), wrappedNode);
Expand All @@ -67,8 +65,8 @@ public PatternExpr getWrappedNode() {
}

@Override
public ResolvedPatternDeclaration asPattern() {
return this;
public Optional<PatternExpr> toAst() {
return Optional.of(wrappedNode);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -34,11 +34,7 @@
import com.github.javaparser.symbolsolver.model.resolution.TypeSolver;
import com.github.javaparser.symbolsolver.model.typesystem.ReferenceTypeImpl;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Optional;
import java.util.Set;
import java.util.*;
import java.util.stream.Collectors;

import static com.github.javaparser.symbolsolver.javaparser.Navigator.demandParentNode;
Expand Down Expand Up @@ -193,6 +189,11 @@ public boolean isTypeParameter() {
return true;
}

@Override
public ResolvedTypeParameterDeclaration asTypeParameter() {
return this;
}

@Override
public boolean hasDirectlyAnnotation(String canonicalName) {
throw new UnsupportedOperationException();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@
/**
* @author Federico Tomassetti
*/
public class JavaParserTypeVariableDeclaration extends AbstractTypeDeclaration {
public class JavaParserTypeVariableDeclaration extends AbstractTypeDeclaration implements AssociableToAST<TypeParameter> {

private TypeParameter wrappedNode;
private TypeSolver typeSolver;
Expand Down Expand Up @@ -178,4 +178,10 @@ public Optional<ResolvedReferenceTypeDeclaration> containerType() {
public List<ResolvedConstructorDeclaration> getConstructors() {
return Collections.emptyList();
}

@Override
public Optional<TypeParameter> toAst() {
return Optional.of(wrappedNode);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -23,17 +23,20 @@

import com.github.javaparser.ast.body.VariableDeclarator;
import com.github.javaparser.ast.expr.VariableDeclarationExpr;
import com.github.javaparser.resolution.declarations.AssociableToAST;
import com.github.javaparser.resolution.declarations.ResolvedValueDeclaration;
import com.github.javaparser.resolution.types.ResolvedType;
import com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade;
import com.github.javaparser.symbolsolver.model.resolution.TypeSolver;

import java.util.Optional;

import static com.github.javaparser.symbolsolver.javaparser.Navigator.demandParentNode;

/**
* @author Federico Tomassetti
*/
public class JavaParserVariableDeclaration implements ResolvedValueDeclaration {
public class JavaParserVariableDeclaration implements ResolvedValueDeclaration, AssociableToAST<VariableDeclarationExpr> {

private VariableDeclarator variableDeclarator;
private VariableDeclarationExpr wrappedNode;
Expand Down Expand Up @@ -84,4 +87,8 @@ public String toString() {
return "JavaParserVariableDeclaration{" + getName() + "}";
}

@Override
public Optional<VariableDeclarationExpr> toAst() {
return Optional.of(wrappedNode);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -24,11 +24,28 @@
import com.github.javaparser.ast.Node;
import org.junit.jupiter.api.Test;

import java.util.Optional;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;

public interface AssociableToASTTest<T extends Node> {

/**
* Helper method to cast the instance to the correct {@link Class}.
*
* @param instance The instance to be casted.
* @param clazz The expected {@link Class}.
* @param <R> The expected type.
*
* @return The instance casted as the correct type.
*/
default <R extends AssociableToAST<T>> R safeCast(AssociableToAST<?> instance, Class<R> clazz) {
if (clazz.isInstance(instance))
return clazz.cast(instance);
throw new UnsupportedOperationException(String.format("Unable to cast %s into %s.", instance.getClass().getName(), clazz.getName()));
}

AssociableToAST<T> createValue();

/**
Expand All @@ -38,16 +55,16 @@ public interface AssociableToASTTest<T extends Node> {
*
* @return The node being wrapped.
*/
T getWrappedDeclaration(AssociableToAST<T> associableToAST);
Optional<T> getWrappedDeclaration(AssociableToAST<T> associableToAST);

@Test
default void checkThatToASTMatchesTheCorrectWrappedNode() {
AssociableToAST<T> associableToAST = createValue();
T wrappedNode = getWrappedDeclaration(associableToAST);
if (wrappedNode == null)
assertFalse(associableToAST.toAst().isPresent());
Optional<T> wrappedNode = getWrappedDeclaration(associableToAST);
if (wrappedNode.isPresent())
assertEquals(wrappedNode, associableToAST.toAst());
else
assertEquals(wrappedNode, associableToAST.toAst().get());
assertFalse(associableToAST.toAst().isPresent());
}

}
}
Loading