diff --git a/MetricsReloaded/src/main/java/com/sixrr/metrics/metricModel/MetricsRunImpl.java b/MetricsReloaded/src/main/java/com/sixrr/metrics/metricModel/MetricsRunImpl.java index 9f855080..3dc30ccb 100644 --- a/MetricsReloaded/src/main/java/com/sixrr/metrics/metricModel/MetricsRunImpl.java +++ b/MetricsReloaded/src/main/java/com/sixrr/metrics/metricModel/MetricsRunImpl.java @@ -121,7 +121,7 @@ public void postInterfaceMetric(@NotNull Metric metric, @NotNull PsiClass anInte @Override public void postMethodMetric(@NotNull Metric metric, @NotNull PsiMethod method, double value) { final MetricsResult results = getResultsForCategory(MetricCategory.Method); - final String signature = MethodUtils.calculateSignature(method); + final String signature = MethodUtils.calculateUniqueSignature(method); results.postValue(metric, signature, value); results.setElementForMeasuredObject(signature, method); } @@ -170,7 +170,7 @@ public void postInterfaceMetric(@NotNull Metric metric, @NotNull PsiClass anInte public void postMethodMetric(@NotNull Metric metric, @NotNull PsiMethod method, double numerator, double denominator) { final MetricsResult results = getResultsForCategory(MetricCategory.Method); - final String signature = MethodUtils.calculateSignature(method); + final String signature = MethodUtils.calculateUniqueSignature(method); results.postValue(metric, signature, numerator, denominator); results.setElementForMeasuredObject(signature, method); } diff --git a/MetricsReloaded/stockmetrics/src/main/java/com/sixrr/stockmetrics/halstead/HalsteadVisitor.java b/MetricsReloaded/stockmetrics/src/main/java/com/sixrr/stockmetrics/halstead/HalsteadVisitor.java index 0afdd955..9258788a 100644 --- a/MetricsReloaded/stockmetrics/src/main/java/com/sixrr/stockmetrics/halstead/HalsteadVisitor.java +++ b/MetricsReloaded/stockmetrics/src/main/java/com/sixrr/stockmetrics/halstead/HalsteadVisitor.java @@ -165,7 +165,7 @@ public void visitMethodCallExpression(PsiMethodCallExpression callExpression) { super.visitMethodCallExpression(callExpression); final PsiMethod method = callExpression.resolveMethod(); if (method != null) { - final String signature = MethodUtils.calculateSignature(method); + final String signature = MethodUtils.calculateUniqueSignature(method); registerOperator(signature); } } diff --git a/MetricsReloaded/stockmetrics/src/test/java/com/sixrr/stockmetrics/IsGenericMetricTest.java b/MetricsReloaded/stockmetrics/src/test/java/com/sixrr/stockmetrics/IsGenericMetricTest.java index 43b97434..6ad0dd7c 100644 --- a/MetricsReloaded/stockmetrics/src/test/java/com/sixrr/stockmetrics/IsGenericMetricTest.java +++ b/MetricsReloaded/stockmetrics/src/test/java/com/sixrr/stockmetrics/IsGenericMetricTest.java @@ -39,6 +39,6 @@ public void testComplexReturnType() { public void testTwoGenericTypes() { MetricsResultsHolderTestImpl metricResults = runMetricOnTestCase(METRIC); - assertEquals(1.0, metricResults.getMethodMetric(METRIC, "A.method(T,R,Collection)")); + assertEquals(1.0, metricResults.getMethodMetric(METRIC, "A.method(T,R,java.util.Collection)")); } } diff --git a/MetricsReloaded/stockmetrics/src/test/java/com/sixrr/stockmetrics/MetricsResultsHolderTestImpl.java b/MetricsReloaded/stockmetrics/src/test/java/com/sixrr/stockmetrics/MetricsResultsHolderTestImpl.java index 8d63aa19..3ea47e75 100644 --- a/MetricsReloaded/stockmetrics/src/test/java/com/sixrr/stockmetrics/MetricsResultsHolderTestImpl.java +++ b/MetricsReloaded/stockmetrics/src/test/java/com/sixrr/stockmetrics/MetricsResultsHolderTestImpl.java @@ -15,7 +15,7 @@ import java.util.Objects; import java.util.stream.Collectors; -import static com.sixrr.metrics.utils.MethodUtils.calculateSignature; +import static com.sixrr.metrics.utils.MethodUtils.calculateUniqueSignature; import static junit.framework.TestCase.fail; public class MetricsResultsHolderTestImpl implements MetricsResultsHolder { @@ -135,7 +135,7 @@ private PsiClass findClassByQualifiedName(Metric metric, String classQualifiedNa private PsiMethod findMethodBySignature(Metric metric, String methodSignature) { List methods = methodMetrics.get(metric).keySet().stream(). - filter(method -> calculateSignature(method).equals(methodSignature)). + filter(method -> calculateUniqueSignature(method).equals(methodSignature)). collect(Collectors.toList()); if (methods.isEmpty()) { diff --git a/MetricsReloaded/utils/src/main/java/com/sixrr/metrics/utils/MethodUtils.java b/MetricsReloaded/utils/src/main/java/com/sixrr/metrics/utils/MethodUtils.java index 6289d169..23f7c40a 100644 --- a/MetricsReloaded/utils/src/main/java/com/sixrr/metrics/utils/MethodUtils.java +++ b/MetricsReloaded/utils/src/main/java/com/sixrr/metrics/utils/MethodUtils.java @@ -101,7 +101,7 @@ public static int parametersCount(PsiMethod method) { return method.getParameterList().getParametersCount(); } - public static String calculateSignature(PsiMethod method) { + private static String calculateSignature(PsiMethod method, boolean isCanonical) { final PsiClass containingClass = method.getContainingClass(); final String className; if (containingClass != null) { @@ -122,13 +122,22 @@ public static String calculateSignature(PsiMethod method) { out.append(','); } final PsiType parameterType = parameters[i].getType(); - final String parameterTypeText = parameterType.getPresentableText(); + final String parameterTypeText = isCanonical ? + parameterType.getCanonicalText() : parameterType.getPresentableText(); out.append(parameterTypeText); } out.append(')'); return out.toString(); } + public static String calculateUniqueSignature(PsiMethod method) { + return calculateSignature(method, true); + } + + public static String calculateHumanReadableSignature(PsiMethod method) { + return calculateSignature(method, false); + } + public static boolean isGetter(final PsiMethod method) { final PsiType returnType = method.getReturnType(); return !PsiType.VOID.equals(returnType) diff --git a/MetricsReloaded/utils/src/main/java/org/jetbrains/research/groups/ml_methods/utils/PSIUtil.java b/MetricsReloaded/utils/src/main/java/org/jetbrains/research/groups/ml_methods/utils/PSIUtil.java index 129a06b4..958b902e 100644 --- a/MetricsReloaded/utils/src/main/java/org/jetbrains/research/groups/ml_methods/utils/PSIUtil.java +++ b/MetricsReloaded/utils/src/main/java/org/jetbrains/research/groups/ml_methods/utils/PSIUtil.java @@ -12,7 +12,8 @@ import java.util.*; -import static com.sixrr.metrics.utils.MethodUtils.calculateSignature; +import static com.sixrr.metrics.utils.MethodUtils.calculateHumanReadableSignature; +import static com.sixrr.metrics.utils.MethodUtils.calculateUniqueSignature; public final class PSIUtil { private PSIUtil() { @@ -93,16 +94,25 @@ public static boolean isOverriding(PsiMethod method) { } public static String getHumanReadableName(@Nullable PsiElement element) { + return getPsiElementName(element, false); + } + + public static String getUniqueName(@Nullable PsiElement element) { + return getPsiElementName(element, true); + } + + private static String getPsiElementName(@Nullable PsiElement element, boolean isUnique) { if (element instanceof PsiMethod) { - return calculateSignature((PsiMethod) element); + return isUnique ? + calculateUniqueSignature((PsiMethod) element) : calculateHumanReadableSignature((PsiMethod) element); } else if (element instanceof PsiClass) { if (element instanceof PsiAnonymousClass) { - return getHumanReadableName(((PsiAnonymousClass) element).getBaseClassReference().resolve()); + return getPsiElementName(((PsiAnonymousClass) element).getBaseClassReference().resolve(), isUnique); } return ((PsiClass) element).getQualifiedName(); } else if (element instanceof PsiField) { final PsiMember field = (PsiMember) element; - return getHumanReadableName(field.getContainingClass()) + "." + field.getName(); + return getPsiElementName(field.getContainingClass(), isUnique) + "." + field.getName(); } return "???"; } diff --git a/core/src/main/java/org/jetbrains/research/groups/ml_methods/algorithm/entity/EntitySearcher.java b/core/src/main/java/org/jetbrains/research/groups/ml_methods/algorithm/entity/EntitySearcher.java index f8bb3f55..43110c59 100644 --- a/core/src/main/java/org/jetbrains/research/groups/ml_methods/algorithm/entity/EntitySearcher.java +++ b/core/src/main/java/org/jetbrains/research/groups/ml_methods/algorithm/entity/EntitySearcher.java @@ -19,7 +19,8 @@ import java.util.*; -import static org.jetbrains.research.groups.ml_methods.utils.PSIUtil.getHumanReadableName; +import static org.jetbrains.research.groups.ml_methods.utils.PSIUtil.getUniqueName; + /** * Extracts every {@link CodeEntity} from {@link AnalysisScope} according to a {@link FinderStrategy} that is uses. @@ -157,7 +158,7 @@ public void visitFile(PsiFile file) { @Override public void visitClass(PsiClass aClass) { indicator.checkCanceled(); - classForName.put(getHumanReadableName(aClass), aClass); + classForName.put(getUniqueName(aClass), aClass); if (!strategy.acceptClass(aClass)) { return; } @@ -237,7 +238,7 @@ private boolean isProperty(PsiClass aClass, PsiMember member) { @Contract("null -> false") private boolean isClassInProject(final @Nullable PsiClass aClass) { - return aClass != null && classForName.containsKey(getHumanReadableName(aClass)); + return aClass != null && classForName.containsKey(getUniqueName(aClass)); } @Override diff --git a/core/src/main/java/org/jetbrains/research/groups/ml_methods/algorithm/entity/FieldEntity.java b/core/src/main/java/org/jetbrains/research/groups/ml_methods/algorithm/entity/FieldEntity.java index 9f97d7b1..16ff11d6 100644 --- a/core/src/main/java/org/jetbrains/research/groups/ml_methods/algorithm/entity/FieldEntity.java +++ b/core/src/main/java/org/jetbrains/research/groups/ml_methods/algorithm/entity/FieldEntity.java @@ -9,7 +9,7 @@ import java.util.Objects; -import static org.jetbrains.research.groups.ml_methods.utils.PSIUtil.getHumanReadableName; +import static org.jetbrains.research.groups.ml_methods.utils.PSIUtil.getUniqueName; public class FieldEntity extends ClassInnerEntity { private final @NotNull PsiField psiField; @@ -31,7 +31,7 @@ public FieldEntity( @Override public @NotNull String getIdentifier() { return ApplicationManager.getApplication().runReadAction( - (Computable) () -> getHumanReadableName(psiField.getContainingClass()) + "." + psiField.getName() + (Computable) () -> getUniqueName(psiField.getContainingClass()) + "." + psiField.getName() ); } diff --git a/core/src/main/java/org/jetbrains/research/groups/ml_methods/algorithm/entity/MethodEntity.java b/core/src/main/java/org/jetbrains/research/groups/ml_methods/algorithm/entity/MethodEntity.java index 4de03c67..2dfb588b 100644 --- a/core/src/main/java/org/jetbrains/research/groups/ml_methods/algorithm/entity/MethodEntity.java +++ b/core/src/main/java/org/jetbrains/research/groups/ml_methods/algorithm/entity/MethodEntity.java @@ -30,7 +30,7 @@ public MethodEntity( @Override public @NotNull String getIdentifier() { return ApplicationManager.getApplication().runReadAction( - (Computable) () -> MethodUtils.calculateSignature(psiMethod) + (Computable) () -> MethodUtils.calculateUniqueSignature(psiMethod) ); } diff --git a/core/src/main/java/org/jetbrains/research/groups/ml_methods/utils/RefactoringUtil.java b/core/src/main/java/org/jetbrains/research/groups/ml_methods/utils/RefactoringUtil.java index 92733022..9ff24ea6 100755 --- a/core/src/main/java/org/jetbrains/research/groups/ml_methods/utils/RefactoringUtil.java +++ b/core/src/main/java/org/jetbrains/research/groups/ml_methods/utils/RefactoringUtil.java @@ -15,7 +15,7 @@ import java.util.Map.Entry; import java.util.stream.Collectors; -import static org.jetbrains.research.groups.ml_methods.utils.PSIUtil.getHumanReadableName; +import static org.jetbrains.research.groups.ml_methods.utils.PSIUtil.getUniqueName; public final class RefactoringUtil { private static Logger LOG = Logging.getLogger(RefactoringUtil.class); @@ -52,9 +52,9 @@ public static List intersect(Collection - getHumanReadableName(refactoring.getRefactoring().getEntity()) + + getUniqueName(refactoring.getRefactoring().getEntity()) + "&" + - getHumanReadableName(refactoring.getRefactoring().getTargetClass()), + getUniqueName(refactoring.getRefactoring().getTargetClass()), Collectors.toList())) .values().stream() .filter(collection -> collection.size() == refactorings.size()) diff --git a/core/src/test/java/org/jetbrains/research/groups/ml_methods/algorithm/TestCasesCheckers.java b/core/src/test/java/org/jetbrains/research/groups/ml_methods/algorithm/TestCasesCheckers.java index 7b8086f3..e08ede74 100644 --- a/core/src/test/java/org/jetbrains/research/groups/ml_methods/algorithm/TestCasesCheckers.java +++ b/core/src/test/java/org/jetbrains/research/groups/ml_methods/algorithm/TestCasesCheckers.java @@ -11,6 +11,7 @@ import static com.intellij.testFramework.UsefulTestCase.assertOneOf; import static junit.framework.TestCase.assertTrue; import static org.jetbrains.research.groups.ml_methods.utils.PSIUtil.getHumanReadableName; +import static org.jetbrains.research.groups.ml_methods.utils.PSIUtil.getUniqueName; import static org.junit.Assert.assertEquals; class TestCasesCheckers { @@ -23,8 +24,8 @@ class TestCasesCheckers { private static Map toMap(List refactorings) { return refactorings.stream().collect(Collectors.toMap(it -> - getHumanReadableName(it.getRefactoring().getEntity()), - it -> getHumanReadableName(it.getRefactoring().getTargetClass()))); + getUniqueName(it.getRefactoring().getEntity()), + it -> getUniqueName(it.getRefactoring().getTargetClass()))); } @NotNull @@ -206,7 +207,7 @@ void checkMovieRentalStoreWithFeatureEnvy(@NotNull RefactoringExecutionContext c final Map refactorings = toMap(context.getResultForType(algorithmType).getRefactorings()); final Map expected = new HashMap<>(); - expected.put(getPackageName() + ".Customer.getMovie(Movie)", getPackageName() + ".Rental"); + expected.put(getPackageName() + ".Customer.getMovie(" + getPackageName() + ".Movie)", getPackageName() + ".Rental"); assertEquals(expected, refactorings); } diff --git a/features-extraction/src/main/java/org/jetbrains/research/groups/ml_methods/extraction/refactoring/JMoveRefactoringTextRepresentation.java b/features-extraction/src/main/java/org/jetbrains/research/groups/ml_methods/extraction/refactoring/JMoveRefactoringTextRepresentation.java index e5e13836..8f79e26b 100644 --- a/features-extraction/src/main/java/org/jetbrains/research/groups/ml_methods/extraction/refactoring/JMoveRefactoringTextRepresentation.java +++ b/features-extraction/src/main/java/org/jetbrains/research/groups/ml_methods/extraction/refactoring/JMoveRefactoringTextRepresentation.java @@ -19,7 +19,7 @@ public JMoveRefactoringTextRepresentation(MoveMethodRefactoring refactoring) { @Override public boolean isOfGivenMethod(PsiMethod method) { - String methodsSignature = MethodUtils.calculateSignature(method); + String methodsSignature = MethodUtils.calculateHumanReadableSignature(method); String methodsSignatureWithoutParams = methodsSignature.split("\\(")[0]; String refactoringSignature = getMethodsSignature(); return refactoringSignature.equals(methodsSignature) || diff --git a/features-extraction/src/main/java/org/jetbrains/research/groups/ml_methods/extraction/refactoring/RefactoringsFinder.java b/features-extraction/src/main/java/org/jetbrains/research/groups/ml_methods/extraction/refactoring/RefactoringsFinder.java index 0083d125..f1ca8a82 100644 --- a/features-extraction/src/main/java/org/jetbrains/research/groups/ml_methods/extraction/refactoring/RefactoringsFinder.java +++ b/features-extraction/src/main/java/org/jetbrains/research/groups/ml_methods/extraction/refactoring/RefactoringsFinder.java @@ -106,8 +106,8 @@ private void setMethod(@NotNull PsiMethod method) { this.method = method; if (oldMethod != null) { - String oldSignature = MethodUtils.calculateSignature(oldMethod); - String newSignature = MethodUtils.calculateSignature(method); + String oldSignature = MethodUtils.calculateHumanReadableSignature(oldMethod); + String newSignature = MethodUtils.calculateHumanReadableSignature(method); throw new IllegalStateException("Refactorings set is ambiguous. Candidates: " + oldSignature + ", " + newSignature); diff --git a/features-extraction/src/test/java/org/jetbrains/research/groups/ml_methods/extraction/info/InfoCollectorTest.java b/features-extraction/src/test/java/org/jetbrains/research/groups/ml_methods/extraction/info/InfoCollectorTest.java index 552ec582..76a0921b 100644 --- a/features-extraction/src/test/java/org/jetbrains/research/groups/ml_methods/extraction/info/InfoCollectorTest.java +++ b/features-extraction/src/test/java/org/jetbrains/research/groups/ml_methods/extraction/info/InfoCollectorTest.java @@ -107,13 +107,13 @@ private void runTestCase(final @NotNull InfoValidator validator) throws Exceptio assertSameElements( repository.getMethods() .stream() - .map(MethodUtils::calculateSignature) + .map(MethodUtils::calculateUniqueSignature) .collect(Collectors.toList()), validator.methodNames() ); for (PsiMethod method : repository.getMethods()) { - String methodName = MethodUtils.calculateSignature(method); + String methodName = MethodUtils.calculateUniqueSignature(method); MethodInfo info = repository.getMethodInfo(method).orElseThrow( () -> new IllegalStateException( @@ -124,7 +124,7 @@ private void runTestCase(final @NotNull InfoValidator validator) throws Exceptio assertSameElements( info.getSameInstanceCallers() .stream() - .map(MethodUtils::calculateSignature) + .map(MethodUtils::calculateUniqueSignature) .collect(Collectors.toList()), validator.getSameObjectCallers(methodName) ); @@ -132,7 +132,7 @@ private void runTestCase(final @NotNull InfoValidator validator) throws Exceptio assertSameElements( info.getAnotherInstanceCallers() .stream() - .map(MethodUtils::calculateSignature) + .map(MethodUtils::calculateUniqueSignature) .collect(Collectors.toList()), validator.getAnotherObjectCallers(methodName) ); @@ -140,7 +140,7 @@ private void runTestCase(final @NotNull InfoValidator validator) throws Exceptio assertSameElements( info.getSameInstanceTargets() .stream() - .map(MethodUtils::calculateSignature) + .map(MethodUtils::calculateUniqueSignature) .collect(Collectors.toList()), validator.getSameObjectTargets(methodName) ); @@ -148,7 +148,7 @@ private void runTestCase(final @NotNull InfoValidator validator) throws Exceptio assertSameElements( info.getAnotherInstanceTargets() .stream() - .map(MethodUtils::calculateSignature) + .map(MethodUtils::calculateUniqueSignature) .collect(Collectors.toList()), validator.getAnotherObjectTargets(methodName) ); @@ -156,7 +156,7 @@ private void runTestCase(final @NotNull InfoValidator validator) throws Exceptio assertSameElements( info.getAccessedFields() .stream() - .map(PSIUtil::getHumanReadableName) + .map(PSIUtil::getUniqueName) .collect(Collectors.toList()), validator.getAccessedFields(methodName) ); diff --git a/src/main/java/org/jetbrains/research/groups/ml_methods/refactoring/logging/MoveMethodRefactoringFeatures.java b/src/main/java/org/jetbrains/research/groups/ml_methods/refactoring/logging/MoveMethodRefactoringFeatures.java index b7e65255..86033e3a 100644 --- a/src/main/java/org/jetbrains/research/groups/ml_methods/refactoring/logging/MoveMethodRefactoringFeatures.java +++ b/src/main/java/org/jetbrains/research/groups/ml_methods/refactoring/logging/MoveMethodRefactoringFeatures.java @@ -48,7 +48,7 @@ public MoveMethodRefactoringFeatures( ); methodMetricsValues = extractMetricsResultsFor( - MethodUtils.calculateSignature(refactoring.getMethod()), + MethodUtils.calculateUniqueSignature(refactoring.getMethod()), resultsForMethods ); }