From 3d68304b69c48732da9d7ffa8d19a1a8c1153d2a Mon Sep 17 00:00:00 2001 From: Max Medvedev Date: Thu, 24 Oct 2013 15:21:48 +0400 Subject: [PATCH] IDEA-114762 ShowContainerDeclaration for Groovy --- plugins/groovy/src/META-INF/plugin.xml | 8 +++ ...assInitializerDeclarationRangeHandler.java | 34 +++++++++++++ .../hint/GrMethodDeclarationRangeHandler.java | 35 +++++++++++++ .../hint/GrTypeDefinitionRangeHandler.java | 49 +++++++++++++++++++ 4 files changed, 126 insertions(+) create mode 100644 plugins/groovy/src/org/jetbrains/plugins/groovy/codeInsight/hint/GrClassInitializerDeclarationRangeHandler.java create mode 100644 plugins/groovy/src/org/jetbrains/plugins/groovy/codeInsight/hint/GrMethodDeclarationRangeHandler.java create mode 100644 plugins/groovy/src/org/jetbrains/plugins/groovy/codeInsight/hint/GrTypeDefinitionRangeHandler.java diff --git a/plugins/groovy/src/META-INF/plugin.xml b/plugins/groovy/src/META-INF/plugin.xml index e4d8b5428e70..92bb2d2365e0 100644 --- a/plugins/groovy/src/META-INF/plugin.xml +++ b/plugins/groovy/src/META-INF/plugin.xml @@ -191,6 +191,14 @@ + + + + + diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/codeInsight/hint/GrClassInitializerDeclarationRangeHandler.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/codeInsight/hint/GrClassInitializerDeclarationRangeHandler.java new file mode 100644 index 000000000000..f833e7743f69 --- /dev/null +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/codeInsight/hint/GrClassInitializerDeclarationRangeHandler.java @@ -0,0 +1,34 @@ +/* + * Copyright 2000-2013 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.codeInsight.hint; + +import com.intellij.codeInsight.hint.DeclarationRangeHandler; +import com.intellij.openapi.util.TextRange; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.plugins.groovy.lang.psi.api.statements.GrClassInitializer; + +/** + * Created by Max Medvedev on 10/24/13 + */ +public class GrClassInitializerDeclarationRangeHandler implements DeclarationRangeHandler { + @NotNull + @Override + public TextRange getDeclarationRange(@NotNull GrClassInitializer initializer) { + int startOffset = initializer.getModifierList().getTextRange().getStartOffset(); + int endOffset = initializer.getBlock().getTextRange().getStartOffset(); + return new TextRange(startOffset, endOffset); + } +} diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/codeInsight/hint/GrMethodDeclarationRangeHandler.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/codeInsight/hint/GrMethodDeclarationRangeHandler.java new file mode 100644 index 000000000000..05e8a0ab4af1 --- /dev/null +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/codeInsight/hint/GrMethodDeclarationRangeHandler.java @@ -0,0 +1,35 @@ +/* + * Copyright 2000-2013 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.codeInsight.hint; + +import com.intellij.codeInsight.hint.DeclarationRangeHandler; +import com.intellij.openapi.util.TextRange; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.members.GrMethod; + +/** + * Created by Max Medvedev on 10/24/13 + */ +public class GrMethodDeclarationRangeHandler implements DeclarationRangeHandler { + @NotNull + @Override + public TextRange getDeclarationRange(@NotNull GrMethod method) { + final TextRange textRange = method.getModifierList().getTextRange(); + int startOffset = textRange != null ? textRange.getStartOffset():method.getTextOffset(); + int endOffset = method.getThrowsList().getTextRange().getEndOffset(); + return new TextRange(startOffset, endOffset); + } +} diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/codeInsight/hint/GrTypeDefinitionRangeHandler.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/codeInsight/hint/GrTypeDefinitionRangeHandler.java new file mode 100644 index 000000000000..71d558f7264f --- /dev/null +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/codeInsight/hint/GrTypeDefinitionRangeHandler.java @@ -0,0 +1,49 @@ +/* + * Copyright 2000-2013 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.codeInsight.hint; + +import com.intellij.codeInsight.hint.DeclarationRangeHandler; +import com.intellij.openapi.util.TextRange; +import com.intellij.psi.PsiModifierList; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrNewExpression; +import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.GrAnonymousClassDefinition; +import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.GrImplementsClause; +import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.GrTypeDefinition; + +/** + * Created by Max Medvedev on 10/24/13 + */ +public class GrTypeDefinitionRangeHandler implements DeclarationRangeHandler{ + @NotNull + @Override + public TextRange getDeclarationRange(@NotNull GrTypeDefinition aClass) { + if (aClass instanceof GrAnonymousClassDefinition){ + GrNewExpression call = (GrNewExpression)aClass.getParent(); + int startOffset = call.getTextRange().getStartOffset(); + int endOffset = call.getArgumentList().getTextRange().getEndOffset(); + return new TextRange(startOffset, endOffset); + } + else{ + final PsiModifierList modifierList = aClass.getModifierList(); + int startOffset = modifierList == null ? aClass.getTextRange().getStartOffset() : modifierList.getTextRange().getStartOffset(); + final GrImplementsClause implementsList = aClass.getImplementsClause(); + int endOffset = implementsList == null ? aClass.getTextRange().getEndOffset() : implementsList.getTextRange().getEndOffset(); + return new TextRange(startOffset, endOffset); + } + + } +}