diff --git a/algorithms-evaluation/src/main/java/org/jetbrains/research/groups/ml_methods/evaluation/ProjectLoader.java b/algorithms-evaluation/src/main/java/org/jetbrains/research/groups/ml_methods/evaluation/ProjectLoader.java index 2364bae3..67ec9963 100644 --- a/algorithms-evaluation/src/main/java/org/jetbrains/research/groups/ml_methods/evaluation/ProjectLoader.java +++ b/algorithms-evaluation/src/main/java/org/jetbrains/research/groups/ml_methods/evaluation/ProjectLoader.java @@ -3,9 +3,9 @@ import com.intellij.analysis.AnalysisScope; import com.intellij.openapi.project.Project; import com.sixrr.metrics.utils.ProjectUtils; -import org.jetbrains.research.groups.ml_methods.extraction.refactoring.RefactoringsLoader; -import org.jetbrains.research.groups.ml_methods.extraction.refactoring.readers.RefactoringsReaders; import org.jetbrains.research.groups.ml_methods.refactoring.MoveToClassRefactoring; +import org.jetbrains.research.groups.ml_methods.refactoring.RefactoringsLoader; +import org.jetbrains.research.groups.ml_methods.refactoring.readers.RefactoringsReaders; import java.io.IOException; import java.nio.file.Path; diff --git a/features-extraction/src/main/java/org/jetbrains/research/groups/ml_methods/extraction/refactoring/JBRefactoringTextRepresentation.java b/core/src/main/java/org/jetbrains/research/groups/ml_methods/refactoring/JBRefactoringTextRepresentation.java similarity index 91% rename from features-extraction/src/main/java/org/jetbrains/research/groups/ml_methods/extraction/refactoring/JBRefactoringTextRepresentation.java rename to core/src/main/java/org/jetbrains/research/groups/ml_methods/refactoring/JBRefactoringTextRepresentation.java index 9e3900bd..e5908844 100644 --- a/features-extraction/src/main/java/org/jetbrains/research/groups/ml_methods/extraction/refactoring/JBRefactoringTextRepresentation.java +++ b/core/src/main/java/org/jetbrains/research/groups/ml_methods/refactoring/JBRefactoringTextRepresentation.java @@ -1,8 +1,7 @@ -package org.jetbrains.research.groups.ml_methods.extraction.refactoring; +package org.jetbrains.research.groups.ml_methods.refactoring; import com.intellij.psi.PsiClass; import com.intellij.psi.PsiMethod; -import org.jetbrains.research.groups.ml_methods.refactoring.MoveMethodRefactoring; import java.util.Arrays; import java.util.List; diff --git a/features-extraction/src/main/java/org/jetbrains/research/groups/ml_methods/extraction/refactoring/JMoveRefactoringTextRepresentation.java b/core/src/main/java/org/jetbrains/research/groups/ml_methods/refactoring/JMoveRefactoringTextRepresentation.java similarity index 88% rename from features-extraction/src/main/java/org/jetbrains/research/groups/ml_methods/extraction/refactoring/JMoveRefactoringTextRepresentation.java rename to core/src/main/java/org/jetbrains/research/groups/ml_methods/refactoring/JMoveRefactoringTextRepresentation.java index e5e13836..2ea1f861 100644 --- a/features-extraction/src/main/java/org/jetbrains/research/groups/ml_methods/extraction/refactoring/JMoveRefactoringTextRepresentation.java +++ b/core/src/main/java/org/jetbrains/research/groups/ml_methods/refactoring/JMoveRefactoringTextRepresentation.java @@ -1,9 +1,8 @@ -package org.jetbrains.research.groups.ml_methods.extraction.refactoring; +package org.jetbrains.research.groups.ml_methods.refactoring; import com.intellij.psi.PsiClass; import com.intellij.psi.PsiMethod; import com.sixrr.metrics.utils.MethodUtils; -import org.jetbrains.research.groups.ml_methods.refactoring.MoveMethodRefactoring; import java.util.List; diff --git a/features-extraction/src/main/java/org/jetbrains/research/groups/ml_methods/extraction/refactoring/RefactoringTextRepresentation.java b/core/src/main/java/org/jetbrains/research/groups/ml_methods/refactoring/RefactoringTextRepresentation.java similarity index 96% rename from features-extraction/src/main/java/org/jetbrains/research/groups/ml_methods/extraction/refactoring/RefactoringTextRepresentation.java rename to core/src/main/java/org/jetbrains/research/groups/ml_methods/refactoring/RefactoringTextRepresentation.java index 69f12583..3a933b9b 100644 --- a/features-extraction/src/main/java/org/jetbrains/research/groups/ml_methods/extraction/refactoring/RefactoringTextRepresentation.java +++ b/core/src/main/java/org/jetbrains/research/groups/ml_methods/refactoring/RefactoringTextRepresentation.java @@ -1,9 +1,8 @@ -package org.jetbrains.research.groups.ml_methods.extraction.refactoring; +package org.jetbrains.research.groups.ml_methods.refactoring; import com.intellij.psi.PsiClass; import com.intellij.psi.PsiMethod; import com.intellij.psi.PsiParameter; -import org.jetbrains.research.groups.ml_methods.refactoring.MoveMethodRefactoring; import java.util.ArrayList; import java.util.List; diff --git a/features-extraction/src/main/java/org/jetbrains/research/groups/ml_methods/extraction/refactoring/RefactoringUtils.java b/core/src/main/java/org/jetbrains/research/groups/ml_methods/refactoring/RefactoringUtils.java similarity index 92% rename from features-extraction/src/main/java/org/jetbrains/research/groups/ml_methods/extraction/refactoring/RefactoringUtils.java rename to core/src/main/java/org/jetbrains/research/groups/ml_methods/refactoring/RefactoringUtils.java index 35ef5cd3..f450ccf7 100644 --- a/features-extraction/src/main/java/org/jetbrains/research/groups/ml_methods/extraction/refactoring/RefactoringUtils.java +++ b/core/src/main/java/org/jetbrains/research/groups/ml_methods/refactoring/RefactoringUtils.java @@ -1,4 +1,4 @@ -package org.jetbrains.research.groups.ml_methods.extraction.refactoring; +package org.jetbrains.research.groups.ml_methods.refactoring; import com.intellij.psi.PsiClass; import com.intellij.psi.PsiMethod; diff --git a/features-extraction/src/main/java/org/jetbrains/research/groups/ml_methods/extraction/refactoring/RefactoringsFinder.java b/core/src/main/java/org/jetbrains/research/groups/ml_methods/refactoring/RefactoringsFinder.java similarity index 97% rename from features-extraction/src/main/java/org/jetbrains/research/groups/ml_methods/extraction/refactoring/RefactoringsFinder.java rename to core/src/main/java/org/jetbrains/research/groups/ml_methods/refactoring/RefactoringsFinder.java index 0083d125..e27a093e 100644 --- a/features-extraction/src/main/java/org/jetbrains/research/groups/ml_methods/extraction/refactoring/RefactoringsFinder.java +++ b/core/src/main/java/org/jetbrains/research/groups/ml_methods/refactoring/RefactoringsFinder.java @@ -1,4 +1,4 @@ -package org.jetbrains.research.groups.ml_methods.extraction.refactoring; +package org.jetbrains.research.groups.ml_methods.refactoring; import com.google.common.collect.Sets; import com.intellij.analysis.AnalysisScope; @@ -8,7 +8,6 @@ import com.sixrr.metrics.utils.MethodUtils; import org.apache.log4j.Logger; import org.jetbrains.annotations.NotNull; -import org.jetbrains.research.groups.ml_methods.refactoring.MoveMethodRefactoring; import java.util.*; import java.util.stream.Collectors; diff --git a/features-extraction/src/main/java/org/jetbrains/research/groups/ml_methods/extraction/refactoring/RefactoringsLoader.java b/core/src/main/java/org/jetbrains/research/groups/ml_methods/refactoring/RefactoringsLoader.java similarity index 60% rename from features-extraction/src/main/java/org/jetbrains/research/groups/ml_methods/extraction/refactoring/RefactoringsLoader.java rename to core/src/main/java/org/jetbrains/research/groups/ml_methods/refactoring/RefactoringsLoader.java index 59d42cec..adf44171 100644 --- a/features-extraction/src/main/java/org/jetbrains/research/groups/ml_methods/extraction/refactoring/RefactoringsLoader.java +++ b/core/src/main/java/org/jetbrains/research/groups/ml_methods/refactoring/RefactoringsLoader.java @@ -1,8 +1,7 @@ -package org.jetbrains.research.groups.ml_methods.extraction.refactoring; +package org.jetbrains.research.groups.ml_methods.refactoring; import com.intellij.analysis.AnalysisScope; -import org.jetbrains.research.groups.ml_methods.extraction.refactoring.readers.RefactoringsReader; -import org.jetbrains.research.groups.ml_methods.refactoring.MoveMethodRefactoring; +import org.jetbrains.research.groups.ml_methods.refactoring.readers.RefactoringsReader; import java.io.IOException; import java.nio.file.Path; diff --git a/features-extraction/src/main/java/org/jetbrains/research/groups/ml_methods/extraction/refactoring/readers/JBReader.java b/core/src/main/java/org/jetbrains/research/groups/ml_methods/refactoring/readers/JBReader.java similarity index 82% rename from features-extraction/src/main/java/org/jetbrains/research/groups/ml_methods/extraction/refactoring/readers/JBReader.java rename to core/src/main/java/org/jetbrains/research/groups/ml_methods/refactoring/readers/JBReader.java index 1b3de833..503d1c51 100644 --- a/features-extraction/src/main/java/org/jetbrains/research/groups/ml_methods/extraction/refactoring/readers/JBReader.java +++ b/core/src/main/java/org/jetbrains/research/groups/ml_methods/refactoring/readers/JBReader.java @@ -1,10 +1,10 @@ -package org.jetbrains.research.groups.ml_methods.extraction.refactoring.readers; +package org.jetbrains.research.groups.ml_methods.refactoring.readers; import com.google.common.reflect.TypeToken; import com.google.gson.Gson; import com.google.gson.GsonBuilder; -import org.jetbrains.research.groups.ml_methods.extraction.refactoring.JBRefactoringTextRepresentation; -import org.jetbrains.research.groups.ml_methods.extraction.refactoring.RefactoringTextRepresentation; +import org.jetbrains.research.groups.ml_methods.refactoring.JBRefactoringTextRepresentation; +import org.jetbrains.research.groups.ml_methods.refactoring.RefactoringTextRepresentation; import java.io.BufferedReader; import java.io.IOException; diff --git a/features-extraction/src/main/java/org/jetbrains/research/groups/ml_methods/extraction/refactoring/readers/JMoveReader.java b/core/src/main/java/org/jetbrains/research/groups/ml_methods/refactoring/readers/JMoveReader.java similarity index 86% rename from features-extraction/src/main/java/org/jetbrains/research/groups/ml_methods/extraction/refactoring/readers/JMoveReader.java rename to core/src/main/java/org/jetbrains/research/groups/ml_methods/refactoring/readers/JMoveReader.java index a181383d..9e5fa9f0 100644 --- a/features-extraction/src/main/java/org/jetbrains/research/groups/ml_methods/extraction/refactoring/readers/JMoveReader.java +++ b/core/src/main/java/org/jetbrains/research/groups/ml_methods/refactoring/readers/JMoveReader.java @@ -1,7 +1,7 @@ -package org.jetbrains.research.groups.ml_methods.extraction.refactoring.readers; +package org.jetbrains.research.groups.ml_methods.refactoring.readers; -import org.jetbrains.research.groups.ml_methods.extraction.refactoring.JMoveRefactoringTextRepresentation; -import org.jetbrains.research.groups.ml_methods.extraction.refactoring.RefactoringTextRepresentation; +import org.jetbrains.research.groups.ml_methods.refactoring.JMoveRefactoringTextRepresentation; +import org.jetbrains.research.groups.ml_methods.refactoring.RefactoringTextRepresentation; import java.io.BufferedReader; import java.io.IOException; diff --git a/features-extraction/src/main/java/org/jetbrains/research/groups/ml_methods/extraction/refactoring/readers/RefactoringsReader.java b/core/src/main/java/org/jetbrains/research/groups/ml_methods/refactoring/readers/RefactoringsReader.java similarity index 65% rename from features-extraction/src/main/java/org/jetbrains/research/groups/ml_methods/extraction/refactoring/readers/RefactoringsReader.java rename to core/src/main/java/org/jetbrains/research/groups/ml_methods/refactoring/readers/RefactoringsReader.java index ceeca48f..9a294779 100644 --- a/features-extraction/src/main/java/org/jetbrains/research/groups/ml_methods/extraction/refactoring/readers/RefactoringsReader.java +++ b/core/src/main/java/org/jetbrains/research/groups/ml_methods/refactoring/readers/RefactoringsReader.java @@ -1,6 +1,6 @@ -package org.jetbrains.research.groups.ml_methods.extraction.refactoring.readers; +package org.jetbrains.research.groups.ml_methods.refactoring.readers; -import org.jetbrains.research.groups.ml_methods.extraction.refactoring.RefactoringTextRepresentation; +import org.jetbrains.research.groups.ml_methods.refactoring.RefactoringTextRepresentation; import java.io.IOException; import java.io.InputStream; diff --git a/features-extraction/src/main/java/org/jetbrains/research/groups/ml_methods/extraction/refactoring/readers/RefactoringsReaders.java b/core/src/main/java/org/jetbrains/research/groups/ml_methods/refactoring/readers/RefactoringsReaders.java similarity index 90% rename from features-extraction/src/main/java/org/jetbrains/research/groups/ml_methods/extraction/refactoring/readers/RefactoringsReaders.java rename to core/src/main/java/org/jetbrains/research/groups/ml_methods/refactoring/readers/RefactoringsReaders.java index b0bac9bf..981b3c5c 100644 --- a/features-extraction/src/main/java/org/jetbrains/research/groups/ml_methods/extraction/refactoring/readers/RefactoringsReaders.java +++ b/core/src/main/java/org/jetbrains/research/groups/ml_methods/refactoring/readers/RefactoringsReaders.java @@ -1,4 +1,4 @@ -package org.jetbrains.research.groups.ml_methods.extraction.refactoring.readers; +package org.jetbrains.research.groups.ml_methods.refactoring.readers; import java.util.Arrays; import java.util.List; diff --git a/features-extraction/src/main/java/org/jetbrains/research/groups/ml_methods/extraction/refactoring/writers/JBWriter.java b/core/src/main/java/org/jetbrains/research/groups/ml_methods/refactoring/writers/JBWriter.java similarity index 86% rename from features-extraction/src/main/java/org/jetbrains/research/groups/ml_methods/extraction/refactoring/writers/JBWriter.java rename to core/src/main/java/org/jetbrains/research/groups/ml_methods/refactoring/writers/JBWriter.java index 0c7386e1..87111a1b 100644 --- a/features-extraction/src/main/java/org/jetbrains/research/groups/ml_methods/extraction/refactoring/writers/JBWriter.java +++ b/core/src/main/java/org/jetbrains/research/groups/ml_methods/refactoring/writers/JBWriter.java @@ -1,10 +1,10 @@ -package org.jetbrains.research.groups.ml_methods.extraction.refactoring.writers; +package org.jetbrains.research.groups.ml_methods.refactoring.writers; import com.google.gson.Gson; import com.google.gson.GsonBuilder; -import org.jetbrains.research.groups.ml_methods.extraction.refactoring.JBRefactoringTextRepresentation; -import org.jetbrains.research.groups.ml_methods.extraction.refactoring.RefactoringTextRepresentation; +import org.jetbrains.research.groups.ml_methods.refactoring.JBRefactoringTextRepresentation; import org.jetbrains.research.groups.ml_methods.refactoring.MoveMethodRefactoring; +import org.jetbrains.research.groups.ml_methods.refactoring.RefactoringTextRepresentation; import java.io.IOException; import java.io.OutputStream; diff --git a/features-extraction/src/main/java/org/jetbrains/research/groups/ml_methods/extraction/refactoring/writers/JMoveWriter.java b/core/src/main/java/org/jetbrains/research/groups/ml_methods/refactoring/writers/JMoveWriter.java similarity index 91% rename from features-extraction/src/main/java/org/jetbrains/research/groups/ml_methods/extraction/refactoring/writers/JMoveWriter.java rename to core/src/main/java/org/jetbrains/research/groups/ml_methods/refactoring/writers/JMoveWriter.java index 5fda68a2..9711977c 100644 --- a/features-extraction/src/main/java/org/jetbrains/research/groups/ml_methods/extraction/refactoring/writers/JMoveWriter.java +++ b/core/src/main/java/org/jetbrains/research/groups/ml_methods/refactoring/writers/JMoveWriter.java @@ -1,8 +1,8 @@ -package org.jetbrains.research.groups.ml_methods.extraction.refactoring.writers; +package org.jetbrains.research.groups.ml_methods.refactoring.writers; -import org.jetbrains.research.groups.ml_methods.extraction.refactoring.JMoveRefactoringTextRepresentation; -import org.jetbrains.research.groups.ml_methods.extraction.refactoring.RefactoringTextRepresentation; +import org.jetbrains.research.groups.ml_methods.refactoring.JMoveRefactoringTextRepresentation; import org.jetbrains.research.groups.ml_methods.refactoring.MoveMethodRefactoring; +import org.jetbrains.research.groups.ml_methods.refactoring.RefactoringTextRepresentation; import java.io.BufferedWriter; import java.io.IOException; diff --git a/features-extraction/src/main/java/org/jetbrains/research/groups/ml_methods/extraction/refactoring/writers/RefactoringsWriter.java b/core/src/main/java/org/jetbrains/research/groups/ml_methods/refactoring/writers/RefactoringsWriter.java similarity index 79% rename from features-extraction/src/main/java/org/jetbrains/research/groups/ml_methods/extraction/refactoring/writers/RefactoringsWriter.java rename to core/src/main/java/org/jetbrains/research/groups/ml_methods/refactoring/writers/RefactoringsWriter.java index 76878551..6cdc9efa 100644 --- a/features-extraction/src/main/java/org/jetbrains/research/groups/ml_methods/extraction/refactoring/writers/RefactoringsWriter.java +++ b/core/src/main/java/org/jetbrains/research/groups/ml_methods/refactoring/writers/RefactoringsWriter.java @@ -1,7 +1,7 @@ -package org.jetbrains.research.groups.ml_methods.extraction.refactoring.writers; +package org.jetbrains.research.groups.ml_methods.refactoring.writers; -import org.jetbrains.research.groups.ml_methods.extraction.refactoring.RefactoringTextRepresentation; import org.jetbrains.research.groups.ml_methods.refactoring.MoveMethodRefactoring; +import org.jetbrains.research.groups.ml_methods.refactoring.RefactoringTextRepresentation; import java.io.IOException; import java.io.OutputStream; diff --git a/features-extraction/src/main/java/org/jetbrains/research/groups/ml_methods/extraction/refactoring/writers/RefactoringsWriters.java b/core/src/main/java/org/jetbrains/research/groups/ml_methods/refactoring/writers/RefactoringsWriters.java similarity index 90% rename from features-extraction/src/main/java/org/jetbrains/research/groups/ml_methods/extraction/refactoring/writers/RefactoringsWriters.java rename to core/src/main/java/org/jetbrains/research/groups/ml_methods/refactoring/writers/RefactoringsWriters.java index 9e80dea6..2b5debbd 100644 --- a/features-extraction/src/main/java/org/jetbrains/research/groups/ml_methods/extraction/refactoring/writers/RefactoringsWriters.java +++ b/core/src/main/java/org/jetbrains/research/groups/ml_methods/refactoring/writers/RefactoringsWriters.java @@ -1,4 +1,4 @@ -package org.jetbrains.research.groups.ml_methods.extraction.refactoring.writers; +package org.jetbrains.research.groups.ml_methods.refactoring.writers; import java.util.Arrays; import java.util.List; 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..3c39b519 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 @@ -37,7 +37,7 @@ public static List filter(List ref return validRefactorings; } - private static boolean isMovable(PsiElement psiElement) { + public static boolean isMovable(PsiElement psiElement) { if (psiElement instanceof PsiField) { return MethodUtils.isStatic((PsiField) psiElement); } else if (psiElement instanceof PsiMethod) { diff --git a/features-extraction/src/test/java/org/jetbrains/research/groups/ml_methods/extraction/refactoring/RefactoringsFinderTest.java b/core/src/test/java/org/jetbrains/research/groups/ml_methods/refactoring/RefactoringsFinderTest.java similarity index 90% rename from features-extraction/src/test/java/org/jetbrains/research/groups/ml_methods/extraction/refactoring/RefactoringsFinderTest.java rename to core/src/test/java/org/jetbrains/research/groups/ml_methods/refactoring/RefactoringsFinderTest.java index 0c7eaafe..50b47bbe 100644 --- a/features-extraction/src/test/java/org/jetbrains/research/groups/ml_methods/extraction/refactoring/RefactoringsFinderTest.java +++ b/core/src/test/java/org/jetbrains/research/groups/ml_methods/refactoring/RefactoringsFinderTest.java @@ -1,7 +1,6 @@ -package org.jetbrains.research.groups.ml_methods.extraction.refactoring; +package org.jetbrains.research.groups.ml_methods.refactoring; import org.jetbrains.research.groups.ml_methods.ScopeAbstractTest; -import org.jetbrains.research.groups.ml_methods.refactoring.MoveMethodRefactoring; import java.util.Arrays; import java.util.Collections; diff --git a/features-extraction/src/test/java/org/jetbrains/research/groups/ml_methods/extraction/refactoring/RefactoringsLoaderTest.java b/core/src/test/java/org/jetbrains/research/groups/ml_methods/refactoring/RefactoringsLoaderTest.java similarity index 85% rename from features-extraction/src/test/java/org/jetbrains/research/groups/ml_methods/extraction/refactoring/RefactoringsLoaderTest.java rename to core/src/test/java/org/jetbrains/research/groups/ml_methods/refactoring/RefactoringsLoaderTest.java index a0df47f6..28a564df 100644 --- a/features-extraction/src/test/java/org/jetbrains/research/groups/ml_methods/extraction/refactoring/RefactoringsLoaderTest.java +++ b/core/src/test/java/org/jetbrains/research/groups/ml_methods/refactoring/RefactoringsLoaderTest.java @@ -1,8 +1,7 @@ -package org.jetbrains.research.groups.ml_methods.extraction.refactoring; +package org.jetbrains.research.groups.ml_methods.refactoring; import org.jetbrains.research.groups.ml_methods.ScopeAbstractTest; -import org.jetbrains.research.groups.ml_methods.extraction.refactoring.readers.RefactoringsReaders; -import org.jetbrains.research.groups.ml_methods.refactoring.MoveMethodRefactoring; +import org.jetbrains.research.groups.ml_methods.refactoring.readers.RefactoringsReaders; import java.io.IOException; import java.nio.file.Paths; diff --git a/features-extraction/src/test/java/org/jetbrains/research/groups/ml_methods/extraction/refactoring/readers/JBReaderTest.java b/core/src/test/java/org/jetbrains/research/groups/ml_methods/refactoring/readers/JBReaderTest.java similarity index 86% rename from features-extraction/src/test/java/org/jetbrains/research/groups/ml_methods/extraction/refactoring/readers/JBReaderTest.java rename to core/src/test/java/org/jetbrains/research/groups/ml_methods/refactoring/readers/JBReaderTest.java index 7428ac47..72ff941d 100644 --- a/features-extraction/src/test/java/org/jetbrains/research/groups/ml_methods/extraction/refactoring/readers/JBReaderTest.java +++ b/core/src/test/java/org/jetbrains/research/groups/ml_methods/refactoring/readers/JBReaderTest.java @@ -1,7 +1,7 @@ -package org.jetbrains.research.groups.ml_methods.extraction.refactoring.readers; +package org.jetbrains.research.groups.ml_methods.refactoring.readers; -import org.jetbrains.research.groups.ml_methods.extraction.refactoring.JBRefactoringTextRepresentation; -import org.jetbrains.research.groups.ml_methods.extraction.refactoring.RefactoringTextRepresentation; +import org.jetbrains.research.groups.ml_methods.refactoring.JBRefactoringTextRepresentation; +import org.jetbrains.research.groups.ml_methods.refactoring.RefactoringTextRepresentation; import org.junit.Test; import java.io.FileInputStream; diff --git a/features-extraction/src/test/java/org/jetbrains/research/groups/ml_methods/extraction/refactoring/readers/JMoveReaderTest.java b/core/src/test/java/org/jetbrains/research/groups/ml_methods/refactoring/readers/JMoveReaderTest.java similarity index 89% rename from features-extraction/src/test/java/org/jetbrains/research/groups/ml_methods/extraction/refactoring/readers/JMoveReaderTest.java rename to core/src/test/java/org/jetbrains/research/groups/ml_methods/refactoring/readers/JMoveReaderTest.java index dcd38d04..5c9f3f68 100644 --- a/features-extraction/src/test/java/org/jetbrains/research/groups/ml_methods/extraction/refactoring/readers/JMoveReaderTest.java +++ b/core/src/test/java/org/jetbrains/research/groups/ml_methods/refactoring/readers/JMoveReaderTest.java @@ -1,7 +1,7 @@ -package org.jetbrains.research.groups.ml_methods.extraction.refactoring.readers; +package org.jetbrains.research.groups.ml_methods.refactoring.readers; -import org.jetbrains.research.groups.ml_methods.extraction.refactoring.JMoveRefactoringTextRepresentation; -import org.jetbrains.research.groups.ml_methods.extraction.refactoring.RefactoringTextRepresentation; +import org.jetbrains.research.groups.ml_methods.refactoring.JMoveRefactoringTextRepresentation; +import org.jetbrains.research.groups.ml_methods.refactoring.RefactoringTextRepresentation; import org.junit.Test; import java.io.FileInputStream; diff --git a/features-extraction/src/test/java/org/jetbrains/research/groups/ml_methods/extraction/refactoring/writers/JBWriterTest.java b/core/src/test/java/org/jetbrains/research/groups/ml_methods/refactoring/writers/JBWriterTest.java similarity index 88% rename from features-extraction/src/test/java/org/jetbrains/research/groups/ml_methods/extraction/refactoring/writers/JBWriterTest.java rename to core/src/test/java/org/jetbrains/research/groups/ml_methods/refactoring/writers/JBWriterTest.java index ddedd9fb..dbe4ae56 100644 --- a/features-extraction/src/test/java/org/jetbrains/research/groups/ml_methods/extraction/refactoring/writers/JBWriterTest.java +++ b/core/src/test/java/org/jetbrains/research/groups/ml_methods/refactoring/writers/JBWriterTest.java @@ -1,7 +1,7 @@ -package org.jetbrains.research.groups.ml_methods.extraction.refactoring.writers; +package org.jetbrains.research.groups.ml_methods.refactoring.writers; -import org.jetbrains.research.groups.ml_methods.extraction.refactoring.JBRefactoringTextRepresentation; -import org.jetbrains.research.groups.ml_methods.extraction.refactoring.RefactoringTextRepresentation; +import org.jetbrains.research.groups.ml_methods.refactoring.JBRefactoringTextRepresentation; +import org.jetbrains.research.groups.ml_methods.refactoring.RefactoringTextRepresentation; import org.junit.Test; import java.io.File; diff --git a/features-extraction/src/test/java/org/jetbrains/research/groups/ml_methods/extraction/refactoring/writers/JMoveWriterTest.java b/core/src/test/java/org/jetbrains/research/groups/ml_methods/refactoring/writers/JMoveWriterTest.java similarity index 90% rename from features-extraction/src/test/java/org/jetbrains/research/groups/ml_methods/extraction/refactoring/writers/JMoveWriterTest.java rename to core/src/test/java/org/jetbrains/research/groups/ml_methods/refactoring/writers/JMoveWriterTest.java index 3f96733a..44248324 100644 --- a/features-extraction/src/test/java/org/jetbrains/research/groups/ml_methods/extraction/refactoring/writers/JMoveWriterTest.java +++ b/core/src/test/java/org/jetbrains/research/groups/ml_methods/refactoring/writers/JMoveWriterTest.java @@ -1,7 +1,7 @@ -package org.jetbrains.research.groups.ml_methods.extraction.refactoring.writers; +package org.jetbrains.research.groups.ml_methods.refactoring.writers; -import org.jetbrains.research.groups.ml_methods.extraction.refactoring.JMoveRefactoringTextRepresentation; -import org.jetbrains.research.groups.ml_methods.extraction.refactoring.RefactoringTextRepresentation; +import org.jetbrains.research.groups.ml_methods.refactoring.JMoveRefactoringTextRepresentation; +import org.jetbrains.research.groups.ml_methods.refactoring.RefactoringTextRepresentation; import org.junit.Test; import java.io.File; diff --git a/features-extraction/src/test/resources/JBRefactorings b/core/src/test/resources/JBRefactorings similarity index 100% rename from features-extraction/src/test/resources/JBRefactorings rename to core/src/test/resources/JBRefactorings diff --git a/features-extraction/src/test/resources/JMoveRefactorings b/core/src/test/resources/JMoveRefactorings similarity index 100% rename from features-extraction/src/test/resources/JMoveRefactorings rename to core/src/test/resources/JMoveRefactorings diff --git a/features-extraction/src/test/resources/testCases/findRefactorings/A.java b/core/src/test/resources/testCases/findRefactorings/A.java similarity index 100% rename from features-extraction/src/test/resources/testCases/findRefactorings/A.java rename to core/src/test/resources/testCases/findRefactorings/A.java diff --git a/features-extraction/src/test/resources/testCases/findRefactorings/B.java b/core/src/test/resources/testCases/findRefactorings/B.java similarity index 100% rename from features-extraction/src/test/resources/testCases/findRefactorings/B.java rename to core/src/test/resources/testCases/findRefactorings/B.java diff --git a/features-extraction/src/test/resources/testCases/findRefactorings/good b/core/src/test/resources/testCases/findRefactorings/good similarity index 100% rename from features-extraction/src/test/resources/testCases/findRefactorings/good rename to core/src/test/resources/testCases/findRefactorings/good diff --git a/features-extraction/src/main/java/org/jetbrains/research/groups/ml_methods/extraction/FeaturesExtractionApplicationStarter.java b/features-extraction/src/main/java/org/jetbrains/research/groups/ml_methods/extraction/FeaturesExtractionApplicationStarter.java index f105224d..5c6b9802 100644 --- a/features-extraction/src/main/java/org/jetbrains/research/groups/ml_methods/extraction/FeaturesExtractionApplicationStarter.java +++ b/features-extraction/src/main/java/org/jetbrains/research/groups/ml_methods/extraction/FeaturesExtractionApplicationStarter.java @@ -14,9 +14,9 @@ import org.jetbrains.research.groups.ml_methods.extraction.features.extractors.*; import org.jetbrains.research.groups.ml_methods.extraction.features.vector.FeatureVector; import org.jetbrains.research.groups.ml_methods.extraction.features.vector.VectorSerializer; -import org.jetbrains.research.groups.ml_methods.extraction.refactoring.RefactoringsLoader; -import org.jetbrains.research.groups.ml_methods.extraction.refactoring.readers.RefactoringsReaders; import org.jetbrains.research.groups.ml_methods.refactoring.MoveMethodRefactoring; +import org.jetbrains.research.groups.ml_methods.refactoring.RefactoringsLoader; +import org.jetbrains.research.groups.ml_methods.refactoring.readers.RefactoringsReaders; import java.io.IOException; import java.nio.file.Path; diff --git a/features-extraction/src/main/java/org/jetbrains/research/groups/ml_methods/extraction/FormatterApplicationStarter.java b/features-extraction/src/main/java/org/jetbrains/research/groups/ml_methods/extraction/FormatterApplicationStarter.java index b2cdeb73..02ce3086 100644 --- a/features-extraction/src/main/java/org/jetbrains/research/groups/ml_methods/extraction/FormatterApplicationStarter.java +++ b/features-extraction/src/main/java/org/jetbrains/research/groups/ml_methods/extraction/FormatterApplicationStarter.java @@ -11,12 +11,12 @@ import org.apache.log4j.Logger; import org.apache.log4j.PatternLayout; import org.jetbrains.annotations.NotNull; -import org.jetbrains.research.groups.ml_methods.extraction.refactoring.RefactoringsLoader; -import org.jetbrains.research.groups.ml_methods.extraction.refactoring.readers.RefactoringsReader; -import org.jetbrains.research.groups.ml_methods.extraction.refactoring.readers.RefactoringsReaders; -import org.jetbrains.research.groups.ml_methods.extraction.refactoring.writers.RefactoringsWriter; -import org.jetbrains.research.groups.ml_methods.extraction.refactoring.writers.RefactoringsWriters; import org.jetbrains.research.groups.ml_methods.refactoring.MoveMethodRefactoring; +import org.jetbrains.research.groups.ml_methods.refactoring.RefactoringsLoader; +import org.jetbrains.research.groups.ml_methods.refactoring.readers.RefactoringsReader; +import org.jetbrains.research.groups.ml_methods.refactoring.readers.RefactoringsReaders; +import org.jetbrains.research.groups.ml_methods.refactoring.writers.RefactoringsWriter; +import org.jetbrains.research.groups.ml_methods.refactoring.writers.RefactoringsWriters; import java.nio.file.Path; import java.nio.file.Paths; diff --git a/refactorings-generation/src/main/java/org/jetbrains/research/groups/ml_methods/generation/RefactoringsGenerationApplicationStarter.java b/refactorings-generation/src/main/java/org/jetbrains/research/groups/ml_methods/generation/RefactoringsGenerationApplicationStarter.java index 330d61a2..e93088ab 100644 --- a/refactorings-generation/src/main/java/org/jetbrains/research/groups/ml_methods/generation/RefactoringsGenerationApplicationStarter.java +++ b/refactorings-generation/src/main/java/org/jetbrains/research/groups/ml_methods/generation/RefactoringsGenerationApplicationStarter.java @@ -11,10 +11,10 @@ import org.apache.log4j.Logger; import org.apache.log4j.PatternLayout; import org.jetbrains.annotations.NotNull; -import org.jetbrains.research.groups.ml_methods.extraction.refactoring.writers.RefactoringsWriters; import org.jetbrains.research.groups.ml_methods.generation.constraints.GenerationConstraintsFactory; import org.jetbrains.research.groups.ml_methods.generation.constraints.GenerationConstraintsFactory.GenerationConstraintType; import org.jetbrains.research.groups.ml_methods.refactoring.MoveMethodRefactoring; +import org.jetbrains.research.groups.ml_methods.refactoring.writers.RefactoringsWriters; import org.jetbrains.research.groups.ml_methods.utils.PSIUtil; import java.io.IOException; diff --git a/refactorings-generation/src/test/java/org/jetbrains/research/groups/ml_methods/generation/RefactoringsGeneratorTest.java b/refactorings-generation/src/test/java/org/jetbrains/research/groups/ml_methods/generation/RefactoringsGeneratorTest.java index ce53ed79..7e466759 100644 --- a/refactorings-generation/src/test/java/org/jetbrains/research/groups/ml_methods/generation/RefactoringsGeneratorTest.java +++ b/refactorings-generation/src/test/java/org/jetbrains/research/groups/ml_methods/generation/RefactoringsGeneratorTest.java @@ -2,11 +2,11 @@ import com.intellij.analysis.AnalysisScope; import org.jetbrains.research.groups.ml_methods.ScopeAbstractTest; -import org.jetbrains.research.groups.ml_methods.extraction.refactoring.JBRefactoringTextRepresentation; -import org.jetbrains.research.groups.ml_methods.extraction.refactoring.RefactoringTextRepresentation; import org.jetbrains.research.groups.ml_methods.generation.constraints.GenerationConstraintsFactory; import org.jetbrains.research.groups.ml_methods.generation.constraints.GenerationConstraintsFactory.GenerationConstraintType; +import org.jetbrains.research.groups.ml_methods.refactoring.JBRefactoringTextRepresentation; import org.jetbrains.research.groups.ml_methods.refactoring.MoveMethodRefactoring; +import org.jetbrains.research.groups.ml_methods.refactoring.RefactoringTextRepresentation; import java.util.Arrays; import java.util.Collections; diff --git a/settings.gradle b/settings.gradle index e3aabe00..2cd8ba2d 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,3 +1,5 @@ rootProject.name = 'ArchitectureReloaded' include 'ArchitectureReloaded', 'core', 'MetricsReloaded', 'MetricsReloaded:utils', 'MetricsReloaded:openapi', 'MetricsReloaded:stockmetrics', 'features-extraction', 'refactorings-generation', 'algorithms-evaluation', 'validator' +include 'vectorization' + diff --git a/vectorization/build.gradle b/vectorization/build.gradle new file mode 100644 index 00000000..be580236 --- /dev/null +++ b/vectorization/build.gradle @@ -0,0 +1,35 @@ +plugins { + id 'java' +} + +repositories { + mavenCentral() +} + +apply plugin: 'idea' + +dependencies { + compile project(':features-extraction') + compile project(':MetricsReloaded') + compile project(':core') +} + +task runVectorization(dependsOn: runIde) {} + +gradle.taskGraph.whenReady { graph -> + if (graph.hasTask(runVectorization)) { + runIde.args 'vectorization', "$pathToDataset", "$vectorizationType" + runIde.jvmArgs '-Djava.awt.headless=true', '-Xmx4096m' + } +} +version 'unspecified' + +sourceCompatibility = 1.8 + +repositories { + mavenCentral() +} + +dependencies { + testCompile group: 'junit', name: 'junit', version: '4.12' +} diff --git a/vectorization/src/main/java/org/jetbrains/research/groups/ml_methods/vectorization/AbstractVectorization.java b/vectorization/src/main/java/org/jetbrains/research/groups/ml_methods/vectorization/AbstractVectorization.java new file mode 100644 index 00000000..653227fb --- /dev/null +++ b/vectorization/src/main/java/org/jetbrains/research/groups/ml_methods/vectorization/AbstractVectorization.java @@ -0,0 +1,67 @@ +package org.jetbrains.research.groups.ml_methods.vectorization; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.intellij.analysis.AnalysisScope; +import com.intellij.openapi.project.Project; +import com.sixrr.metrics.utils.ProjectUtils; +import org.apache.log4j.Logger; +import org.jetbrains.annotations.NotNull; + +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import java.util.Objects; + +abstract public class AbstractVectorization implements Vectorization { + private static final @NotNull + Gson JSON_CONVERTER = new GsonBuilder().setPrettyPrinting().create(); + private static final @NotNull + Logger LOGGER = Logger.getLogger(VectorizationApplicationStarter.class); + + @Override + public void vectorizeAndSave(@NotNull Path datasetPath) { + for (File projectPath : Objects.requireNonNull(datasetPath.resolve("projects").toFile().listFiles())) { + try { + if (!projectPath.isDirectory()) { + throw new IOException(projectPath + "is not a directory!"); + } + vectorizeSingleProject(projectPath.toPath(), projectPath.toPath()); + } catch (IOException e) { + String errorMessage = "Error during saving vectorization result to folder " + projectPath; + VectorizationApplicationStarter.logError(e, LOGGER, errorMessage); + VectorizationApplicationStarter.showError(e, errorMessage); + } catch (CannotOpenProjectException e) { + String errorMessage = "Error during opening project: " + projectPath; + VectorizationApplicationStarter.logError(e, LOGGER, errorMessage); + VectorizationApplicationStarter.showError(e, errorMessage); + } + } + } + + @Override + public void vectorizeSingleProject(@NotNull Path projectPath, @NotNull Path pathToSaveResults) + throws IOException, CannotOpenProjectException { + List vectors = vectorize(projectPath); + Files.write(pathToSaveResults.resolve("vector"), Arrays.asList(String.valueOf(vectors.size()), JSON_CONVERTER.toJson(vectors))); + } + + @NotNull + @Override + public List vectorize(@NotNull Path projectPath) throws CannotOpenProjectException { + projectPath = projectPath.resolve("project"); + final Project project = ProjectUtils.loadProjectWithAllDependencies(projectPath); + if (project == null) { + final String errorMessage = "Cannot open project. Check that path is correct. Project: " + projectPath; + throw new CannotOpenProjectException(errorMessage); + } + return vectorize(new AnalysisScope(project)); + } + + @NotNull + abstract protected List vectorize(@NotNull AnalysisScope scope); +} diff --git a/vectorization/src/main/java/org/jetbrains/research/groups/ml_methods/vectorization/CannotOpenProjectException.java b/vectorization/src/main/java/org/jetbrains/research/groups/ml_methods/vectorization/CannotOpenProjectException.java new file mode 100644 index 00000000..1fff9c46 --- /dev/null +++ b/vectorization/src/main/java/org/jetbrains/research/groups/ml_methods/vectorization/CannotOpenProjectException.java @@ -0,0 +1,7 @@ +package org.jetbrains.research.groups.ml_methods.vectorization; + +public class CannotOpenProjectException extends Exception { + public CannotOpenProjectException(String message) { + super(message); + } +} diff --git a/vectorization/src/main/java/org/jetbrains/research/groups/ml_methods/vectorization/DlbRefactoringVector.java b/vectorization/src/main/java/org/jetbrains/research/groups/ml_methods/vectorization/DlbRefactoringVector.java new file mode 100644 index 00000000..3544a6c2 --- /dev/null +++ b/vectorization/src/main/java/org/jetbrains/research/groups/ml_methods/vectorization/DlbRefactoringVector.java @@ -0,0 +1,23 @@ +package org.jetbrains.research.groups.ml_methods.vectorization; + +import org.jetbrains.annotations.NotNull; +import org.jetbrains.research.groups.ml_methods.refactoring.JBRefactoringTextRepresentation; + +public class DlbRefactoringVector extends DlbVector { + private final @NotNull + JBRefactoringTextRepresentation refactoring; + + public DlbRefactoringVector(@NotNull JBRefactoringTextRepresentation refactoring, + double distanceWithSourceClass, double distanceWithTargetClass) { + super(refactoring.getMethodName(), + getSimpleName(refactoring.getSourceClassQualifiedName()), + getSimpleName(refactoring.getTargetClassQualifiedName()), + distanceWithSourceClass, distanceWithTargetClass); + this.refactoring = refactoring; + } + + private static String getSimpleName(@NotNull String qualifiedName) { + String[] names = qualifiedName.split("\\."); + return names[names.length - 1]; + } +} diff --git a/vectorization/src/main/java/org/jetbrains/research/groups/ml_methods/vectorization/DlbVector.java b/vectorization/src/main/java/org/jetbrains/research/groups/ml_methods/vectorization/DlbVector.java new file mode 100644 index 00000000..181b03c9 --- /dev/null +++ b/vectorization/src/main/java/org/jetbrains/research/groups/ml_methods/vectorization/DlbVector.java @@ -0,0 +1,57 @@ +package org.jetbrains.research.groups.ml_methods.vectorization; + +import org.jetbrains.annotations.NotNull; + +import java.util.Arrays; +import java.util.LinkedList; +import java.util.List; +import java.util.stream.Collectors; + +import static java.lang.Math.min; + +public class DlbVector implements Vector { + private static final int NAME_LENGTH = 5; + private static final @NotNull String DEFAULT_NAME = "*"; + private final @NotNull String[] methodName = new String[NAME_LENGTH]; + private final @NotNull String[] sourceClassName = new String[NAME_LENGTH]; + private final @NotNull String[] targetClassName = new String[NAME_LENGTH]; + private final double distanceWithSourceClass; + private final double distanceWithTargetClass; + + public DlbVector(@NotNull String methodName, @NotNull String sourceClassName, @NotNull String targetClassName, + double distanceWithSourceClass, double distanceWithTargetClass) { + List method = tokenizeName(methodName); + List sourceClass = tokenizeName(sourceClassName); + List targetClass = tokenizeName(targetClassName); + int skipMethod = NAME_LENGTH - min(method.size(), 5); + int skipSourceClass = NAME_LENGTH - min(sourceClass.size(), 5); + int skipTargetClass = NAME_LENGTH - min(targetClass.size(), 5); + for (int i = 0; i < NAME_LENGTH; i++) { + this.methodName[i] = getOrDefault(method, i - skipMethod, DEFAULT_NAME); + this.sourceClassName[i] = getOrDefault(sourceClass, i - skipSourceClass, DEFAULT_NAME); + this.targetClassName[i] = getOrDefault(targetClass, i - skipTargetClass, DEFAULT_NAME); + } + this.distanceWithSourceClass = distanceWithSourceClass; + this.distanceWithTargetClass = distanceWithTargetClass; + } + + @NotNull + private static T getOrDefault(List list, int index, T defaultValue) { + return 0 <= index && index < list.size() ? list.get(index) : defaultValue; + } + + @NotNull + private static List tokenizeName(@NotNull String name) { + if (name.startsWith("_")) { + name = name.substring(1); + } + String regexpSplit; + if (name.toUpperCase().equals(name)) { + regexpSplit = "_"; + } else { + regexpSplit = "(?=\\p{Lu})"; + } + List tokenizedString = new LinkedList<>(Arrays.asList(name.split(regexpSplit))); + return tokenizedString.stream().map(String::toLowerCase).collect(Collectors.toList()); + } +} diff --git a/vectorization/src/main/java/org/jetbrains/research/groups/ml_methods/vectorization/DlbVectorization.java b/vectorization/src/main/java/org/jetbrains/research/groups/ml_methods/vectorization/DlbVectorization.java new file mode 100644 index 00000000..98e38e38 --- /dev/null +++ b/vectorization/src/main/java/org/jetbrains/research/groups/ml_methods/vectorization/DlbVectorization.java @@ -0,0 +1,59 @@ +package org.jetbrains.research.groups.ml_methods.vectorization; + +import com.intellij.analysis.AnalysisScope; +import com.intellij.psi.JavaRecursiveElementVisitor; +import com.intellij.psi.PsiClass; +import com.intellij.psi.PsiMethod; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.research.groups.ml_methods.algorithm.properties.finder_strategy.FinderStrategy; +import org.jetbrains.research.groups.ml_methods.algorithm.properties.finder_strategy.NewStrategy; +import org.jetbrains.research.groups.ml_methods.refactoring.JBRefactoringTextRepresentation; +import org.jetbrains.research.groups.ml_methods.refactoring.MoveMethodRefactoring; +import org.jetbrains.research.groups.ml_methods.utils.RefactoringUtil; + +import java.util.ArrayList; +import java.util.List; + +public class DlbVectorization extends AbstractVectorization { + @NotNull + @Override + protected List vectorize(@NotNull AnalysisScope scope) { + ClassesAndMethodsVisitor visitor = new ClassesAndMethodsVisitor(); + scope.accept(visitor); + List vectors = new ArrayList<>(); + for (PsiClass aClass : visitor.classes) { + for (PsiMethod method : visitor.methods) { + // TODO: check that refactoring can be applied + JBRefactoringTextRepresentation refactoring = + new JBRefactoringTextRepresentation(new MoveMethodRefactoring(method, aClass)); + vectors.add(new DlbRefactoringVector(refactoring, 1, 0)); + } + } + return vectors; + } + + private class ClassesAndMethodsVisitor extends JavaRecursiveElementVisitor { + private final @NotNull + List classes = new ArrayList<>(); + private final @NotNull + List methods = new ArrayList<>(); + private final @NotNull + FinderStrategy strategy = NewStrategy.getInstance(); + + @Override + public void visitClass(PsiClass aClass) { + if (strategy.acceptClass(aClass)) { + classes.add(aClass); + } + super.visitClass(aClass); + } + + @Override + public void visitMethod(PsiMethod method) { + if (strategy.acceptMethod(method) && RefactoringUtil.isMovable(method)) { + methods.add(method); + } + super.visitMethod(method); + } + } +} diff --git a/vectorization/src/main/java/org/jetbrains/research/groups/ml_methods/vectorization/Vector.java b/vectorization/src/main/java/org/jetbrains/research/groups/ml_methods/vectorization/Vector.java new file mode 100644 index 00000000..c4742424 --- /dev/null +++ b/vectorization/src/main/java/org/jetbrains/research/groups/ml_methods/vectorization/Vector.java @@ -0,0 +1,4 @@ +package org.jetbrains.research.groups.ml_methods.vectorization; + +public interface Vector { +} diff --git a/vectorization/src/main/java/org/jetbrains/research/groups/ml_methods/vectorization/Vectorization.java b/vectorization/src/main/java/org/jetbrains/research/groups/ml_methods/vectorization/Vectorization.java new file mode 100644 index 00000000..1e592169 --- /dev/null +++ b/vectorization/src/main/java/org/jetbrains/research/groups/ml_methods/vectorization/Vectorization.java @@ -0,0 +1,16 @@ +package org.jetbrains.research.groups.ml_methods.vectorization; + +import org.jetbrains.annotations.NotNull; + +import java.io.IOException; +import java.nio.file.Path; +import java.util.List; + +public interface Vectorization { + void vectorizeAndSave(@NotNull Path datasetPath); + + void vectorizeSingleProject(@NotNull Path projectPath, @NotNull Path pathToSaveResults) throws IOException, CannotOpenProjectException; + + @NotNull + List vectorize(@NotNull Path projectPath) throws CannotOpenProjectException; +} diff --git a/vectorization/src/main/java/org/jetbrains/research/groups/ml_methods/vectorization/VectorizationApplicationStarter.java b/vectorization/src/main/java/org/jetbrains/research/groups/ml_methods/vectorization/VectorizationApplicationStarter.java new file mode 100644 index 00000000..3f3afceb --- /dev/null +++ b/vectorization/src/main/java/org/jetbrains/research/groups/ml_methods/vectorization/VectorizationApplicationStarter.java @@ -0,0 +1,74 @@ +package org.jetbrains.research.groups.ml_methods.vectorization; + +import com.intellij.openapi.application.ApplicationManager; +import com.intellij.openapi.application.ApplicationStarter; +import com.intellij.openapi.application.ex.ApplicationEx; +import org.apache.log4j.ConsoleAppender; +import org.apache.log4j.Level; +import org.apache.log4j.Logger; +import org.apache.log4j.PatternLayout; +import org.jetbrains.annotations.NotNull; + +import java.nio.file.Path; +import java.nio.file.Paths; + + +public class VectorizationApplicationStarter implements ApplicationStarter { + private static final ApplicationEx APPLICATION = (ApplicationEx) ApplicationManager.getApplication(); + private static final int NUMBER_OF_ARGUMENTS = 3; + private static final @NotNull + Logger LOGGER = Logger.getLogger(VectorizationApplicationStarter.class); + + static { + LOGGER.setLevel(Level.INFO); + LOGGER.addAppender(new ConsoleAppender(new PatternLayout("%p %m%n"))); + } + + private static void checkCommandLineArguments(@NotNull String[] args) { + if (args.length != NUMBER_OF_ARGUMENTS) { + printUsage(); + APPLICATION.exit(true, true); + } + } + + private static void printUsage() { + System.out.println("Usage: vectorization "); + } + + public static void logError(Throwable throwable, Logger logger, String message) { + logger.error(throwable.getClass().getSimpleName() + ": " + throwable.getMessage() + + "\n Message: " + message); + } + + public static void showError(Throwable throwable, String message) { + System.out.println(throwable.getClass().getSimpleName() + ": " + throwable.getMessage() + + "\n Message: " + message); + throwable.printStackTrace(); + } + + @Override + public String getCommandName() { + return "vectorization"; + } + + @Override + public void premain(String[] args) { + } + + public void main(String[] args) { + try { + checkCommandLineArguments(args); + Path datasetPath = Paths.get(args[1]); + Vectorization vectorization = + VectorizationFactory.parseType(args[2]) + .orElseThrow(() -> new IllegalArgumentException("Unknown vectorization type")); + vectorization.vectorizeAndSave(datasetPath); + } catch (Throwable throwable) { + String message = "Unhandled error occurred, application exiting"; + logError(throwable, LOGGER, message); + showError(throwable, message); + } finally { + APPLICATION.exit(true, true); + } + } +} diff --git a/vectorization/src/main/java/org/jetbrains/research/groups/ml_methods/vectorization/VectorizationFactory.java b/vectorization/src/main/java/org/jetbrains/research/groups/ml_methods/vectorization/VectorizationFactory.java new file mode 100644 index 00000000..abdf8e5f --- /dev/null +++ b/vectorization/src/main/java/org/jetbrains/research/groups/ml_methods/vectorization/VectorizationFactory.java @@ -0,0 +1,16 @@ +package org.jetbrains.research.groups.ml_methods.vectorization; + +import org.jetbrains.annotations.NotNull; + +import java.util.Optional; + +public class VectorizationFactory { + @NotNull + public static Optional parseType(@NotNull String type) { + switch (type) { + case "DLB": + return Optional.of(new DlbVectorization()); + } + return Optional.empty(); + } +} diff --git a/vectorization/src/main/resources/META-INF/plugin.xml b/vectorization/src/main/resources/META-INF/plugin.xml new file mode 100644 index 00000000..30ca4431 --- /dev/null +++ b/vectorization/src/main/resources/META-INF/plugin.xml @@ -0,0 +1,17 @@ + + ArchitectureReloaded-Vectorization + ArchitectureReloaded-Vectorization + com.intellij.modules.lang + + 0.1 + + + + + + + + + +