/* * Copyright 2000-2012 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.intellij.execution; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import javax.swing.*; /** * Execution targets allow running same run configuration on various targets such as devices, simulators etc.<br> * IDE can suggest possible targets for every configuration depending on its type or settings.<br> * <br> * When a run configuration is executed on a specific target, it becomes associated with this target and all the following actions (e.g. rerun, rerun failed tests) * are be performed on this target, even if another target is selected in the UI.<br> * <br> * Example:<br> * AppCode suggests available iOS Devices and iOS Simulators for iOS run configuration,<br> * while only showing OS X 32-bit/64-bit targets for OS X configurations.<br> * <br> * RunConfiguration can decide, if it can be run on a given target<br> * (see {@link com.intellij.execution.RunnerAndConfigurationSettings#canRunOn(com.intellij.execution.ExecutionTarget)} and {@link com.intellij.execution.configurations.TargetAwareRunProfile#canRunOn(com.intellij.execution.ExecutionTarget)})<br> * <br> * Targets are collected from {@link com.intellij.execution.ExecutionTargetProvider} */ public abstract class ExecutionTarget { /** * Id is used to save selected target between restarts */ @NotNull public abstract String getId(); @NotNull public abstract String getDisplayName(); @Nullable public abstract Icon getIcon(); /** * Implementation-specific logic should decide whether to suggest this target for the given configuration. */ public abstract boolean canRun(@NotNull RunnerAndConfigurationSettings configuration); @Override public boolean equals(Object obj) { return obj == this || (getClass().isInstance(obj) && getId().equals(((ExecutionTarget)obj).getId())); } @Override public int hashCode() { return getId().hashCode(); } @Override public String toString() { return getId(); } }