diff --git a/smalidea/build.gradle b/smalidea/build.gradle index 6b855d7b..8cba19d2 100644 --- a/smalidea/build.gradle +++ b/smalidea/build.gradle @@ -93,7 +93,7 @@ if (!('idea' in gradle.startParameter.taskNames)) { apply plugin: 'org.jetbrains.intellij' intellij { - version 'IC-14.1.4' + version 'IC-15.0.6' pluginName 'smalidea' updateSinceUntilBuild false diff --git a/smalidea/src/main/java/org/jf/smalidea/debugging/SmaliDebuggerSupport.java b/smalidea/src/main/java/org/jf/smalidea/debugging/SmaliDebuggerSupport.java deleted file mode 100644 index f822fd1f..00000000 --- a/smalidea/src/main/java/org/jf/smalidea/debugging/SmaliDebuggerSupport.java +++ /dev/null @@ -1,81 +0,0 @@ -/* - * Copyright 2014, Google Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -package org.jf.smalidea.debugging; - -import com.intellij.debugger.actions.StepOverActionHandler; -import com.intellij.debugger.impl.DebuggerSession; -import com.intellij.debugger.ui.JavaDebuggerSupport; -import com.intellij.openapi.actionSystem.AnActionEvent; -import com.intellij.openapi.project.Project; -import com.intellij.xdebugger.impl.actions.DebuggerActionHandler; -import com.sun.jdi.request.StepRequest; -import org.jetbrains.annotations.NotNull; - -public class SmaliDebuggerSupport extends JavaDebuggerSupport { - private static boolean useModifiedMethod; - - static { - try { - DebuggerSession.class.getMethod("stepOver", boolean.class, int.class); - useModifiedMethod = true; - } catch (NoSuchMethodException ex) { - useModifiedMethod = false; - } - } - - private final StepOverActionHandler myStepOverActionHandler = new StepOverActionHandler() { - @Override - public void perform(@NotNull final Project project, AnActionEvent e) { - final DebuggerSession session = getSession(project); - - if (session != null) { - if (useModifiedMethod) { - session.stepOver(false, StepRequest.STEP_MIN); - } else { - session.stepOver(false); - } - } - } - - @Override public boolean isEnabled(@NotNull Project project, AnActionEvent event) { - // TODO: check if we're currently in a smali file? - return super.isEnabled(project, event); - } - }; - - @NotNull - @Override - public DebuggerActionHandler getStepOverHandler() { - return myStepOverActionHandler; - } - -} diff --git a/smalidea/src/main/java/org/jf/smalidea/debugging/SmaliSteppingCommandProvider.java b/smalidea/src/main/java/org/jf/smalidea/debugging/SmaliSteppingCommandProvider.java new file mode 100644 index 00000000..4be1e7f0 --- /dev/null +++ b/smalidea/src/main/java/org/jf/smalidea/debugging/SmaliSteppingCommandProvider.java @@ -0,0 +1,54 @@ +/* + * Copyright 2016, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package org.jf.smalidea.debugging; + +import com.intellij.debugger.SourcePosition; +import com.intellij.debugger.engine.ContextUtil; +import com.intellij.debugger.engine.DebugProcessImpl.ResumeCommand; +import com.intellij.debugger.engine.SuspendContextImpl; +import com.intellij.debugger.impl.JvmSteppingCommandProvider; +import com.sun.jdi.request.StepRequest; +import org.jetbrains.annotations.NotNull; +import org.jf.smalidea.SmaliLanguage; + +public class SmaliSteppingCommandProvider extends JvmSteppingCommandProvider { + @Override + public ResumeCommand getStepOverCommand(@NotNull final SuspendContextImpl suspendContext, boolean ignoreBreakpoints, + int stepSize) { + SourcePosition locationPosition = ContextUtil.getSourcePosition(suspendContext); + if (locationPosition != null && locationPosition.getFile().getLanguage() == SmaliLanguage.INSTANCE) { + return suspendContext.getDebugProcess().createStepOverCommand(suspendContext, ignoreBreakpoints, + StepRequest.STEP_MIN); + } + return null; + } +} diff --git a/smalidea/src/main/resources/META-INF/plugin.xml b/smalidea/src/main/resources/META-INF/plugin.xml index 6e24054b..8ae92dad 100644 --- a/smalidea/src/main/resources/META-INF/plugin.xml +++ b/smalidea/src/main/resources/META-INF/plugin.xml @@ -12,7 +12,7 @@ ]]> - + @@ -23,8 +23,7 @@ - +