From a03474fbe7044d8c323ddd8f9c97312103280022 Mon Sep 17 00:00:00 2001 From: lrs-ta Date: Wed, 29 Apr 2020 17:48:35 +0200 Subject: [PATCH 1/4] Issue 22 --- .../actions/RunCogniCryptAction.java | 19 +++++++++++++++++++ .../analysis/AnalysisListenerService.java | 12 ++++++++++++ .../CogniCryptAndroidStudioAnalysisTask.java | 2 ++ .../analysis/IntelliJAnalysis.java | 3 +++ .../analysis/JavaProjectAnalysisTask.java | 1 + .../results/ui/CogniCryptResultWindow.java | 16 ++++++++-------- .../icognicrypt/ui/NotificationProvider.java | 16 +++++++++++++++- .../MultipleOutputFilesDialog.form | 4 +++- 8 files changed, 63 insertions(+), 10 deletions(-) diff --git a/src/main/java/de/fraunhofer/iem/icognicrypt/actions/RunCogniCryptAction.java b/src/main/java/de/fraunhofer/iem/icognicrypt/actions/RunCogniCryptAction.java index a11d81d..308412f 100644 --- a/src/main/java/de/fraunhofer/iem/icognicrypt/actions/RunCogniCryptAction.java +++ b/src/main/java/de/fraunhofer/iem/icognicrypt/actions/RunCogniCryptAction.java @@ -27,14 +27,19 @@ public class RunCogniCryptAction extends CogniCryptAction implements DumbAware private static final Logger logger = Logger.getInstance(RunCogniCryptAction.class); private final IPersistableCogniCryptSettings _settings; private final IdeType _ideType; + public static boolean EnabledFlag= true; public RunCogniCryptAction() { super("Run CogniCrypt Analysis...", "Run CogniCrypt Analysis", IconLoader.getIcon("/icons/cognicrypt.png")); _settings = ServiceManager.getService(IPersistableCogniCryptSettings.class); _ideType = ServiceManager.getService(IIdePlatformProvider.class).GetRunningPlatform(); + } + + + @Override public void actionPerformed(@NotNull AnActionEvent e) { @@ -49,6 +54,12 @@ public void actionPerformed(@NotNull AnActionEvent e) Iterable files = GetFilesToAnalyze(project); // TODO: Re-Enable + if(e.getPresentation().isEnabled()){ + e.getPresentation().setEnabled(false); + EnabledFlag=false; + update(e); + } + /* if (files == null || !Linq.any(files)) { @@ -87,6 +98,14 @@ private Iterable GetFilesToAnalyze(Project project) } return Collections.EMPTY_LIST; } + public static void SetFlag(boolean b){ + EnabledFlag=b; + } + @Override + public void update(AnActionEvent e) { + e.getPresentation().setEnabled(EnabledFlag); + } + } diff --git a/src/main/java/de/fraunhofer/iem/icognicrypt/analysis/AnalysisListenerService.java b/src/main/java/de/fraunhofer/iem/icognicrypt/analysis/AnalysisListenerService.java index bbd55cc..682f80d 100644 --- a/src/main/java/de/fraunhofer/iem/icognicrypt/analysis/AnalysisListenerService.java +++ b/src/main/java/de/fraunhofer/iem/icognicrypt/analysis/AnalysisListenerService.java @@ -9,6 +9,9 @@ import com.google.common.collect.Table; import com.intellij.codeInsight.daemon.DaemonCodeAnalyzer; import com.intellij.openapi.Disposable; +import com.intellij.openapi.actionSystem.ActionManager; +import com.intellij.openapi.actionSystem.AnAction; +import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.project.Project; import crypto.analysis.AnalysisSeedWithSpecification; import crypto.analysis.CrySLAnalysisListener; @@ -21,6 +24,9 @@ import crypto.interfaces.ISLConstraint; import crypto.rules.CrySLPredicate; import de.fraunhofer.iem.icognicrypt.Constants; +import de.fraunhofer.iem.icognicrypt.actions.CogniCryptAction; +import de.fraunhofer.iem.icognicrypt.actions.RunCogniCryptAction; +import de.fraunhofer.iem.icognicrypt.actions.RunCogniCryptAction.*; import de.fraunhofer.iem.icognicrypt.core.Language.JvmClassNameUtils; import de.fraunhofer.iem.icognicrypt.results.CogniCryptError; import de.fraunhofer.iem.icognicrypt.results.IResultProvider; @@ -30,6 +36,8 @@ import sync.pds.solver.nodes.Node; import typestate.TransitionFunction; +import javax.swing.*; +import java.awt.event.ActionEvent; import java.util.ArrayList; import java.util.Collection; import java.util.List; @@ -43,6 +51,7 @@ class AnalysisListenerService extends CrySLAnalysisListener implements Disposabl private static final Logger logger = LoggerFactory.getLogger(AnalysisListenerService.class); private final Project _project; private IResultProvider _resultProvider; + public static boolean EnabledFlag; private final List _sourceCodeFiles; @@ -54,6 +63,7 @@ private AnalysisListenerService(Project project, IResultProvider resultProvider) @Override public void beforeAnalysis() { + EnabledFlag= false; _resultProvider.RemoveAllResults(); _sourceCodeFiles.clear(); @@ -66,6 +76,8 @@ public void afterAnalysis() { //After analysis completes, restart code analyzer so that error markers can be updated //for (Project project : ProjectManager.getInstance().getOpenProjects()) DaemonCodeAnalyzer.getInstance(_project).restart(); + RunCogniCryptAction.SetFlag(true); + } @Override diff --git a/src/main/java/de/fraunhofer/iem/icognicrypt/analysis/CogniCryptAndroidStudioAnalysisTask.java b/src/main/java/de/fraunhofer/iem/icognicrypt/analysis/CogniCryptAndroidStudioAnalysisTask.java index 57dd954..4095515 100644 --- a/src/main/java/de/fraunhofer/iem/icognicrypt/analysis/CogniCryptAndroidStudioAnalysisTask.java +++ b/src/main/java/de/fraunhofer/iem/icognicrypt/analysis/CogniCryptAndroidStudioAnalysisTask.java @@ -15,6 +15,7 @@ import crypto.analysis.errors.IncompleteOperationError; import de.fraunhofer.iem.crypto.CogniCryptAndroidAnalysis; import de.fraunhofer.iem.icognicrypt.Constants; +import de.fraunhofer.iem.icognicrypt.actions.RunCogniCryptAction; import de.fraunhofer.iem.icognicrypt.core.Language.JvmClassNameUtils; import de.fraunhofer.iem.icognicrypt.results.CogniCryptError; import de.fraunhofer.iem.icognicrypt.results.IResultProvider; @@ -111,6 +112,7 @@ public void onFinished() _analysisQueue = null; _stopWatch = null; _resultProvider = null; + RunCogniCryptAction.SetFlag(true); } @Override diff --git a/src/main/java/de/fraunhofer/iem/icognicrypt/analysis/IntelliJAnalysis.java b/src/main/java/de/fraunhofer/iem/icognicrypt/analysis/IntelliJAnalysis.java index 8ccafad..7906743 100644 --- a/src/main/java/de/fraunhofer/iem/icognicrypt/analysis/IntelliJAnalysis.java +++ b/src/main/java/de/fraunhofer/iem/icognicrypt/analysis/IntelliJAnalysis.java @@ -88,6 +88,7 @@ public static void RunIntelliJAnalysis(Project project, Iterable filesToAn ProgressManager.getInstance().run(analysis); */ + } ProgressManager.getInstance().run(new JavaProjectAnalysisTask(project, modulePaths @@ -115,4 +116,6 @@ public static Iterable GetFilesForIntelliJ(IProjectOutputFinder outputFind { return null; } + + } diff --git a/src/main/java/de/fraunhofer/iem/icognicrypt/analysis/JavaProjectAnalysisTask.java b/src/main/java/de/fraunhofer/iem/icognicrypt/analysis/JavaProjectAnalysisTask.java index c5a6a6c..0f4763b 100644 --- a/src/main/java/de/fraunhofer/iem/icognicrypt/analysis/JavaProjectAnalysisTask.java +++ b/src/main/java/de/fraunhofer/iem/icognicrypt/analysis/JavaProjectAnalysisTask.java @@ -16,6 +16,7 @@ public JavaProjectAnalysisTask(Project project, String applicationPath , String _wholeClassPath = classPath; } + @Override public void run(@NotNull ProgressIndicator indicator) { CryptoAnalysisWrapper.RunAnalysis(_applicationClassPath, _wholeClassPath, myProject); diff --git a/src/main/java/de/fraunhofer/iem/icognicrypt/results/ui/CogniCryptResultWindow.java b/src/main/java/de/fraunhofer/iem/icognicrypt/results/ui/CogniCryptResultWindow.java index b0a377d..0901027 100644 --- a/src/main/java/de/fraunhofer/iem/icognicrypt/results/ui/CogniCryptResultWindow.java +++ b/src/main/java/de/fraunhofer/iem/icognicrypt/results/ui/CogniCryptResultWindow.java @@ -39,14 +39,14 @@ public CogniCryptResultWindow(ToolWindow toolWindow, Project project) IResultProvider service = ServiceManager.getService(project, IResultProvider.class); service.Subscribe(_tableModel); - - for (Set errorSet : service.GetErrors().values()) - { - for (CogniCryptError error : errorSet) - { - _tableModel.AddError(error); - } - } +// ToolWindow clearing when starting IDE +// for (Set errorSet : service.GetErrors().values()) +// { +// for (CogniCryptError error : errorSet) +// { +// _tableModel.AddError(error); +// } +// } } @Override diff --git a/src/main/java/de/fraunhofer/iem/icognicrypt/ui/NotificationProvider.java b/src/main/java/de/fraunhofer/iem/icognicrypt/ui/NotificationProvider.java index 32e9604..ca12a47 100644 --- a/src/main/java/de/fraunhofer/iem/icognicrypt/ui/NotificationProvider.java +++ b/src/main/java/de/fraunhofer/iem/icognicrypt/ui/NotificationProvider.java @@ -1,11 +1,18 @@ package de.fraunhofer.iem.icognicrypt.ui; +import com.intellij.ide.DataManager; import com.intellij.notification.Notification; import com.intellij.notification.NotificationType; import com.intellij.notification.Notifications; +import com.intellij.openapi.actionSystem.DataContext; +import com.intellij.openapi.actionSystem.PlatformDataKeys; +import com.intellij.openapi.project.Project; +import static de.fraunhofer.iem.icognicrypt.IdeSupport.projects.ProjectHelper.GetActiveProject; + public class NotificationProvider { + public static void Warn(String message) { ShowNotification(message, NotificationType.WARNING); @@ -24,6 +31,13 @@ public static void ShowError(String message) private static void ShowNotification(String message, NotificationType type) { Notification notification = new Notification("CogniCrypt", "CogniCrypt Message", message, type); - Notifications.Bus.notify(notification); + Project project= GetActiveProject(); + DataContext d = DataManager.getInstance().getDataContext(); + Project project1= d.getData(PlatformDataKeys.PROJECT); + if(project==project1) { + Notifications.Bus.notify(notification, project); + } + } + } diff --git a/src/main/java/de/fraunhofer/iem/icognicrypt/ui/multipleOutputFilesDialog/MultipleOutputFilesDialog.form b/src/main/java/de/fraunhofer/iem/icognicrypt/ui/multipleOutputFilesDialog/MultipleOutputFilesDialog.form index 21877a7..1988181 100644 --- a/src/main/java/de/fraunhofer/iem/icognicrypt/ui/multipleOutputFilesDialog/MultipleOutputFilesDialog.form +++ b/src/main/java/de/fraunhofer/iem/icognicrypt/ui/multipleOutputFilesDialog/MultipleOutputFilesDialog.form @@ -91,7 +91,9 @@ - + + + From 78fd0d7392dcaf11cf6cda6df645bafe8096582d Mon Sep 17 00:00:00 2001 From: lrs-ta Date: Wed, 29 Apr 2020 18:32:17 +0200 Subject: [PATCH 2/4] Issue 22 --- .idea/compiler.xml | 2 -- .../iem/icognicrypt/actions/RunCogniCryptAction.java | 4 ---- .../icognicrypt/analysis/AnalysisListenerService.java | 9 --------- .../iem/icognicrypt/analysis/IntelliJAnalysis.java | 3 --- .../icognicrypt/analysis/JavaProjectAnalysisTask.java | 1 - 5 files changed, 19 deletions(-) diff --git a/.idea/compiler.xml b/.idea/compiler.xml index 95b24b9..0f24ae0 100644 --- a/.idea/compiler.xml +++ b/.idea/compiler.xml @@ -4,8 +4,6 @@ - - \ No newline at end of file diff --git a/src/main/java/de/fraunhofer/iem/icognicrypt/actions/RunCogniCryptAction.java b/src/main/java/de/fraunhofer/iem/icognicrypt/actions/RunCogniCryptAction.java index 308412f..ea12906 100644 --- a/src/main/java/de/fraunhofer/iem/icognicrypt/actions/RunCogniCryptAction.java +++ b/src/main/java/de/fraunhofer/iem/icognicrypt/actions/RunCogniCryptAction.java @@ -34,12 +34,8 @@ public RunCogniCryptAction() super("Run CogniCrypt Analysis...", "Run CogniCrypt Analysis", IconLoader.getIcon("/icons/cognicrypt.png")); _settings = ServiceManager.getService(IPersistableCogniCryptSettings.class); _ideType = ServiceManager.getService(IIdePlatformProvider.class).GetRunningPlatform(); - } - - - @Override public void actionPerformed(@NotNull AnActionEvent e) { diff --git a/src/main/java/de/fraunhofer/iem/icognicrypt/analysis/AnalysisListenerService.java b/src/main/java/de/fraunhofer/iem/icognicrypt/analysis/AnalysisListenerService.java index 682f80d..dfc8598 100644 --- a/src/main/java/de/fraunhofer/iem/icognicrypt/analysis/AnalysisListenerService.java +++ b/src/main/java/de/fraunhofer/iem/icognicrypt/analysis/AnalysisListenerService.java @@ -9,9 +9,6 @@ import com.google.common.collect.Table; import com.intellij.codeInsight.daemon.DaemonCodeAnalyzer; import com.intellij.openapi.Disposable; -import com.intellij.openapi.actionSystem.ActionManager; -import com.intellij.openapi.actionSystem.AnAction; -import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.project.Project; import crypto.analysis.AnalysisSeedWithSpecification; import crypto.analysis.CrySLAnalysisListener; @@ -24,9 +21,7 @@ import crypto.interfaces.ISLConstraint; import crypto.rules.CrySLPredicate; import de.fraunhofer.iem.icognicrypt.Constants; -import de.fraunhofer.iem.icognicrypt.actions.CogniCryptAction; import de.fraunhofer.iem.icognicrypt.actions.RunCogniCryptAction; -import de.fraunhofer.iem.icognicrypt.actions.RunCogniCryptAction.*; import de.fraunhofer.iem.icognicrypt.core.Language.JvmClassNameUtils; import de.fraunhofer.iem.icognicrypt.results.CogniCryptError; import de.fraunhofer.iem.icognicrypt.results.IResultProvider; @@ -35,9 +30,6 @@ import soot.SootClass; import sync.pds.solver.nodes.Node; import typestate.TransitionFunction; - -import javax.swing.*; -import java.awt.event.ActionEvent; import java.util.ArrayList; import java.util.Collection; import java.util.List; @@ -77,7 +69,6 @@ public void afterAnalysis() { //for (Project project : ProjectManager.getInstance().getOpenProjects()) DaemonCodeAnalyzer.getInstance(_project).restart(); RunCogniCryptAction.SetFlag(true); - } @Override diff --git a/src/main/java/de/fraunhofer/iem/icognicrypt/analysis/IntelliJAnalysis.java b/src/main/java/de/fraunhofer/iem/icognicrypt/analysis/IntelliJAnalysis.java index 7906743..1017509 100644 --- a/src/main/java/de/fraunhofer/iem/icognicrypt/analysis/IntelliJAnalysis.java +++ b/src/main/java/de/fraunhofer/iem/icognicrypt/analysis/IntelliJAnalysis.java @@ -86,7 +86,6 @@ public static void RunIntelliJAnalysis(Project project, Iterable filesToAn Task analysis = new JavaProjectAnalysisTask(modulePath, Joiner.on(File.pathSeparator).join(classpath), settings.getRulesDirectory()); ProgressManager.getInstance().run(analysis); - */ } @@ -116,6 +115,4 @@ public static Iterable GetFilesForIntelliJ(IProjectOutputFinder outputFind { return null; } - - } diff --git a/src/main/java/de/fraunhofer/iem/icognicrypt/analysis/JavaProjectAnalysisTask.java b/src/main/java/de/fraunhofer/iem/icognicrypt/analysis/JavaProjectAnalysisTask.java index 0f4763b..c5a6a6c 100644 --- a/src/main/java/de/fraunhofer/iem/icognicrypt/analysis/JavaProjectAnalysisTask.java +++ b/src/main/java/de/fraunhofer/iem/icognicrypt/analysis/JavaProjectAnalysisTask.java @@ -16,7 +16,6 @@ public JavaProjectAnalysisTask(Project project, String applicationPath , String _wholeClassPath = classPath; } - @Override public void run(@NotNull ProgressIndicator indicator) { CryptoAnalysisWrapper.RunAnalysis(_applicationClassPath, _wholeClassPath, myProject); From a4a145b54d7b2a6c6208cfd497d5a6cceb3a0803 Mon Sep 17 00:00:00 2001 From: lrs-ta Date: Thu, 9 Jul 2020 18:38:27 +0200 Subject: [PATCH 3/4] Adding Kotlin language support for Line Marker --- .../iem/icognicrypt/results/KotlinErrorLineMarker.java | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 src/main/java/de/fraunhofer/iem/icognicrypt/results/KotlinErrorLineMarker.java diff --git a/src/main/java/de/fraunhofer/iem/icognicrypt/results/KotlinErrorLineMarker.java b/src/main/java/de/fraunhofer/iem/icognicrypt/results/KotlinErrorLineMarker.java new file mode 100644 index 0000000..1e69e38 --- /dev/null +++ b/src/main/java/de/fraunhofer/iem/icognicrypt/results/KotlinErrorLineMarker.java @@ -0,0 +1,4 @@ +package de.fraunhofer.iem.icognicrypt.results.ui; + +public class KotlinErrorLineMarker { +} From 26e47c6a9c240e8791610493dda02f14d779fb9a Mon Sep 17 00:00:00 2001 From: lrs-ta Date: Thu, 9 Jul 2020 18:41:48 +0200 Subject: [PATCH 4/4] Adding Kotlin language support for Line Marker --- .idea/jarRepositories.xml | 5 ++ .idea/misc.xml | 11 +++ .idea/modules.xml | 3 - build.gradle | 9 ++- .../results/CogniCryptErrorLineMarker.java | 4 +- .../results/KotlinErrorLineMarker.java | 81 ++++++++++++++++++- ...CogniCryptSettingsPersistentComponent.java | 2 +- src/main/resources/META-INF/plugin.xml | 6 +- src/main/resources/META-INF/withKotlin.xml | 6 ++ 9 files changed, 116 insertions(+), 11 deletions(-) create mode 100644 src/main/resources/META-INF/withKotlin.xml diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml index c6c9827..fd5a3f9 100644 --- a/.idea/jarRepositories.xml +++ b/.idea/jarRepositories.xml @@ -41,5 +41,10 @@