From 437c14490f47979e043dd09f6b60cec88a1ec776 Mon Sep 17 00:00:00 2001 From: Max Medvedev Date: Tue, 11 Sep 2012 15:39:27 +0400 Subject: [PATCH] IDEA-91342 Intention 'Remove redundant .class' --- .../after.groovy.template | 1 + .../before.groovy.template | 1 + .../description.html | 5 ++ plugins/groovy/src/META-INF/plugin.xml | 5 ++ .../GroovyIntentionsBundle.properties | 4 +- ...RemoveRedundantClassPropertyIntention.java | 56 +++++++++++++++++++ 6 files changed, 71 insertions(+), 1 deletion(-) create mode 100644 plugins/groovy/resources/intentionDescriptions/RemoveRedundantClassPropertyIntention/after.groovy.template create mode 100644 plugins/groovy/resources/intentionDescriptions/RemoveRedundantClassPropertyIntention/before.groovy.template create mode 100644 plugins/groovy/resources/intentionDescriptions/RemoveRedundantClassPropertyIntention/description.html create mode 100644 plugins/groovy/src/org/jetbrains/plugins/groovy/intentions/style/RemoveRedundantClassPropertyIntention.java diff --git a/plugins/groovy/resources/intentionDescriptions/RemoveRedundantClassPropertyIntention/after.groovy.template b/plugins/groovy/resources/intentionDescriptions/RemoveRedundantClassPropertyIntention/after.groovy.template new file mode 100644 index 000000000000..9a103df6a9b5 --- /dev/null +++ b/plugins/groovy/resources/intentionDescriptions/RemoveRedundantClassPropertyIntention/after.groovy.template @@ -0,0 +1 @@ +print String diff --git a/plugins/groovy/resources/intentionDescriptions/RemoveRedundantClassPropertyIntention/before.groovy.template b/plugins/groovy/resources/intentionDescriptions/RemoveRedundantClassPropertyIntention/before.groovy.template new file mode 100644 index 000000000000..0d7152414b19 --- /dev/null +++ b/plugins/groovy/resources/intentionDescriptions/RemoveRedundantClassPropertyIntention/before.groovy.template @@ -0,0 +1 @@ +print String.class diff --git a/plugins/groovy/resources/intentionDescriptions/RemoveRedundantClassPropertyIntention/description.html b/plugins/groovy/resources/intentionDescriptions/RemoveRedundantClassPropertyIntention/description.html new file mode 100644 index 000000000000..fa873b0f8636 --- /dev/null +++ b/plugins/groovy/resources/intentionDescriptions/RemoveRedundantClassPropertyIntention/description.html @@ -0,0 +1,5 @@ + + +This intention removes redundant explicit .class reference. + + \ No newline at end of file diff --git a/plugins/groovy/src/META-INF/plugin.xml b/plugins/groovy/src/META-INF/plugin.xml index e1c04efa8a23..3fe722e23a93 100644 --- a/plugins/groovy/src/META-INF/plugin.xml +++ b/plugins/groovy/src/META-INF/plugin.xml @@ -1178,6 +1178,11 @@ intention.category.groovy/intention.category.groovy.style org.jetbrains.plugins.groovy.intentions.style.ConvertToGeeseBracesIntention + + org.jetbrains.plugins.groovy.intentions.GroovyIntentionsBundle + intention.category.groovy/intention.category.groovy.style + org.jetbrains.plugins.groovy.intentions.style.RemoveRedundantClassPropertyIntention + org.jetbrains.plugins.groovy.intentions.GroovyIntentionsBundle intention.category.groovy/intention.category.groovy.style diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/intentions/GroovyIntentionsBundle.properties b/plugins/groovy/src/org/jetbrains/plugins/groovy/intentions/GroovyIntentionsBundle.properties index 3f7457df039e..a592fb0ddb12 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/intentions/GroovyIntentionsBundle.properties +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/intentions/GroovyIntentionsBundle.properties @@ -173,4 +173,6 @@ remove.unnecessary.escape.characters.intention.family.name=Remove unnecessary es gr.break.string.on.line.breaks.intention.name=Break string on '\\n' gr.break.string.on.line.breaks.intention.family.name=Break string on '\\n' gr.create.missing.switch.branches.intention.name=Create missing 'switch' branches -gr.create.missing.switch.branches.intention.family.name=Create missing 'switch' branches \ No newline at end of file +gr.create.missing.switch.branches.intention.family.name=Create missing 'switch' branches +remove.redundant.class.property.intention.name=Remove redundant .class +remove.redundant.class.property.intention.family.name=Remove redundant .class \ No newline at end of file diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/intentions/style/RemoveRedundantClassPropertyIntention.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/intentions/style/RemoveRedundantClassPropertyIntention.java new file mode 100644 index 000000000000..375ab4dba165 --- /dev/null +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/intentions/style/RemoveRedundantClassPropertyIntention.java @@ -0,0 +1,56 @@ +/* + * 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 org.jetbrains.plugins.groovy.intentions.style; + +import com.intellij.openapi.editor.Editor; +import com.intellij.openapi.project.Project; +import com.intellij.psi.PsiClass; +import com.intellij.psi.PsiElement; +import com.intellij.util.IncorrectOperationException; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.plugins.groovy.intentions.base.Intention; +import org.jetbrains.plugins.groovy.intentions.base.PsiElementPredicate; +import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrExpression; +import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrReferenceExpression; + +/** + * @author Max Medvedev + */ +public class RemoveRedundantClassPropertyIntention extends Intention { + @Override + protected void processIntention(@NotNull PsiElement element, Project project, Editor editor) throws IncorrectOperationException { + if (element instanceof GrReferenceExpression) { + ((GrReferenceExpression)element).replaceWithExpression(((GrReferenceExpression)element).getQualifier(), true); + } + } + + @NotNull + @Override + protected PsiElementPredicate getElementPredicate() { + return new PsiElementPredicate() { + @Override + public boolean satisfiedBy(PsiElement element) { + if (element instanceof GrReferenceExpression && "class".equals(((GrReferenceExpression)element).getReferenceName())) { + GrExpression qualifier = ((GrReferenceExpression)element).getQualifier(); + if (qualifier instanceof GrReferenceExpression) { + return ((GrReferenceExpression)qualifier).resolve() instanceof PsiClass; + } + } + return false; + } + }; + } +}