From cd5e327ad9002d5e52f6d3ff825614fbb91c539d Mon Sep 17 00:00:00 2001 From: Nikolay Tropin Date: Mon, 1 Dec 2014 19:30:33 +0300 Subject: [PATCH] extra frame variables provider --- .../engine/JavaSimpleGetterProvider.java | 65 +++++++++++++++++++ .../debugger/engine/DebuggerUtils.java | 43 ++---------- .../debugger/engine/SimpleGetterProvider.java | 29 +++++++++ resources/src/META-INF/IdeaPlugin.xml | 4 ++ 4 files changed, 103 insertions(+), 38 deletions(-) create mode 100644 java/debugger/impl/src/com/intellij/debugger/engine/JavaSimpleGetterProvider.java create mode 100644 java/debugger/openapi/src/com/intellij/debugger/engine/SimpleGetterProvider.java diff --git a/java/debugger/impl/src/com/intellij/debugger/engine/JavaSimpleGetterProvider.java b/java/debugger/impl/src/com/intellij/debugger/engine/JavaSimpleGetterProvider.java new file mode 100644 index 000000000000..6e471636fc38 --- /dev/null +++ b/java/debugger/impl/src/com/intellij/debugger/engine/JavaSimpleGetterProvider.java @@ -0,0 +1,65 @@ +/* + * Copyright 2000-2014 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.debugger.engine; + +import com.intellij.psi.*; + +/** + * Nikolay.Tropin + * 2014-11-25 + */ +public class JavaSimpleGetterProvider implements SimpleGetterProvider { + @Override + public boolean isSimpleGetter(PsiMethod method) { + final PsiCodeBlock body = method.getBody(); + if(body == null){ + return false; + } + + final PsiStatement[] statements = body.getStatements(); + if(statements.length != 1){ + return false; + } + + final PsiStatement statement = statements[0]; + if(!(statement instanceof PsiReturnStatement)){ + return false; + } + + final PsiExpression value = ((PsiReturnStatement)statement).getReturnValue(); + if(!(value instanceof PsiReferenceExpression)){ + return false; + } + + final PsiReferenceExpression reference = (PsiReferenceExpression)value; + final PsiExpression qualifier = reference.getQualifierExpression(); + //noinspection HardCodedStringLiteral + if(qualifier != null && !"this".equals(qualifier.getText())) { + return false; + } + + final PsiElement referent = reference.resolve(); + if(referent == null) { + return false; + } + + if(!(referent instanceof PsiField)) { + return false; + } + + return ((PsiField)referent).getContainingClass().equals(method.getContainingClass()); + } +} diff --git a/java/debugger/openapi/src/com/intellij/debugger/engine/DebuggerUtils.java b/java/debugger/openapi/src/com/intellij/debugger/engine/DebuggerUtils.java index ed150d588c3c..38f04a97f66f 100644 --- a/java/debugger/openapi/src/com/intellij/debugger/engine/DebuggerUtils.java +++ b/java/debugger/openapi/src/com/intellij/debugger/engine/DebuggerUtils.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2009 JetBrains s.r.o. + * Copyright 2000-2014 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. @@ -489,44 +489,11 @@ public abstract class DebuggerUtils { return machine != null && machine.canGetSyntheticAttribute() && typeComponent.isSynthetic(); } - public static boolean isSimpleGetter(PsiMethod method){ - final PsiCodeBlock body = method.getBody(); - if(body == null){ - return false; + public static boolean isSimpleGetter(PsiMethod method) { + for (SimpleGetterProvider provider : SimpleGetterProvider.EP_NAME.getExtensions()) { + if (provider.isSimpleGetter(method)) return true; } - - final PsiStatement[] statements = body.getStatements(); - if(statements.length != 1){ - return false; - } - - final PsiStatement statement = statements[0]; - if(!(statement instanceof PsiReturnStatement)){ - return false; - } - - final PsiExpression value = ((PsiReturnStatement)statement).getReturnValue(); - if(!(value instanceof PsiReferenceExpression)){ - return false; - } - - final PsiReferenceExpression reference = (PsiReferenceExpression)value; - final PsiExpression qualifier = reference.getQualifierExpression(); - //noinspection HardCodedStringLiteral - if(qualifier != null && !"this".equals(qualifier.getText())) { - return false; - } - - final PsiElement referent = reference.resolve(); - if(referent == null) { - return false; - } - - if(!(referent instanceof PsiField)) { - return false; - } - - return ((PsiField)referent).getContainingClass().equals(method.getContainingClass()); + return false; } public static boolean isPrimitiveType(final String typeName) { diff --git a/java/debugger/openapi/src/com/intellij/debugger/engine/SimpleGetterProvider.java b/java/debugger/openapi/src/com/intellij/debugger/engine/SimpleGetterProvider.java new file mode 100644 index 000000000000..b776d91e2174 --- /dev/null +++ b/java/debugger/openapi/src/com/intellij/debugger/engine/SimpleGetterProvider.java @@ -0,0 +1,29 @@ +/* + * Copyright 2000-2014 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.debugger.engine; + +import com.intellij.openapi.extensions.ExtensionPointName; +import com.intellij.psi.*; + +/** + * Nikolay.Tropin + * 2014-11-25 + */ +interface SimpleGetterProvider { + ExtensionPointName EP_NAME = ExtensionPointName.create("com.intellij.debugger.simpleGetterProvider"); + + boolean isSimpleGetter(PsiMethod method); +} diff --git a/resources/src/META-INF/IdeaPlugin.xml b/resources/src/META-INF/IdeaPlugin.xml index 5867eb7007a5..2f2d1b08ea36 100644 --- a/resources/src/META-INF/IdeaPlugin.xml +++ b/resources/src/META-INF/IdeaPlugin.xml @@ -115,6 +115,9 @@ + + @@ -1455,6 +1458,7 @@ +