Skip to content

Commit

Permalink
Replace Utils.tryExecute with EclipseUtils.withSafeRunner
Browse files Browse the repository at this point in the history
The tryExecute calls in preference initializers were removed because
they are already executed in a safe environment.
  • Loading branch information
kiritsuku committed Sep 2, 2014
1 parent 39001fb commit 27407a4
Show file tree
Hide file tree
Showing 10 changed files with 74 additions and 89 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,10 @@ import org.eclipse.core.resources.ResourcesPlugin
import org.scalaide.core.IScalaProject
import org.eclipse.core.resources.IProject
import org.scalaide.logging.HasLogger
import org.scalaide.util.internal.Utils
import org.eclipse.ui.IEditorInput
import org.eclipse.ui.IFileEditorInput
import org.eclipse.core.resources.IFile
import org.scalaide.util.internal.eclipse.EclipseUtils

/**
* <p>
Expand Down Expand Up @@ -44,7 +44,7 @@ class ScalaMethodVerifierProvider extends IMethodVerifierProvider with HasLogger

/** Checks that `abstractMethod` is a non-deferred member of a Scala Trait. */
def isConcreteTraitMethod(abstractMethod: MethodBinding): Boolean = {
Utils.tryExecute {
EclipseUtils.withSafeRunner("An error occurred while checking method binding.") {
logger.debug("Entered `isConcreteTraitMethod`")
// get the file containing the declaration of the abstract method
val maybeFile = getFile(abstractMethod)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@ import org.eclipse.jdt.core.IJavaProject
import org.eclipse.jdt.core.JavaCore
import org.eclipse.jdt.launching.JavaRuntime
import org.eclipse.core.runtime.Path
import org.scalaide.util.internal.Utils
import org.scalaide.core.SdtConstants
import org.scalaide.util.internal.eclipse.EclipseUtils

object Nature {

Expand Down Expand Up @@ -57,7 +57,7 @@ class Nature extends IProjectNature {

updateBuilders(project, List(JavaCore.BUILDER_ID), SdtConstants.BuilderId)

Utils tryExecute {
EclipseUtils.withSafeRunner("Error occurred while trying to add Scala library to classpath.") {
Nature.addScalaLibAndSave(getProject)
}
}
Expand All @@ -68,15 +68,15 @@ class Nature extends IProjectNature {

updateBuilders(project, List(SdtConstants.BuilderId), JavaCore.BUILDER_ID)

Utils tryExecute {
EclipseUtils.withSafeRunner("Error occurred while trying to remove Scala library from classpath.") {
val jp = JavaCore.create(getProject)
Nature.removeScalaLib(jp)
jp.save(null, true)
}
}

private def updateBuilders(project: IProject, buildersToRemove: List[String], builderToAdd: String) {
Utils tryExecute {
EclipseUtils.withSafeRunner(s"Error occurred while trying to update builder of project '$project'.") {
val description = project.getDescription
val previousCommands = description.getBuildSpec
val filteredCommands = previousCommands.filterNot(buildersToRemove contains _.getBuilderName)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,19 +3,22 @@ package org.scalaide.ui.editor.extensionpoints
import org.eclipse.core.runtime.Platform
import org.eclipse.jface.text.ITextHover
import org.scalaide.core.internal.jdt.model.ScalaCompilationUnit
import org.scalaide.util.internal.Utils
import org.scalaide.util.internal.eclipse.EclipseUtils

object ScalaHoverDebugOverrideExtensionPoint {
final val EXTENSION_POINT_ID = "org.scala-ide.sdt.core.scalaHoverDebugOverride"

def hoverFor(scu: ScalaCompilationUnit): Option[ITextHover] = extensionHoverFactory map {_ createFor scu}

private lazy val extensionHoverFactory: Option[TextHoverFactory] = for {
private lazy val extensionHoverFactory: Option[TextHoverFactory] = {
// A max of 1 extension is allowed for this extension point. In case more than one is available, only one
// will be used, non-deterministically.
configElem <- Platform.getExtensionRegistry.getConfigurationElementsFor(EXTENSION_POINT_ID).headOption
f <- Utils.tryExecute(configElem.createExecutableExtension("hoverFactoryClass")) collect {case f: TextHoverFactory => f}
} yield f
Platform.getExtensionRegistry.getConfigurationElementsFor(EXTENSION_POINT_ID).headOption flatMap { configElem =>
EclipseUtils.withSafeRunner("Couldn't create extension of scalaHoverDebugOverride extension point") {
configElem.createExecutableExtension("hoverFactoryClass").asInstanceOf[TextHoverFactory]
}
}
}
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,13 @@ import org.eclipse.jface.action.IAction
import org.eclipse.jface.viewers.ISelection
import org.eclipse.ui.IObjectActionDelegate
import org.eclipse.ui.IWorkbenchPart
import org.eclipse.ui.IWorkbenchWindowActionDelegate
import org.eclipse.ui.IWorkbenchWindow
import org.scalaide.util.internal.Utils
import org.scalaide.core.internal.logging.LogManager
import org.eclipse.ui.IWorkbenchWindowActionDelegate
import org.scalaide.ui.internal.diagnostic
import org.scalaide.util.internal.eclipse.SWTUtils
import org.scalaide.util.internal.eclipse.EclipseUtils

class RunDiagnosticAction extends IObjectActionDelegate with IWorkbenchWindowActionDelegate {
private var parentWindow: IWorkbenchWindow = null
Expand All @@ -27,7 +28,7 @@ class RunDiagnosticAction extends IObjectActionDelegate with IWorkbenchWindowAct
override def selectionChanged(action: IAction, selection: ISelection) { }

override def run(action: IAction) {
Utils tryExecute {
EclipseUtils.withSafeRunner("Error occurred while trying to create diagnostic dialog.") {
action.getId match {
case RUN_DIAGNOSTICS =>
val shell = if (parentWindow == null) SWTUtils.getShell else parentWindow.getShell
Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,12 @@
package org.scalaide.ui.internal.actions

import org.eclipse.core.resources.IProject
import org.eclipse.jface.action.IAction
import org.eclipse.jface.viewers.ISelection
import org.eclipse.jface.viewers.IStructuredSelection
import org.eclipse.core.runtime.Platform
import org.eclipse.ui.IObjectActionDelegate
import org.eclipse.ui.IWorkbenchPart
import org.scalaide.util.internal.Utils
import org.scalaide.core.internal.project.ScalaLibraryPluginDependencyUtils
import org.scalaide.core.SdtConstants
import org.scalaide.util.internal.eclipse.EclipseUtils

object ToggleScalaNatureAction {
val PDE_PLUGIN_NATURE = "org.eclipse.pde.PluginNature" /* == org.eclipse.pde.internal.core.natures.PDE.PLUGIN_NATURE */
Expand All @@ -23,8 +20,8 @@ class ToggleScalaNatureAction extends AbstractPopupAction {
toggleScalaNature(project)
}

private def toggleScalaNature(project: IProject) =
Utils tryExecute {
private def toggleScalaNature(project: IProject): Unit =
EclipseUtils.withSafeRunner("Couldn't toggle Scala nature.") {
if (project.hasNature(SdtConstants.NatureId)) {
doIfPdePresent(project) { ScalaLibraryPluginDependencyUtils.removeScalaLibraryRequirement(project) }
updateNatureIds(project) { _ filterNot (_ == SdtConstants.NatureId) }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,9 @@ import org.scalaide.core.IScalaPlugin
import org.scalaide.core.compiler.ScalaPresentationCompilerProxy
import org.scalaide.core.internal.project.Nature
import org.scalaide.core.IScalaProject
import org.scalaide.util.internal.Utils
import org.scalaide.util.internal.ui.DisplayThread
import org.scalaide.util.internal.eclipse.SWTUtils
import org.scalaide.util.internal.eclipse.EclipseUtils

object MissingScalaRequirementHandler {

Expand All @@ -29,7 +29,7 @@ object MissingScalaRequirementHandler {

class MissingScalaRequirementHandler extends RichStatusHandler {

def doHandleStatus(status: IStatus, source: Object) = {
override def doHandleStatus(status: IStatus, source: Object) = {
val scalaPc = source.asInstanceOfOpt[ScalaPresentationCompilerProxy]
val shell = SWTUtils.getShell
val title = "Add Scala library to project classpath?"
Expand All @@ -52,9 +52,12 @@ class MissingScalaRequirementHandler extends RichStatusHandler {
1)
dialog.open()
val buttonId = dialog.getReturnCode()
if (buttonId == IDialogConstants.OK_ID) Utils.tryExecute(Nature.addScalaLibAndSave(project.underlying))
if (buttonId == IDialogConstants.OK_ID)
EclipseUtils.withSafeRunner("Error occurred while trying to add Scala library to classpath.") {
Nature.addScalaLibAndSave(project.underlying)
}
}
}
}

}
}
Original file line number Diff line number Diff line change
Expand Up @@ -28,16 +28,13 @@ import org.eclipse.ui.dialogs.PropertyPage
import org.eclipse.ui.IWorkbench
import org.eclipse.ui.IWorkbenchPreferencePage
import org.scalaide.util.internal.eclipse.SWTUtils._
import org.scalaide.util.internal.Utils
import org.scalaide.core.IScalaPlugin
import org.eclipse.jface.preference.RadioGroupFieldEditor
import org.eclipse.jface.preference.FieldEditor
import org.eclipse.jface.preference.BooleanFieldEditor
import org.eclipse.core.resources.ProjectScope
import org.scalaide.core.SdtConstants



class OrganizeImportsPreferencesPage extends PropertyPage with IWorkbenchPreferencePage {
import OrganizeImportsPreferences._

Expand Down Expand Up @@ -81,7 +78,7 @@ class OrganizeImportsPreferencesPage extends PropertyPage with IWorkbenchPrefere
fieldEditor
}

def createContents(parent: Composite): Control = {
override def createContents(parent: Composite): Control = {

initUnderlyingPreferenceStore() // done here to ensure that getElement will have been set

Expand Down Expand Up @@ -116,26 +113,26 @@ class OrganizeImportsPreferencesPage extends PropertyPage with IWorkbenchPrefere
horizontalLine.setLayoutData(new CC().spanX(2).grow.wrap)
}

fieldEditors += addNewFieldEditorWrappedInComposite(parent = control) { parent =>
fieldEditors += addNewFieldEditorWrappedInComposite(parent = control) { (parent =>
new ListEditor(groupsKey, "Define the sorting order of import statements.", parent) {

allEnableDisableControls += getListControl(parent)
allEnableDisableControls += getButtonBoxControl(parent)

def createList(items: Array[String]) = items.mkString("$")
override def createList(items: Array[String]) = items.mkString("$")

def parseString(stringList: String) = stringList.split("\\$")
override def parseString(stringList: String) = stringList.split("\\$")

def getNewInputObject(): String = {
override def getNewInputObject(): String = {

val dlg = new InputDialog(Display.getCurrent().getActiveShell(), "", "Enter a package name:", "", new IInputValidator { def isValid(text: String) = null });
val dlg = new InputDialog(Display.getCurrent().getActiveShell(), "", "Enter a package name:", "", new IInputValidator { override def isValid(text: String) = null });
if (dlg.open() == Window.OK) {
dlg.getValue()
} else {
null
}
}
}
})
}

fieldEditors += addNewFieldEditorWrappedInComposite(parent = control) { parent =>
Expand All @@ -150,7 +147,7 @@ class OrganizeImportsPreferencesPage extends PropertyPage with IWorkbenchPrefere
}
}

fieldEditors += addNewFieldEditorWrappedInComposite(parent = control) { parent =>
fieldEditors += addNewFieldEditorWrappedInComposite(parent = control) { (parent =>
new ListEditor(wildcardsKey, "Always use wilcard imports when importing from these packages and objects:", parent) {

getDownButton.setVisible(false)
Expand All @@ -159,20 +156,20 @@ class OrganizeImportsPreferencesPage extends PropertyPage with IWorkbenchPrefere
allEnableDisableControls += getListControl(parent)
allEnableDisableControls += getButtonBoxControl(parent)

def createList(items: Array[String]) = items.mkString("$")
override def createList(items: Array[String]) = items.mkString("$")

def parseString(stringList: String) = stringList.split("\\$")
override def parseString(stringList: String) = stringList.split("\\$")

def getNewInputObject(): String = {
override def getNewInputObject(): String = {

val dlg = new InputDialog(Display.getCurrent().getActiveShell(), "", "Enter a fully qualified package or type name:", "", new IInputValidator { def isValid(text: String) = null });
val dlg = new InputDialog(Display.getCurrent().getActiveShell(), "", "Enter a fully qualified package or type name:", "", new IInputValidator { override def isValid(text: String) = null });
if (dlg.open() == Window.OK) {
dlg.getValue()
} else {
null
}
}
}
})
}

fieldEditors += addNewFieldEditorWrappedInComposite(parent = control) { parent =>
Expand Down Expand Up @@ -248,14 +245,11 @@ object OrganizeImportsPreferences extends Enumeration {
class OrganizeImportsPreferencesInitializer extends AbstractPreferenceInitializer {

/** Actually initializes preferences */
def initializeDefaultPreferences() : Unit = {

Utils.tryExecute {
val node = DefaultScope.INSTANCE.getNode(SdtConstants.PluginId)
node.put(OrganizeImportsPreferences.omitScalaPackage, "false")
node.put(OrganizeImportsPreferences.groupsKey, "java$scala$org$com")
node.put(OrganizeImportsPreferences.wildcardsKey, "scalaz$scalaz.Scalaz")
node.put(OrganizeImportsPreferences.expandCollapseKey, OrganizeImportsPreferences.ExpandImports.toString)
}
override def initializeDefaultPreferences(): Unit = {
val node = DefaultScope.INSTANCE.getNode(SdtConstants.PluginId)
node.put(OrganizeImportsPreferences.omitScalaPackage, "false")
node.put(OrganizeImportsPreferences.groupsKey, "java$scala$org$com")
node.put(OrganizeImportsPreferences.wildcardsKey, "scalaz$scalaz.Scalaz")
node.put(OrganizeImportsPreferences.expandCollapseKey, OrganizeImportsPreferences.ExpandImports.toString)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer
import org.eclipse.core.runtime.preferences.DefaultScope
import scala.tools.nsc.Settings
import org.scalaide.util.internal.SettingConverterUtil._
import org.scalaide.util.internal.Utils
import org.eclipse.ui.preferences.ScopedPreferenceStore
import org.scalaide.core.SdtConstants
import org.scalaide.core.compiler.ScalaPresentationCompiler
Expand All @@ -16,31 +15,29 @@ import org.scalaide.core.compiler.ScalaPresentationCompiler
class ScalaCompilerPreferenceInitializer extends AbstractPreferenceInitializer {

/** Actually initializes preferences */
def initializeDefaultPreferences() : Unit = {
Utils.tryExecute {
val store = new ScopedPreferenceStore(DefaultScope.INSTANCE, SdtConstants.PluginId)
override def initializeDefaultPreferences(): Unit = {
val store = new ScopedPreferenceStore(DefaultScope.INSTANCE, SdtConstants.PluginId)

def defaultPreference(s: Settings#Setting) {
val preferenceName = convertNameToProperty(s.name)
val default = s match {
case bswd : ScalaPluginSettings.BooleanSettingWithDefault => bswd.default.toString()
case bs : Settings#BooleanSetting => "false"
case is : Settings#IntSetting => is.default.toString
case ss : Settings#StringSetting => ss.default
case ms : Settings#MultiStringSetting => ""
case cs : Settings#ChoiceSetting => cs.default
}
store.setDefault(preferenceName, default)
}

IDESettings.shownSettings(ScalaPresentationCompiler.defaultScalaSettings()).foreach {_.userSettings.foreach (defaultPreference)}
IDESettings.buildManagerSettings.foreach {_.userSettings.foreach(defaultPreference)}
store.setDefault(convertNameToProperty(ScalaPluginSettings.stopBuildOnErrors.name), true)
store.setDefault(convertNameToProperty(ScalaPluginSettings.relationsDebug.name), false)
store.setDefault(convertNameToProperty(ScalaPluginSettings.apiDiff.name), false)
store.setDefault(convertNameToProperty(ScalaPluginSettings.withVersionClasspathValidator.name), true)
store.setDefault(convertNameToProperty(ScalaPluginSettings.recompileOnMacroDef.name), true)
store.setDefault(convertNameToProperty(ScalaPluginSettings.nameHashing.name), false)
def defaultPreference(s: Settings#Setting) {
val preferenceName = convertNameToProperty(s.name)
val default = s match {
case bswd : ScalaPluginSettings.BooleanSettingWithDefault => bswd.default.toString()
case bs : Settings#BooleanSetting => "false"
case is : Settings#IntSetting => is.default.toString
case ss : Settings#StringSetting => ss.default
case ms : Settings#MultiStringSetting => ""
case cs : Settings#ChoiceSetting => cs.default
}
store.setDefault(preferenceName, default)
}

IDESettings.shownSettings(ScalaPresentationCompiler.defaultScalaSettings()).foreach {_.userSettings.foreach (defaultPreference)}
IDESettings.buildManagerSettings.foreach {_.userSettings.foreach(defaultPreference)}
store.setDefault(convertNameToProperty(ScalaPluginSettings.stopBuildOnErrors.name), true)
store.setDefault(convertNameToProperty(ScalaPluginSettings.relationsDebug.name), false)
store.setDefault(convertNameToProperty(ScalaPluginSettings.apiDiff.name), false)
store.setDefault(convertNameToProperty(ScalaPluginSettings.withVersionClasspathValidator.name), true)
store.setDefault(convertNameToProperty(ScalaPluginSettings.recompileOnMacroDef.name), true)
store.setDefault(convertNameToProperty(ScalaPluginSettings.nameHashing.name), false)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import org.eclipse.ui.ide.IDE
import org.eclipse.ui.wizards.newresource.BasicNewResourceWizard
import org.eclipse.ui.IWorkbench
import org.scalaide.core.SdtConstants
import org.scalaide.util.internal.eclipse.EclipseUtils

object NewApplicationWizard {

Expand Down Expand Up @@ -90,9 +91,11 @@ class NewApplicationWizard extends BasicNewResourceWizard with HasLogger {
true
}

override def performFinish: Boolean = page.getSelectedPackage forall
{(pkg) => tryExecute(createApplication(page.getApplicationName, pkg)).getOrElse(false)}

override def performFinish: Boolean = page.getSelectedPackage forall { pkg =>
EclipseUtils.withSafeRunner("Couldn't create file.") {
createApplication(page.getApplicationName, pkg)
}.getOrElse(false)
}

private def openInEditor(file: IFile) = {
selectAndReveal(file)
Expand Down
13 changes: 0 additions & 13 deletions org.scala-ide.sdt.core/src/org/scalaide/util/internal/Utils.scala
Original file line number Diff line number Diff line change
Expand Up @@ -30,19 +30,6 @@ object Utils extends HasLogger {
res
}

/** Try executing the passed `action` and log any exception occurring. */
def tryExecute[T](action: => T, msgIfError: => Option[String] = None): Option[T] = {
try Some(action)
catch {
case t: Throwable =>
msgIfError match {
case Some(errMsg) => eclipseLog.error(errMsg, t)
case None => eclipseLog.error(t)
}
None
}
}

implicit class WithAsInstanceOfOpt(obj: AnyRef) {

/** Half type-safe cast. It uses erasure semantics (like Java casts). For example:
Expand Down

0 comments on commit 27407a4

Please sign in to comment.