diff --git a/src/main/java/spoon/refactoring/CtParameterRemoveRefactoring.java b/src/main/java/spoon/refactoring/CtParameterRemoveRefactoring.java index be413743aa1..6a86e967751 100644 --- a/src/main/java/spoon/refactoring/CtParameterRemoveRefactoring.java +++ b/src/main/java/spoon/refactoring/CtParameterRemoveRefactoring.java @@ -285,7 +285,7 @@ protected boolean isRemovedParamOfRefactoredInvocation(CtParameterReference p */ protected void createParameterUsedIssue(CtParameter usedParameter, CtParameterReference parameterUsage) { throw new RefactoringException("The parameter " + usedParameter.getSimpleName() - + " of method: " + parameterUsage.getDeclaringExecutable() + " cannot be removed because it is used (" + parameterUsage.getPosition() + ")"); + + " cannot be removed because it is used (" + parameterUsage.getPosition() + ")"); } /** diff --git a/src/main/java/spoon/reflect/factory/ExecutableFactory.java b/src/main/java/spoon/reflect/factory/ExecutableFactory.java index 0499eca0aae..2f834354856 100644 --- a/src/main/java/spoon/reflect/factory/ExecutableFactory.java +++ b/src/main/java/spoon/reflect/factory/ExecutableFactory.java @@ -85,9 +85,6 @@ public CtParameter createParameter(CtExecutable parent, CtTypeReferenc */ public CtParameterReference createParameterReference(CtParameter parameter) { CtParameterReference ref = factory.Core().createParameterReference(); - if (parameter.getParent() != null) { - ref.setDeclaringExecutable(factory.Executable().createReference((CtExecutable) parameter.getParent())); - } ref.setSimpleName(parameter.getSimpleName()); ref.setType(parameter.getType()); return ref; diff --git a/src/main/java/spoon/reflect/meta/impl/ModelRoleHandlers.java b/src/main/java/spoon/reflect/meta/impl/ModelRoleHandlers.java index c5678b26e83..cf328881c4d 100644 --- a/src/main/java/spoon/reflect/meta/impl/ModelRoleHandlers.java +++ b/src/main/java/spoon/reflect/meta/impl/ModelRoleHandlers.java @@ -17,7 +17,6 @@ package spoon.reflect.meta.impl; -import java.lang.annotation.Annotation; import spoon.reflect.code.BinaryOperatorKind; import spoon.reflect.code.CtAbstractInvocation; import spoon.reflect.code.CtArrayAccess; @@ -104,12 +103,13 @@ import spoon.reflect.reference.CtIntersectionTypeReference; import spoon.reflect.reference.CtModuleReference; import spoon.reflect.reference.CtPackageReference; -import spoon.reflect.reference.CtParameterReference; import spoon.reflect.reference.CtReference; import spoon.reflect.reference.CtTypeParameterReference; import spoon.reflect.reference.CtTypeReference; import spoon.reflect.reference.CtVariableReference; +import java.lang.annotation.Annotation; + /** * Contains implementations of {@link RoleHandler}s for all {@link CtRole}s of all model elements @@ -727,23 +727,6 @@ public void setValue(T element, U value) { } } - static class CtParameterReference_EXECUTABLE_REF_RoleHandler extends SingleHandler> { - private CtParameterReference_EXECUTABLE_REF_RoleHandler() { - super(CtRole.EXECUTABLE_REF, CtParameterReference.class, CtExecutableReference.class); - } - - @SuppressWarnings("unchecked") - @Override - public U getValue(T element) { - return ((U) ((Object) (castTarget(element).getDeclaringExecutable()))); - } - - @Override - public void setValue(T element, U value) { - castTarget(element).setDeclaringExecutable(castValue(value)); - } - } - static class CtModule_EXPORTED_PACKAGE_RoleHandler extends ListHandler { private CtModule_EXPORTED_PACKAGE_RoleHandler() { super(CtRole.EXPORTED_PACKAGE, CtModule.class, CtPackageExport.class); @@ -2177,6 +2160,6 @@ public void setValue(T element, U value) { private ModelRoleHandlers() { } - static final RoleHandler[] roleHandlers = new RoleHandler[]{ new CtTypeAccess_ACCESSED_TYPE_RoleHandler(), new CtClass_ANNONYMOUS_EXECUTABLE_RoleHandler(), new CtElement_ANNOTATION_RoleHandler(), new CtAnnotation_ANNOTATION_TYPE_RoleHandler(), new CtAbstractInvocation_ARGUMENT_RoleHandler(), new CtExecutableReference_ARGUMENT_TYPE_RoleHandler(), new CtAssignment_ASSIGNED_RoleHandler(), new CtRHSReceiver_ASSIGNMENT_RoleHandler(), new CtBodyHolder_BODY_RoleHandler(), new CtSynchronized_BODY_RoleHandler(), new CtIntersectionTypeReference_BOUND_RoleHandler(), new CtTypeParameterReference_BOUNDING_TYPE_RoleHandler(), new CtSwitch_CASE_RoleHandler(), new CtExpression_CAST_RoleHandler(), new CtTry_CATCH_RoleHandler(), new CtElement_COMMENT_RoleHandler(), new CtComment_COMMENT_CONTENT_RoleHandler(), new CtJavaDocTag_COMMENT_CONTENT_RoleHandler(), new CtJavaDoc_COMMENT_TAG_RoleHandler(), new CtComment_COMMENT_TYPE_RoleHandler(), new CtAssert_CONDITION_RoleHandler(), new CtConditional_CONDITION_RoleHandler(), new CtIf_CONDITION_RoleHandler(), new CtClass_CONSTRUCTOR_RoleHandler(), new CtPackage_CONTAINED_TYPE_RoleHandler(), new CtExecutableReference_DECLARING_TYPE_RoleHandler(), new CtFieldReference_DECLARING_TYPE_RoleHandler(), new CtTypeReference_DECLARING_TYPE_RoleHandler(), new CtAnnotationMethod_DEFAULT_EXPRESSION_RoleHandler(), new CtVariable_DEFAULT_EXPRESSION_RoleHandler(), new CtNewArray_DIMENSION_RoleHandler(), new CtJavaDocTag_DOCUMENTATION_TYPE_RoleHandler(), new CtConditional_ELSE_RoleHandler(), new CtIf_ELSE_RoleHandler(), new CtAbstractInvocation_EXECUTABLE_REF_RoleHandler(), new CtExecutableReferenceExpression_EXECUTABLE_REF_RoleHandler(), new CtParameterReference_EXECUTABLE_REF_RoleHandler(), new CtModule_EXPORTED_PACKAGE_RoleHandler(), new CtArrayAccess_EXPRESSION_RoleHandler(), new CtAssert_EXPRESSION_RoleHandler(), new CtCase_EXPRESSION_RoleHandler(), new CtDo_EXPRESSION_RoleHandler(), new CtFor_EXPRESSION_RoleHandler(), new CtForEach_EXPRESSION_RoleHandler(), new CtLambda_EXPRESSION_RoleHandler(), new CtNewArray_EXPRESSION_RoleHandler(), new CtReturn_EXPRESSION_RoleHandler(), new CtSwitch_EXPRESSION_RoleHandler(), new CtSynchronized_EXPRESSION_RoleHandler(), new CtThrow_EXPRESSION_RoleHandler(), new CtUnaryOperator_EXPRESSION_RoleHandler(), new CtWhile_EXPRESSION_RoleHandler(), new CtType_FIELD_RoleHandler(), new CtTry_FINALIZER_RoleHandler(), new CtForEach_FOREACH_VARIABLE_RoleHandler(), new CtFor_FOR_INIT_RoleHandler(), new CtFor_FOR_UPDATE_RoleHandler(), new CtProvidedService_IMPLEMENTATION_TYPE_RoleHandler(), new CtImport_IMPORT_REFERENCE_RoleHandler(), new CtTypeInformation_INTERFACE_RoleHandler(), new CtMethod_IS_DEFAULT_RoleHandler(), new CtFieldReference_IS_FINAL_RoleHandler(), new CtElement_IS_IMPLICIT_RoleHandler(), new CtShadowable_IS_SHADOW_RoleHandler(), new CtExecutableReference_IS_STATIC_RoleHandler(), new CtFieldReference_IS_STATIC_RoleHandler(), new CtTypeParameterReference_IS_UPPER_RoleHandler(), new CtParameter_IS_VARARGS_RoleHandler(), new CtJavaDocTag_JAVADOC_TAG_VALUE_RoleHandler(), new CtStatement_LABEL_RoleHandler(), new CtBinaryOperator_LEFT_OPERAND_RoleHandler(), new CtType_METHOD_RoleHandler(), new CtModifiable_MODIFIER_RoleHandler(), new CtModule_MODIFIER_RoleHandler(), new CtModuleRequirement_MODIFIER_RoleHandler(), new CtTypeInformation_MODIFIER_RoleHandler(), new CtModule_MODULE_DIRECTIVE_RoleHandler(), new CtModuleRequirement_MODULE_REF_RoleHandler(), new CtPackageExport_MODULE_REF_RoleHandler(), new CtNamedElement_NAME_RoleHandler(), new CtReference_NAME_RoleHandler(), new CtNewClass_NESTED_TYPE_RoleHandler(), new CtType_NESTED_TYPE_RoleHandler(), new CtModule_OPENED_PACKAGE_RoleHandler(), new CtPackageExport_OPENED_PACKAGE_RoleHandler(), new CtBinaryOperator_OPERATOR_KIND_RoleHandler(), new CtOperatorAssignment_OPERATOR_KIND_RoleHandler(), new CtUnaryOperator_OPERATOR_KIND_RoleHandler(), new CtPackageExport_PACKAGE_REF_RoleHandler(), new CtTypeReference_PACKAGE_REF_RoleHandler(), new CtCatch_PARAMETER_RoleHandler(), new CtExecutable_PARAMETER_RoleHandler(), new CtElement_POSITION_RoleHandler(), new CtModule_PROVIDED_SERVICE_RoleHandler(), new CtModule_REQUIRED_MODULE_RoleHandler(), new CtBinaryOperator_RIGHT_OPERAND_RoleHandler(), new CtModule_SERVICE_TYPE_RoleHandler(), new CtProvidedService_SERVICE_TYPE_RoleHandler(), new CtUsedService_SERVICE_TYPE_RoleHandler(), new CtCodeSnippet_SNIPPET_RoleHandler(), new CtStatementList_STATEMENT_RoleHandler(), new CtModule_SUB_PACKAGE_RoleHandler(), new CtPackage_SUB_PACKAGE_RoleHandler(), new CtTypeInformation_SUPER_TYPE_RoleHandler(), new CtTargetedExpression_TARGET_RoleHandler(), new CtLabelledFlowBreak_TARGET_LABEL_RoleHandler(), new CtConditional_THEN_RoleHandler(), new CtIf_THEN_RoleHandler(), new CtExecutable_THROWN_RoleHandler(), new CtTryWithResource_TRY_RESOURCE_RoleHandler(), new CtArrayTypeReference_TYPE_RoleHandler(), new CtExecutableReference_TYPE_RoleHandler(), new CtMultiTypedElement_TYPE_RoleHandler(), new CtTypedElement_TYPE_RoleHandler(), new CtVariableReference_TYPE_RoleHandler(), new CtActualTypeContainer_TYPE_ARGUMENT_RoleHandler(), new CtType_TYPE_MEMBER_RoleHandler(), new CtFormalTypeDeclarer_TYPE_PARAMETER_RoleHandler(), new CtAnnotation_VALUE_RoleHandler(), new CtEnum_VALUE_RoleHandler(), new CtLiteral_VALUE_RoleHandler(), new CtVariableAccess_VARIABLE_RoleHandler() }; + static final RoleHandler[] roleHandlers = new RoleHandler[]{ new CtTypeAccess_ACCESSED_TYPE_RoleHandler(), new CtClass_ANNONYMOUS_EXECUTABLE_RoleHandler(), new CtElement_ANNOTATION_RoleHandler(), new CtAnnotation_ANNOTATION_TYPE_RoleHandler(), new CtAbstractInvocation_ARGUMENT_RoleHandler(), new CtExecutableReference_ARGUMENT_TYPE_RoleHandler(), new CtAssignment_ASSIGNED_RoleHandler(), new CtRHSReceiver_ASSIGNMENT_RoleHandler(), new CtBodyHolder_BODY_RoleHandler(), new CtSynchronized_BODY_RoleHandler(), new CtIntersectionTypeReference_BOUND_RoleHandler(), new CtTypeParameterReference_BOUNDING_TYPE_RoleHandler(), new CtSwitch_CASE_RoleHandler(), new CtExpression_CAST_RoleHandler(), new CtTry_CATCH_RoleHandler(), new CtElement_COMMENT_RoleHandler(), new CtComment_COMMENT_CONTENT_RoleHandler(), new CtJavaDocTag_COMMENT_CONTENT_RoleHandler(), new CtJavaDoc_COMMENT_TAG_RoleHandler(), new CtComment_COMMENT_TYPE_RoleHandler(), new CtAssert_CONDITION_RoleHandler(), new CtConditional_CONDITION_RoleHandler(), new CtIf_CONDITION_RoleHandler(), new CtClass_CONSTRUCTOR_RoleHandler(), new CtPackage_CONTAINED_TYPE_RoleHandler(), new CtExecutableReference_DECLARING_TYPE_RoleHandler(), new CtFieldReference_DECLARING_TYPE_RoleHandler(), new CtTypeReference_DECLARING_TYPE_RoleHandler(), new CtAnnotationMethod_DEFAULT_EXPRESSION_RoleHandler(), new CtVariable_DEFAULT_EXPRESSION_RoleHandler(), new CtNewArray_DIMENSION_RoleHandler(), new CtJavaDocTag_DOCUMENTATION_TYPE_RoleHandler(), new CtConditional_ELSE_RoleHandler(), new CtIf_ELSE_RoleHandler(), new CtAbstractInvocation_EXECUTABLE_REF_RoleHandler(), new CtExecutableReferenceExpression_EXECUTABLE_REF_RoleHandler(), new CtModule_EXPORTED_PACKAGE_RoleHandler(), new CtArrayAccess_EXPRESSION_RoleHandler(), new CtAssert_EXPRESSION_RoleHandler(), new CtCase_EXPRESSION_RoleHandler(), new CtDo_EXPRESSION_RoleHandler(), new CtFor_EXPRESSION_RoleHandler(), new CtForEach_EXPRESSION_RoleHandler(), new CtLambda_EXPRESSION_RoleHandler(), new CtNewArray_EXPRESSION_RoleHandler(), new CtReturn_EXPRESSION_RoleHandler(), new CtSwitch_EXPRESSION_RoleHandler(), new CtSynchronized_EXPRESSION_RoleHandler(), new CtThrow_EXPRESSION_RoleHandler(), new CtUnaryOperator_EXPRESSION_RoleHandler(), new CtWhile_EXPRESSION_RoleHandler(), new CtType_FIELD_RoleHandler(), new CtTry_FINALIZER_RoleHandler(), new CtForEach_FOREACH_VARIABLE_RoleHandler(), new CtFor_FOR_INIT_RoleHandler(), new CtFor_FOR_UPDATE_RoleHandler(), new CtProvidedService_IMPLEMENTATION_TYPE_RoleHandler(), new CtImport_IMPORT_REFERENCE_RoleHandler(), new CtTypeInformation_INTERFACE_RoleHandler(), new CtMethod_IS_DEFAULT_RoleHandler(), new CtFieldReference_IS_FINAL_RoleHandler(), new CtElement_IS_IMPLICIT_RoleHandler(), new CtShadowable_IS_SHADOW_RoleHandler(), new CtExecutableReference_IS_STATIC_RoleHandler(), new CtFieldReference_IS_STATIC_RoleHandler(), new CtTypeParameterReference_IS_UPPER_RoleHandler(), new CtParameter_IS_VARARGS_RoleHandler(), new CtJavaDocTag_JAVADOC_TAG_VALUE_RoleHandler(), new CtStatement_LABEL_RoleHandler(), new CtBinaryOperator_LEFT_OPERAND_RoleHandler(), new CtType_METHOD_RoleHandler(), new CtModifiable_MODIFIER_RoleHandler(), new CtModule_MODIFIER_RoleHandler(), new CtModuleRequirement_MODIFIER_RoleHandler(), new CtTypeInformation_MODIFIER_RoleHandler(), new CtModule_MODULE_DIRECTIVE_RoleHandler(), new CtModuleRequirement_MODULE_REF_RoleHandler(), new CtPackageExport_MODULE_REF_RoleHandler(), new CtNamedElement_NAME_RoleHandler(), new CtReference_NAME_RoleHandler(), new CtNewClass_NESTED_TYPE_RoleHandler(), new CtType_NESTED_TYPE_RoleHandler(), new CtModule_OPENED_PACKAGE_RoleHandler(), new CtPackageExport_OPENED_PACKAGE_RoleHandler(), new CtBinaryOperator_OPERATOR_KIND_RoleHandler(), new CtOperatorAssignment_OPERATOR_KIND_RoleHandler(), new CtUnaryOperator_OPERATOR_KIND_RoleHandler(), new CtPackageExport_PACKAGE_REF_RoleHandler(), new CtTypeReference_PACKAGE_REF_RoleHandler(), new CtCatch_PARAMETER_RoleHandler(), new CtExecutable_PARAMETER_RoleHandler(), new CtElement_POSITION_RoleHandler(), new CtModule_PROVIDED_SERVICE_RoleHandler(), new CtModule_REQUIRED_MODULE_RoleHandler(), new CtBinaryOperator_RIGHT_OPERAND_RoleHandler(), new CtModule_SERVICE_TYPE_RoleHandler(), new CtProvidedService_SERVICE_TYPE_RoleHandler(), new CtUsedService_SERVICE_TYPE_RoleHandler(), new CtCodeSnippet_SNIPPET_RoleHandler(), new CtStatementList_STATEMENT_RoleHandler(), new CtModule_SUB_PACKAGE_RoleHandler(), new CtPackage_SUB_PACKAGE_RoleHandler(), new CtTypeInformation_SUPER_TYPE_RoleHandler(), new CtTargetedExpression_TARGET_RoleHandler(), new CtLabelledFlowBreak_TARGET_LABEL_RoleHandler(), new CtConditional_THEN_RoleHandler(), new CtIf_THEN_RoleHandler(), new CtExecutable_THROWN_RoleHandler(), new CtTryWithResource_TRY_RESOURCE_RoleHandler(), new CtArrayTypeReference_TYPE_RoleHandler(), new CtExecutableReference_TYPE_RoleHandler(), new CtMultiTypedElement_TYPE_RoleHandler(), new CtTypedElement_TYPE_RoleHandler(), new CtVariableReference_TYPE_RoleHandler(), new CtActualTypeContainer_TYPE_ARGUMENT_RoleHandler(), new CtType_TYPE_MEMBER_RoleHandler(), new CtFormalTypeDeclarer_TYPE_PARAMETER_RoleHandler(), new CtAnnotation_VALUE_RoleHandler(), new CtEnum_VALUE_RoleHandler(), new CtLiteral_VALUE_RoleHandler(), new CtVariableAccess_VARIABLE_RoleHandler() }; } diff --git a/src/main/java/spoon/reflect/reference/CtParameterReference.java b/src/main/java/spoon/reflect/reference/CtParameterReference.java index 0bc058314c4..ef4a22cebdb 100644 --- a/src/main/java/spoon/reflect/reference/CtParameterReference.java +++ b/src/main/java/spoon/reflect/reference/CtParameterReference.java @@ -16,31 +16,22 @@ */ package spoon.reflect.reference; -import spoon.reflect.annotations.PropertyGetter; -import spoon.reflect.annotations.PropertySetter; import spoon.reflect.declaration.CtParameter; -import spoon.reflect.path.CtRole; import spoon.support.DerivedProperty; /** * This interface defines a reference to a - * {@link spoon.reflect.declaration.CtParameter}. + * {@link spoon.reflect.declaration.CtParameter} of a method. */ public interface CtParameterReference extends CtVariableReference { /** * Gets the declaring executable of the referenced parameter. */ - @PropertyGetter(role = CtRole.EXECUTABLE_REF) + @DerivedProperty CtExecutableReference getDeclaringExecutable(); - /** - * Sets the declaring executable of the referenced parameter. - */ - @PropertySetter(role = CtRole.EXECUTABLE_REF) - > C setDeclaringExecutable(CtExecutableReference executable); - @Override @DerivedProperty CtParameter getDeclaration(); diff --git a/src/main/java/spoon/reflect/visitor/CtBiScannerDefault.java b/src/main/java/spoon/reflect/visitor/CtBiScannerDefault.java index 9226c05a995..205e815507c 100644 --- a/src/main/java/spoon/reflect/visitor/CtBiScannerDefault.java +++ b/src/main/java/spoon/reflect/visitor/CtBiScannerDefault.java @@ -622,7 +622,6 @@ public void visitCtParameterReference(final spoon.reflect.reference.CtParame enter(reference); biScan(spoon.reflect.path.CtRole.TYPE, reference.getType(), other.getType()); biScan(spoon.reflect.path.CtRole.ANNOTATION, reference.getAnnotations(), other.getAnnotations()); - biScan(spoon.reflect.path.CtRole.EXECUTABLE_REF, reference.getDeclaringExecutable(), other.getDeclaringExecutable()); exit(reference); } diff --git a/src/main/java/spoon/reflect/visitor/CtScanner.java b/src/main/java/spoon/reflect/visitor/CtScanner.java index d74153c0455..655022829c2 100644 --- a/src/main/java/spoon/reflect/visitor/CtScanner.java +++ b/src/main/java/spoon/reflect/visitor/CtScanner.java @@ -667,7 +667,6 @@ public void visitCtParameterReference(final CtParameterReference referenc enter(reference); scan(CtRole.TYPE, reference.getType()); scan(CtRole.ANNOTATION, reference.getAnnotations()); - scan(CtRole.EXECUTABLE_REF, reference.getDeclaringExecutable()); exit(reference); } diff --git a/src/main/java/spoon/support/compiler/jdt/JDTTreeBuilderHelper.java b/src/main/java/spoon/support/compiler/jdt/JDTTreeBuilderHelper.java index cade1236f81..d84016bb195 100644 --- a/src/main/java/spoon/support/compiler/jdt/JDTTreeBuilderHelper.java +++ b/src/main/java/spoon/support/compiler/jdt/JDTTreeBuilderHelper.java @@ -204,8 +204,8 @@ CtVariableAccess createVariableAccessNoClasspath(SingleNameReference sing // create variable of concrete type to avoid type casting while calling methods final CtParameterReference parameterReference = coreFactory.createParameterReference(); if (variable.getParent() instanceof CtLambda) { - parameterReference.setDeclaringExecutable( - referenceBuilder.getLambdaExecutableReference(singleNameReference)); + // nothing + } else { // Unfortunately, we can not use `variable.getReference()` here as some parent // references (in terms of Java objects) have not been set up yet. Thus, we need to @@ -256,18 +256,6 @@ CtVariableAccess createVariableAccessNoClasspath(SingleNameReference sing ? declaringReferenceOfExecutable.clone() : executable.getType().clone(); - // create a reference to the executable of the currently processed parameter - // reference - @SuppressWarnings("unchecked") - final CtExecutableReference executableReference = - executableFactory.createReference( - declaringReferenceOfExecutable, - executableTypeReference, - executable.getSimpleName(), - parameterTypesOfExecutable); - - // finally, we can set the executable reference... - parameterReference.setDeclaringExecutable(executableReference); } variableReference = parameterReference; variableAccess = isLhsAssignment(contextBuilder, singleNameReference) diff --git a/src/main/java/spoon/support/compiler/jdt/ReferenceBuilder.java b/src/main/java/spoon/support/compiler/jdt/ReferenceBuilder.java index 8d6e968b720..88431059c1d 100644 --- a/src/main/java/spoon/support/compiler/jdt/ReferenceBuilder.java +++ b/src/main/java/spoon/support/compiler/jdt/ReferenceBuilder.java @@ -18,7 +18,6 @@ import org.eclipse.jdt.core.compiler.CharOperation; import org.eclipse.jdt.internal.compiler.ast.ASTNode; -import org.eclipse.jdt.internal.compiler.ast.AbstractMethodDeclaration; import org.eclipse.jdt.internal.compiler.ast.AllocationExpression; import org.eclipse.jdt.internal.compiler.ast.Annotation; import org.eclipse.jdt.internal.compiler.ast.Argument; @@ -941,11 +940,6 @@ CtVariableReference getVariableReference(VariableBinding varbin) { ref.setSimpleName(new String(varbin.name)); ref.setType((CtTypeReference) getTypeReference(varbin.type)); final ReferenceContext referenceContext = localVariableBinding.declaringScope.referenceContext(); - if (referenceContext instanceof LambdaExpression) { - ref.setDeclaringExecutable(getExecutableReference(((LambdaExpression) referenceContext).binding)); - } else { - ref.setDeclaringExecutable(getExecutableReference(((AbstractMethodDeclaration) referenceContext).binding)); - } return ref; } else if (localVariableBinding.declaration.binding instanceof CatchParameterBinding) { CtCatchVariableReference ref = this.jdtTreeBuilder.getFactory().Core().createCatchVariableReference(); diff --git a/src/main/java/spoon/support/reflect/reference/CtParameterReferenceImpl.java b/src/main/java/spoon/support/reflect/reference/CtParameterReferenceImpl.java index 5cc55be9aff..9e33721405f 100644 --- a/src/main/java/spoon/support/reflect/reference/CtParameterReferenceImpl.java +++ b/src/main/java/spoon/support/reflect/reference/CtParameterReferenceImpl.java @@ -16,26 +16,19 @@ */ package spoon.support.reflect.reference; -import spoon.reflect.annotations.MetamodelPropertyField; import spoon.reflect.declaration.CtElement; import spoon.reflect.declaration.CtExecutable; import spoon.reflect.declaration.CtParameter; import spoon.reflect.declaration.ParentNotInitializedException; -import spoon.reflect.path.CtRole; import spoon.reflect.reference.CtExecutableReference; import spoon.reflect.reference.CtParameterReference; import spoon.reflect.visitor.CtVisitor; import java.util.List; -import static spoon.reflect.path.CtRole.EXECUTABLE_REF; - public class CtParameterReferenceImpl extends CtVariableReferenceImpl implements CtParameterReference { private static final long serialVersionUID = 1L; - @MetamodelPropertyField(role = CtRole.EXECUTABLE_REF) - CtExecutableReference executable; - public CtParameterReferenceImpl() { super(); } @@ -45,6 +38,15 @@ public void accept(CtVisitor visitor) { visitor.visitCtParameterReference(this); } + @Override + public CtExecutableReference getDeclaringExecutable() { + CtParameter declaration = getDeclaration(); + if (declaration == null) { + return null; + } + return declaration.getParent().getReference(); + } + @Override @SuppressWarnings("unchecked") public CtParameter getDeclaration() { @@ -52,7 +54,7 @@ public CtParameter getDeclaration() { if (ctParameter != null) { return ctParameter; } - return fromDeclaringExecutable(); + return null; } private CtParameter lookupDynamically() { @@ -78,35 +80,6 @@ private CtParameter lookupDynamically() { return optional; } - private CtParameter fromDeclaringExecutable() { - CtExecutable exec = executable.getDeclaration(); - if (exec == null) { - return null; - } - List> params = exec.getParameters(); - for (CtParameter p : params) { - if (this.getSimpleName().equals(p.getSimpleName())) { - return (CtParameter) p; - } - } - return null; - } - - @Override - public CtExecutableReference getDeclaringExecutable() { - return executable; - } - - @Override - public > C setDeclaringExecutable(CtExecutableReference executable) { - if (executable != null) { - executable.setParent(this); - } - getFactory().getEnvironment().getModelChangeListener().onObjectUpdate(this, EXECUTABLE_REF, executable, this.executable); - this.executable = executable; - return (C) this; - } - @Override public CtParameterReference clone() { return (CtParameterReference) super.clone(); diff --git a/src/main/java/spoon/support/visitor/clone/CloneVisitor.java b/src/main/java/spoon/support/visitor/clone/CloneVisitor.java index 0d0ac550089..d3991cec5d4 100644 --- a/src/main/java/spoon/support/visitor/clone/CloneVisitor.java +++ b/src/main/java/spoon/support/visitor/clone/CloneVisitor.java @@ -552,7 +552,6 @@ public void visitCtParameterReference(final spoon.reflect.reference.CtParame spoon.reflect.reference.CtParameterReference aCtParameterReference = spoon.support.visitor.clone.CloneBuilder.build(this.builder, reference, reference.getFactory().Core().createParameterReference()); aCtParameterReference.setType(this.cloneHelper.clone(reference.getType())); aCtParameterReference.setAnnotations(this.cloneHelper.clone(reference.getAnnotations())); - aCtParameterReference.setDeclaringExecutable(this.cloneHelper.clone(reference.getDeclaringExecutable())); this.other = aCtParameterReference; } diff --git a/src/main/java/spoon/support/visitor/replace/ReplacementVisitor.java b/src/main/java/spoon/support/visitor/replace/ReplacementVisitor.java index 268e6fd23aa..a780739c209 100644 --- a/src/main/java/spoon/support/visitor/replace/ReplacementVisitor.java +++ b/src/main/java/spoon/support/visitor/replace/ReplacementVisitor.java @@ -877,20 +877,6 @@ public void set(java.util.Set replace) { } } - // auto-generated, see spoon.generating.ReplacementVisitorGenerator - class CtParameterReferenceDeclaringExecutableReplaceListener implements spoon.support.visitor.replace.ReplaceListener { - private final spoon.reflect.reference.CtParameterReference element; - - CtParameterReferenceDeclaringExecutableReplaceListener(spoon.reflect.reference.CtParameterReference element) { - this.element = element; - } - - @java.lang.Override - public void set(spoon.reflect.reference.CtExecutableReference replace) { - this.element.setDeclaringExecutable(replace); - } - } - // auto-generated, see spoon.generating.ReplacementVisitorGenerator class CtReturnReturnedExpressionReplaceListener implements spoon.support.visitor.replace.ReplaceListener { private final spoon.reflect.code.CtReturn element; @@ -1851,7 +1837,6 @@ public void visitCtParameter(final spoon.reflect.declaration.CtParameter public void visitCtParameterReference(final spoon.reflect.reference.CtParameterReference reference) { replaceElementIfExist(reference.getType(), new spoon.support.visitor.replace.ReplacementVisitor.CtVariableReferenceTypeReplaceListener(reference)); replaceInListIfExist(reference.getAnnotations(), new spoon.support.visitor.replace.ReplacementVisitor.CtElementAnnotationsReplaceListener(reference)); - replaceElementIfExist(reference.getDeclaringExecutable(), new spoon.support.visitor.replace.ReplacementVisitor.CtParameterReferenceDeclaringExecutableReplaceListener(reference)); } // auto-generated, see spoon.generating.ReplacementVisitorGenerator diff --git a/src/test/java/spoon/reflect/visitor/CtScannerTest.java b/src/test/java/spoon/reflect/visitor/CtScannerTest.java index 5b12a044c13..ef114885279 100644 --- a/src/test/java/spoon/reflect/visitor/CtScannerTest.java +++ b/src/test/java/spoon/reflect/visitor/CtScannerTest.java @@ -253,9 +253,10 @@ public void exit(CtElement o) { // interesting, this is never called because of covariance, only CtElement or Collection is called assertEquals(0, counter.nObject); // this is a coarse-grain check to see if the scanner changes - assertEquals(3972, counter.nElement); - assertEquals(2599, counter.nEnter); - assertEquals(2599, counter.nExit); + // no more exec ref in paramref + assertEquals(3616, counter.nElement); + assertEquals(2396, counter.nEnter); + assertEquals(2396, counter.nExit); } } diff --git a/src/test/java/spoon/test/lambda/LambdaTest.java b/src/test/java/spoon/test/lambda/LambdaTest.java index cef93dcc3fb..c8e90c8377e 100644 --- a/src/test/java/spoon/test/lambda/LambdaTest.java +++ b/src/test/java/spoon/test/lambda/LambdaTest.java @@ -358,7 +358,6 @@ public void testEqualsLambdaParameterRef() throws Exception { CtParameter param = (CtParameter)lambda.getParameters().get(0); CtParameterReference paramRef1 = param.getReference(); CtParameterReference paramRef2 = lambda.filterChildren(new TypeFilter<>(CtParameterReference.class)).first(); - assertTrue(paramRef1.getDeclaringExecutable().getType().equals(paramRef2.getDeclaringExecutable().getType())); assertTrue(paramRef1.equals(paramRef2)); } diff --git a/src/test/java/spoon/test/parameters/ParameterTest.java b/src/test/java/spoon/test/parameters/ParameterTest.java index 4cfa824c096..2ea7b0b8b86 100644 --- a/src/test/java/spoon/test/parameters/ParameterTest.java +++ b/src/test/java/spoon/test/parameters/ParameterTest.java @@ -79,12 +79,8 @@ public void testMultiParameterLambdaTypeReference() { .getElements(new TypeFilter<>(CtParameter.class)); assertEquals(2, parameters.size()); for (final CtParameter param : parameters) { - for (final CtTypeReference refType : - (List) param.getReference() - .getDeclaringExecutable() - .getParameters()) { - assertEquals(launcher.getFactory().Type().STRING, refType); - } + CtTypeReference refType = (CtTypeReference) param.getReference().getType(); + assertEquals(launcher.getFactory().Type().STRING, refType); } // test integer parameters @@ -94,12 +90,8 @@ public void testMultiParameterLambdaTypeReference() { .getElements(new TypeFilter<>(CtParameter.class)); assertEquals(2, parameters.size()); for (final CtParameter param : parameters) { - for (final CtTypeReference refType : - (List) param.getReference() - .getDeclaringExecutable() - .getParameters()) { - assertEquals(launcher.getFactory().Type().INTEGER, refType); - } + CtTypeReference refType = (CtTypeReference) param.getReference().getType(); + assertEquals(launcher.getFactory().Type().INTEGER, refType); } // test unknown parameters @@ -109,12 +101,9 @@ public void testMultiParameterLambdaTypeReference() { .getElements(new TypeFilter<>(CtParameter.class)); assertEquals(2, parameters.size()); for (final CtParameter param : parameters) { - for (final CtTypeReference refType : - (List) param.getReference() - .getDeclaringExecutable() - .getParameters()) { - assertEquals(launcher.getFactory().Type().OBJECT, refType); - } + CtTypeReference refType = (CtTypeReference) param.getReference().getType(); + // unknown parameters have no type + assertEquals(null, refType); } } } diff --git a/src/test/java/spoon/test/reference/ExecutableReferenceGenericTest.java b/src/test/java/spoon/test/reference/ExecutableReferenceGenericTest.java index 9870207a0e4..6fd08f5c8e6 100644 --- a/src/test/java/spoon/test/reference/ExecutableReferenceGenericTest.java +++ b/src/test/java/spoon/test/reference/ExecutableReferenceGenericTest.java @@ -244,7 +244,8 @@ public boolean matches(CtExecutableReference reference) { } }); - assertEquals(11, refsExecutableClass1.size()); + // 11->10 because parameter references do not contain anymore an exec reference + assertEquals(10, refsExecutableClass1.size()); for (CtExecutableReference ref : refsExecutableClass1) { assertNotNull(ref); if (!ref.toString().equals("java.lang.Object()")) { diff --git a/src/test/java/spoon/test/reference/TypeReferenceTest.java b/src/test/java/spoon/test/reference/TypeReferenceTest.java index ce31214c5c6..91843608fd5 100644 --- a/src/test/java/spoon/test/reference/TypeReferenceTest.java +++ b/src/test/java/spoon/test/reference/TypeReferenceTest.java @@ -620,7 +620,8 @@ public void testEqualityTypeReference() throws Exception { CtParameterReference parameterRef1 = parameter.getReference(); CtParameterReference parameterRef2 = aClass.getElements((CtParameterReference ref)->ref.getSimpleName().equals("param")).get(0); - assertEquals(aClass.getReference(), parameterRef1.getDeclaringExecutable().getType()); + // fresh reference not put in a context + assertEquals(null, parameterRef1.getDeclaringExecutable()); assertEquals(aClass.getReference(), parameterRef2.getDeclaringExecutable().getType()); assertEquals(parameterRef1, parameterRef2);