001package de.monochromata.anaphors.ast.strategy; 002 003import static de.monochromata.anaphors.ast.relatedexp.strategy.ClassInstanceCreationStrategy.CIC_KIND; 004import static de.monochromata.anaphors.ast.relatedexp.strategy.MethodInvocationStrategy.MI_KIND; 005import static de.monochromata.anaphors.ast.relatedexp.strategy.ParameterDeclarationStrategy.PD_KIND; 006import static de.monochromata.anaphors.ast.relatedexp.strategy.LocalVariableDeclarationStrategy.LVD_KIND; 007 008import java.util.List; 009 010import de.monochromata.anaphors.ast.ASTBasedAnaphora; 011import de.monochromata.anaphors.ast.AnaphorPart; 012import de.monochromata.anaphors.ast.RelatedExpressionPart; 013import de.monochromata.anaphors.ast.relatedexp.RelatedExpression; 014import de.monochromata.anaphors.ast.relatedexp.strategy.LocalTempVariableIntroducingStrategy; 015import de.monochromata.anaphors.ast.relatedexp.strategy.RelatedExpressionStrategy; 016import de.monochromata.anaphors.ast.spi.RelatedExpressionsSpi; 017 018public interface AnaphorCreationForReferentInLocalTempVariable { 019 020 static <N, E, T, B, MB extends B, TB extends B, S, I, QI, EV, PP, R extends RelatedExpression<N, T, B, TB, S, QI, R>, A extends ASTBasedAnaphora<N, E, T, B, TB, S, I, QI, R, A>> String getAnaphorToBeRealized( 021 final RelatedExpressionPart<N, E, T, B, TB, S, I, QI, R> relatedExpressionPart, 022 final List<AnaphorPart<N, E, T, B, TB, S, I, QI, R, A>> allAnaphorPartsRelatedToTheRelatedExpression, 023 final AnaphorPart<N, E, T, B, TB, S, I, QI, R, A> anaphorPart, final S scope, 024 final RelatedExpressionsSpi<N, E, T, B, MB, TB, S, I, QI, EV, PP, R> relatedExpressionsSpi) { 025 final RelatedExpressionStrategy<N, T, B, TB, S, QI, R> reStrategy = relatedExpressionPart 026 .getRelatedExpressionStrategy(); 027 final String kindOfRelatedExpression = reStrategy.getKind(); 028 switch (kindOfRelatedExpression) { 029 case CIC_KIND: 030 case MI_KIND: 031 final I identifierForTempVariable = ((LocalTempVariableIntroducingStrategy<N, E, T, B, TB, S, I, QI, R, A>) reStrategy) 032 .getIdentifierForTempVariable(relatedExpressionPart, allAnaphorPartsRelatedToTheRelatedExpression, 033 scope); 034 return relatedExpressionsSpi.identifierToString(identifierForTempVariable); 035 case PD_KIND: 036 case LVD_KIND: 037 final QI relatedExpressionName = relatedExpressionPart.getRelatedExpression().getName(); 038 return relatedExpressionsSpi.qualifiedIdentifierToString(relatedExpressionName); 039 default: 040 throw new IllegalArgumentException("Unknown related expression strategy: " + reStrategy.getKind()); 041 } 042 } 043 044}