@@ -572,10 +572,10 @@ protected void addRedefinitions(Element skip) {
572572 Feature target = getTarget ();
573573 Type type = target .getOwningType ();
574574 if (type != null ) {
575- int i = getRelevantFeatures (type , skip ).indexOf (target );
575+ int i = getRelevantFeatures (type ).indexOf (target );
576576 if (i >= 0 ) {
577577 for (Type general : getGeneralTypes (type , skip )) {
578- List <? extends Feature > features = getRelevantFeatures (general , skip );
578+ List <? extends Feature > features = getRelevantFeatures (general );
579579 if (i < features .size ()) {
580580 Feature redefinedFeature = features .get (i );
581581 if (redefinedFeature != null && redefinedFeature != target ) {
@@ -606,18 +606,23 @@ protected List<Type> getGeneralTypes(Type type, Element skip) {
606606 * Get the relevant Features that may be redefined from the given Type.
607607 * This includes end features, owned features of constructor results, and
608608 * generally parameters.
609- *
610- * @satisfies checkFeatureEndRedefinition
611609 */
612- protected List <? extends Feature > getRelevantFeatures (Type type , Element skip ) {
610+ protected List <? extends Feature > getRelevantFeatures (Type type ) {
613611 Feature target = getTarget ();
614612 return type == null ? Collections .emptyList ():
615- target .isEnd ()? TypeUtil . getAllEndFeaturesOf (type ):
613+ target .isEnd ()? getEndRelevantFeatures (type ):
616614 ExpressionUtil .isConstructorResult (target .getOwningType ())? getConstructorRelevantFeatures (type ):
617- FeatureUtil .isParameter (target )? getParameterRelevantFeatures (type , skip ):
615+ FeatureUtil .isParameter (target )? getParameterRelevantFeatures (type ):
618616 Collections .emptyList ();
619617 }
620618
619+ /**
620+ * @satisfies checkFeatureEndRedefinition
621+ */
622+ protected List <? extends Feature > getEndRelevantFeatures (Type type ) {
623+ return getTarget ().getOwningType () == type ? type .getOwnedEndFeature (): type .getEndFeature ();
624+ }
625+
621626 /**
622627 * @satisfies checkConstructorExpressionResultFeatureRedefinition
623628 */
@@ -640,15 +645,15 @@ protected List<? extends Feature> getConstructorRelevantFeatures(Type type) {
640645 *
641646 * @satisfies checkFeatureResultRedefinition
642647 */
643- public List <? extends Feature > getParameterRelevantFeatures (Type type , Element skip ) {
648+ public List <? extends Feature > getParameterRelevantFeatures (Type type ) {
644649 if (type != null ) {
645650 if (FeatureUtil .isResultParameter (getTarget ())) {
646651 Feature resultParameter = TypeUtil .getResultParameterOf (type );
647652 if (resultParameter != null ) {
648653 return Collections .singletonList (resultParameter );
649654 }
650655 } else {
651- return getRelevantParameters (type , skip );
656+ return getRelevantParameters (type );
652657 }
653658 }
654659 return Collections .emptyList ();
@@ -657,11 +662,11 @@ public List<? extends Feature> getParameterRelevantFeatures(Type type, Element s
657662 /**
658663 * @satisfies checkFeatureParameterRedefinition
659664 */
660- protected List <Feature > getRelevantParameters (Type type , Element skip ) {
665+ protected List <Feature > getRelevantParameters (Type type ) {
661666 Type owningType = getTarget ().getOwningType ();
662667 return filterIgnoredParameters (type == owningType ?
663668 TypeUtil .getOwnedParametersOf (type ):
664- TypeUtil .getAllParametersOf (type , skip ));
669+ TypeUtil .getAllParametersOf (type ));
665670 }
666671
667672 protected List <Feature > filterIgnoredParameters (List <Feature > parameters ) {
0 commit comments