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/Constants.java b/src/main/java/de/fraunhofer/iem/icognicrypt/Constants.java index 65d4525..562cc96 100644 --- a/src/main/java/de/fraunhofer/iem/icognicrypt/Constants.java +++ b/src/main/java/de/fraunhofer/iem/icognicrypt/Constants.java @@ -1,12 +1,21 @@ package de.fraunhofer.iem.icognicrypt; +import com.intellij.openapi.application.ApplicationInfo; +import com.intellij.openapi.application.ApplicationNamesInfo; +import com.intellij.openapi.application.PathManager; import crypto.cryslhandler.CrySLModelReader; + public class Constants { public final static boolean AUTOMATIC_SCAN_ON_COMPILE = false; - public static final String DummyCrySLPath = "./CrySLRules/JCA"; + //public static final String DummyCrySLPath = "./CrySLRules/JCA"; + private static final ApplicationNamesInfo nameInfo = ApplicationNamesInfo.getInstance(); + static String productName = nameInfo.getFullProductName(); + static String current_version= ApplicationInfo.getInstance().getMajorVersion()+"."+ ApplicationInfo.getInstance().getMinorVersionMainPart(); + //public static final String DummyCrySLPath=System.getProperty("user.home")+"\\."+productName+current_version+"\\config\\plugins\\icognicrypt\\lib\\CrySLRules\\JCA"; + public static final String DummyCrySLPath= PathManager.getPluginsPath()+"\\icognicrypt\\lib\\CrySLRules\\JCA";; // TODO: This constant is not final in CryptoAnalysis public static final String CRYSL_BIN_EXTENSION = CrySLModelReader.cryslFileEnding; 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..ea12906 100644 --- a/src/main/java/de/fraunhofer/iem/icognicrypt/actions/RunCogniCryptAction.java +++ b/src/main/java/de/fraunhofer/iem/icognicrypt/actions/RunCogniCryptAction.java @@ -27,6 +27,7 @@ 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() { @@ -49,6 +50,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 +94,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..dfc8598 100644 --- a/src/main/java/de/fraunhofer/iem/icognicrypt/analysis/AnalysisListenerService.java +++ b/src/main/java/de/fraunhofer/iem/icognicrypt/analysis/AnalysisListenerService.java @@ -21,6 +21,7 @@ import crypto.interfaces.ISLConstraint; import crypto.rules.CrySLPredicate; 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; @@ -29,7 +30,6 @@ import soot.SootClass; import sync.pds.solver.nodes.Node; import typestate.TransitionFunction; - import java.util.ArrayList; import java.util.Collection; import java.util.List; @@ -43,6 +43,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 +55,7 @@ private AnalysisListenerService(Project project, IResultProvider resultProvider) @Override public void beforeAnalysis() { + EnabledFlag= false; _resultProvider.RemoveAllResults(); _sourceCodeFiles.clear(); @@ -66,6 +68,7 @@ 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..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,8 +86,8 @@ 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); - */ + } ProgressManager.getInstance().run(new JavaProjectAnalysisTask(project, modulePaths 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/settings/CogniCryptSettings.java b/src/main/java/de/fraunhofer/iem/icognicrypt/settings/CogniCryptSettings.java index 023d9a2..7f2d977 100644 --- a/src/main/java/de/fraunhofer/iem/icognicrypt/settings/CogniCryptSettings.java +++ b/src/main/java/de/fraunhofer/iem/icognicrypt/settings/CogniCryptSettings.java @@ -1,6 +1,6 @@ package de.fraunhofer.iem.icognicrypt.settings; -import com.intellij.openapi.components.ServiceManager; + import de.fraunhofer.iem.icognicrypt.Constants; import de.fraunhofer.iem.icognicrypt.IdeSupport.projects.Outputs.OutputFinderOptions; import de.fraunhofer.iem.icognicrypt.core.Language.SupportedLanguage; @@ -8,6 +8,7 @@ import java.util.EnumSet; + abstract class CogniCryptSettings implements ICogniCryptSettings { protected String RulesDirectory = Constants.DummyCrySLPath; @@ -16,6 +17,7 @@ abstract class CogniCryptSettings implements ICogniCryptSettings protected boolean SignedOnly = false; protected SupportedLanguage OptimizedLanguage = SupportedLanguage.Java; + protected int FinderBuildType = OutputFinderOptions.Flags.Debug.getStatusFlagValue(); public CogniCryptSettings(){ diff --git a/src/main/java/de/fraunhofer/iem/icognicrypt/settings/CogniCryptSettingsView.java b/src/main/java/de/fraunhofer/iem/icognicrypt/settings/CogniCryptSettingsView.java index e5ae976..a7d7236 100644 --- a/src/main/java/de/fraunhofer/iem/icognicrypt/settings/CogniCryptSettingsView.java +++ b/src/main/java/de/fraunhofer/iem/icognicrypt/settings/CogniCryptSettingsView.java @@ -20,6 +20,7 @@ import java.util.Set; import java.util.function.Consumer; + class CogniCryptSettingsView implements Configurable { private JPanel _rootPanel; @@ -160,8 +161,10 @@ protected void OnBrowseCrySlDirectoryPressed(ActionEvent e) }); if (_cryslRulesDirectory == null) return; + //SetIDEVersionFlag(false); _cryslRulesDirectory.setText(selectedDirectory.getPath()); _currentState.setRulesDirectory(selectedDirectory.getPath()); + } private void SetupUi() 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 @@ - + + +