diff options
Diffstat (limited to 'plugins/groovy/src/org')
37 files changed, 319 insertions, 243 deletions
diff --git a/plugins/groovy/src/org/intellij/plugins/intelliLang/inject/groovy/GrLanguageReferenceProvider.java b/plugins/groovy/src/org/intellij/plugins/intelliLang/inject/groovy/GrLanguageReferenceProvider.java index 401f20edc06e..f4094b2d665f 100644 --- a/plugins/groovy/src/org/intellij/plugins/intelliLang/inject/groovy/GrLanguageReferenceProvider.java +++ b/plugins/groovy/src/org/intellij/plugins/intelliLang/inject/groovy/GrLanguageReferenceProvider.java @@ -32,7 +32,7 @@ import org.jetbrains.plugins.groovy.lang.psi.patterns.GroovyPatterns; */ public class GrLanguageReferenceProvider extends PsiReferenceContributor { @Override - public void registerReferenceProviders(PsiReferenceRegistrar registrar) { + public void registerReferenceProviders(@NotNull PsiReferenceRegistrar registrar) { final Configuration configuration = Configuration.getInstance(); registrar.registerReferenceProvider( GroovyPatterns.groovyLiteralExpression().annotationParam(StandardPatterns.string().with(isLanguageAnnotation(configuration)), "value").and( diff --git a/plugins/groovy/src/org/intellij/plugins/intelliLang/inject/groovy/PatternEditorContextMembersProvider.java b/plugins/groovy/src/org/intellij/plugins/intelliLang/inject/groovy/PatternEditorContextMembersProvider.java index 0e9a216c441b..e23254da8d1a 100644 --- a/plugins/groovy/src/org/intellij/plugins/intelliLang/inject/groovy/PatternEditorContextMembersProvider.java +++ b/plugins/groovy/src/org/intellij/plugins/intelliLang/inject/groovy/PatternEditorContextMembersProvider.java @@ -146,7 +146,7 @@ public class PatternEditorContextMembersProvider extends NonCodeMembersContribut GlobalSearchScope.getScopeRestrictedByFileTypes(GlobalSearchScope.allScope(project), StdFileTypes.XML); final TextOccurenceProcessor occurenceProcessor = new TextOccurenceProcessor() { @Override - public boolean execute(PsiElement element, int offsetInElement) { + public boolean execute(@NotNull PsiElement element, int offsetInElement) { final XmlTag tag = PsiTreeUtil.getParentOfType(element, XmlTag.class); final String className = tag == null ? null : tag.getAttributeValue("className"); if (className != null && tag.getLocalName().endsWith("patternClass")) { diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/actions/generate/GroovyGenerationInfo.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/actions/generate/GroovyGenerationInfo.java index 068e96dd4cd0..00068d82237d 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/actions/generate/GroovyGenerationInfo.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/actions/generate/GroovyGenerationInfo.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2013 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. @@ -71,7 +71,7 @@ public class GroovyGenerationInfo<T extends PsiMember> extends PsiGenerationInfo final T member = getPsiMember(); if (member == null) return; - LOG.assertTrue(member instanceof GroovyPsiElement); + LOG.assertTrue(member instanceof GroovyPsiElement, member); final GroovyPsiElementFactory factory = GroovyPsiElementFactory.getInstance(member.getProject()); final PsiElement prev = member.getPrevSibling(); diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/annotator/intentions/CreateFieldFromUsageFix.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/annotator/intentions/CreateFieldFromUsageFix.java index 7f4f40fe94aa..ef19899ba5df 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/annotator/intentions/CreateFieldFromUsageFix.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/annotator/intentions/CreateFieldFromUsageFix.java @@ -25,7 +25,7 @@ import org.jetbrains.plugins.groovy.GroovyBundle; import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrReferenceExpression; import org.jetbrains.plugins.groovy.lang.psi.expectedTypes.GroovyExpectedTypesProvider; import org.jetbrains.plugins.groovy.lang.psi.expectedTypes.TypeConstraint; -import org.jetbrains.plugins.groovy.lang.psi.util.StaticChecker; +import org.jetbrains.plugins.groovy.lang.psi.util.GrStaticChecker; /** * @author ven @@ -49,7 +49,7 @@ public class CreateFieldFromUsageFix extends GrCreateFromUsageBaseFix { private String[] generateModifiers(@NotNull PsiClass targetClass) { final GrReferenceExpression myRefExpression = getRefExpr(); - if (myRefExpression != null && StaticChecker.isInStaticContext(myRefExpression, targetClass)) { + if (myRefExpression != null && GrStaticChecker.isInStaticContext(myRefExpression, targetClass)) { return new String[]{PsiModifier.STATIC}; } return ArrayUtil.EMPTY_STRING_ARRAY; diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/annotator/intentions/CreateMethodFromUsageFix.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/annotator/intentions/CreateMethodFromUsageFix.java index a1f356cdf4bb..881e823285c9 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/annotator/intentions/CreateMethodFromUsageFix.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/annotator/intentions/CreateMethodFromUsageFix.java @@ -33,9 +33,9 @@ import org.jetbrains.plugins.groovy.lang.psi.expectedTypes.SupertypeConstraint; import org.jetbrains.plugins.groovy.lang.psi.expectedTypes.TypeConstraint; import org.jetbrains.plugins.groovy.lang.psi.impl.statements.expressions.TypesUtil; import org.jetbrains.plugins.groovy.lang.psi.impl.synthetic.GroovyScriptClass; +import org.jetbrains.plugins.groovy.lang.psi.util.GrStaticChecker; import org.jetbrains.plugins.groovy.lang.psi.util.GrTraitUtil; import org.jetbrains.plugins.groovy.lang.psi.util.PsiUtil; -import org.jetbrains.plugins.groovy.lang.psi.util.StaticChecker; import org.jetbrains.plugins.groovy.template.expressions.ChooseTypeExpression; /** @@ -60,7 +60,7 @@ public class CreateMethodFromUsageFix extends GrCreateFromUsageBaseFix implement PsiMethod method = factory.createMethod(getMethodName(), PsiType.VOID); final GrReferenceExpression ref = getRefExpr(); - if (StaticChecker.isInStaticContext(ref, targetClass)) { + if (GrStaticChecker.isInStaticContext(ref, targetClass)) { method.getModifierList().setModifierProperty(PsiModifier.STATIC, true); } diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/annotator/intentions/GrCreateFromUsageBaseFix.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/annotator/intentions/GrCreateFromUsageBaseFix.java index 2fd5dc753988..16100550885d 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/annotator/intentions/GrCreateFromUsageBaseFix.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/annotator/intentions/GrCreateFromUsageBaseFix.java @@ -31,7 +31,7 @@ import org.jetbrains.plugins.groovy.GroovyBundle; 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.GrReferenceExpression; -import org.jetbrains.plugins.groovy.lang.psi.impl.statements.expressions.GrReferenceResolveUtil; +import org.jetbrains.plugins.groovy.lang.psi.util.GrStaticChecker; import org.jetbrains.plugins.groovy.lang.psi.util.PsiUtil; import javax.swing.*; @@ -139,7 +139,7 @@ public abstract class GrCreateFromUsageBaseFix extends Intention { private List<PsiClass> getTargetClasses() { final GrReferenceExpression ref = getRefExpr(); - final boolean compileStatic = PsiUtil.isCompileStatic(ref) || GrReferenceResolveUtil.isPropertyAccessInStaticMethod(ref); + final boolean compileStatic = PsiUtil.isCompileStatic(ref) || GrStaticChecker.isPropertyAccessInStaticMethod(ref); final PsiClass targetClass = QuickfixUtil.findTargetClass(ref, compileStatic); if (targetClass == null || !canBeTargetClass(targetClass)) return Collections.emptyList(); diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/codeInsight/navigation/actions/GroovyGotoSuperHandler.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/codeInsight/navigation/actions/GroovyGotoSuperHandler.java index 0aa67f28969b..d2d4a1bc6161 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/codeInsight/navigation/actions/GroovyGotoSuperHandler.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/codeInsight/navigation/actions/GroovyGotoSuperHandler.java @@ -56,18 +56,21 @@ public class GroovyGotoSuperHandler extends GotoTargetHandler implements Languag return new GotoData(e, findTargets(e), Collections.<AdditionalAction>emptyList()); } + @NotNull @Override protected String getChooserTitle(PsiElement sourceElement, String name, int length) { return CodeInsightBundle.message("goto.super.method.chooser.title"); } + @NotNull @Override protected String getFindUsagesTitle(PsiElement sourceElement, String name, int length) { return CodeInsightBundle.message("goto.super.method.findUsages.title", name); } + @NotNull @Override - protected String getNotFoundMessage(Project project, Editor editor, PsiFile file) { + protected String getNotFoundMessage(@NotNull Project project, @NotNull Editor editor, @NotNull PsiFile file) { final PsiMember source = findSource(editor, file); if (source instanceof PsiClass) { return GroovyBundle.message("no.super.classes.found"); @@ -87,7 +90,8 @@ public class GroovyGotoSuperHandler extends GotoTargetHandler implements Languag return PsiTreeUtil.getParentOfType(element, PsiMethod.class, GrField.class, PsiClass.class); } - private static PsiElement[] findTargets(PsiMember e) { + @NotNull + private static PsiElement[] findTargets(@NotNull PsiMember e) { if (e instanceof PsiClass) { PsiClass aClass = (PsiClass)e; List<PsiClass> allSupers = new ArrayList<PsiClass>(Arrays.asList(aClass.getSupers())); diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/codeInspection/GroovyInspectionSuppressor.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/codeInspection/GroovyInspectionSuppressor.java new file mode 100644 index 000000000000..df2288a5159b --- /dev/null +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/codeInspection/GroovyInspectionSuppressor.java @@ -0,0 +1,34 @@ +/* + * 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 org.jetbrains.plugins.groovy.codeInspection; + +import com.intellij.codeInspection.InspectionSuppressor; +import com.intellij.codeInspection.SuppressQuickFix; +import com.intellij.psi.PsiElement; +import org.jetbrains.annotations.NotNull; + +public class GroovyInspectionSuppressor implements InspectionSuppressor { + @Override + public boolean isSuppressedFor(@NotNull PsiElement element, @NotNull String name) { + return GroovySuppressableInspectionTool.getElementToolSuppressedIn(element, name) != null; + } + + @Override + public SuppressQuickFix[] getSuppressActions(@NotNull PsiElement element, String toolShortName) { + return GroovySuppressableInspectionTool.getSuppressActions(toolShortName); + } +} + diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/codeInspection/confusing/ClashingTraitMethodsInspection.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/codeInspection/confusing/ClashingTraitMethodsInspection.java index a446f3821b5c..b5579e186613 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/codeInspection/confusing/ClashingTraitMethodsInspection.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/codeInspection/confusing/ClashingTraitMethodsInspection.java @@ -30,7 +30,7 @@ import java.util.List; * Created by Max Medvedev on 03/06/14 */ public class ClashingTraitMethodsInspection extends BaseInspection { - private static final Logger LOG = Logger.getInstance(MyQuickFix.class); + private static final Logger LOG = Logger.getInstance(ClashingTraitMethodsInspection.class); @NotNull @Override diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/codeInspection/spellchecker/GroovySpellcheckingStrategy.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/codeInspection/spellchecker/GroovySpellcheckingStrategy.java index f252ee8869ef..9bc67a4355d0 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/codeInspection/spellchecker/GroovySpellcheckingStrategy.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/codeInspection/spellchecker/GroovySpellcheckingStrategy.java @@ -15,16 +15,14 @@ */ package org.jetbrains.plugins.groovy.codeInspection.spellchecker; -import com.intellij.codeInspection.SuppressQuickFix; import com.intellij.psi.PsiElement; import com.intellij.psi.javadoc.PsiDocComment; import com.intellij.spellchecker.inspections.PlainTextSplitter; import com.intellij.spellchecker.tokenizer.EscapeSequenceTokenizer; -import com.intellij.spellchecker.tokenizer.SuppressibleSpellcheckingStrategy; +import com.intellij.spellchecker.tokenizer.SpellcheckingStrategy; import com.intellij.spellchecker.tokenizer.TokenConsumer; import com.intellij.spellchecker.tokenizer.Tokenizer; import org.jetbrains.annotations.NotNull; -import org.jetbrains.plugins.groovy.codeInspection.GroovySuppressableInspectionTool; import org.jetbrains.plugins.groovy.lang.lexer.TokenSets; import org.jetbrains.plugins.groovy.lang.psi.GrNamedElement; import org.jetbrains.plugins.groovy.lang.psi.util.GrStringUtil; @@ -32,7 +30,7 @@ import org.jetbrains.plugins.groovy.lang.psi.util.GrStringUtil; /** * @author peter */ -public class GroovySpellcheckingStrategy extends SuppressibleSpellcheckingStrategy { +public class GroovySpellcheckingStrategy extends SpellcheckingStrategy { private final GrDocCommentTokenizer myDocCommentTokenizer = new GrDocCommentTokenizer(); private final Tokenizer<PsiElement> myStringTokenizer = new Tokenizer<PsiElement>() { @Override @@ -66,14 +64,4 @@ public class GroovySpellcheckingStrategy extends SuppressibleSpellcheckingStrate //if (element instanceof GrLiteralImpl && ((GrLiteralImpl)element).isStringLiteral()) return myStringTokenizer; return super.getTokenizer(element); } - - @Override - public boolean isSuppressedFor(@NotNull PsiElement element, @NotNull String name) { - return GroovySuppressableInspectionTool.getElementToolSuppressedIn(element, name) != null; - } - - @Override - public SuppressQuickFix[] getSuppressActions(@NotNull PsiElement element, @NotNull String name) { - return GroovySuppressableInspectionTool.getSuppressActions(name); - } } diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/config/ConfigureGroovyLibraryNotificationProvider.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/config/ConfigureGroovyLibraryNotificationProvider.java index 911451e55e2d..1b2f82fe186b 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/config/ConfigureGroovyLibraryNotificationProvider.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/config/ConfigureGroovyLibraryNotificationProvider.java @@ -21,6 +21,7 @@ import com.intellij.openapi.fileEditor.FileEditor; import com.intellij.openapi.fileTypes.FileType; import com.intellij.openapi.module.Module; import com.intellij.openapi.module.ModuleUtil; +import com.intellij.openapi.module.ModuleUtilCore; import com.intellij.openapi.progress.ProcessCanceledException; import com.intellij.openapi.project.IndexNotReadyException; import com.intellij.openapi.project.Project; @@ -67,13 +68,14 @@ public class ConfigureGroovyLibraryNotificationProvider extends EditorNotificati } } + @NotNull @Override public Key<EditorNotificationPanel> getKey() { return KEY; } @Override - public EditorNotificationPanel createNotificationPanel(VirtualFile file, FileEditor fileEditor) { + public EditorNotificationPanel createNotificationPanel(@NotNull VirtualFile file, @NotNull FileEditor fileEditor) { try { if (!supportedFileTypes.contains(file.getFileType())) return null; // do not show the panel for Gradle build scripts @@ -81,7 +83,7 @@ public class ConfigureGroovyLibraryNotificationProvider extends EditorNotificati if (StringUtil.endsWith(file.getName(), ".gradle")) return null; if (CompilerManager.getInstance(myProject).isExcludedFromCompilation(file)) return null; - final Module module = ModuleUtil.findModuleForFile(file, myProject); + final Module module = ModuleUtilCore.findModuleForFile(file, myProject); if (module == null) return null; if (isMavenModule(module)) return null; diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/console/GroovyShellCompletionContributor.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/console/GroovyShellCompletionContributor.java index 709c5e396483..b1a3a00418fd 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/console/GroovyShellCompletionContributor.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/console/GroovyShellCompletionContributor.java @@ -34,7 +34,7 @@ import org.jetbrains.plugins.groovy.lang.psi.util.PsiUtil; */ public class GroovyShellCompletionContributor extends CompletionContributor { @Override - public void fillCompletionVariants(CompletionParameters parameters, CompletionResultSet result) { + public void fillCompletionVariants(@NotNull CompletionParameters parameters, @NotNull CompletionResultSet result) { PsiFile file = parameters.getOriginalFile(); if (!(file instanceof GroovyShellCodeFragment)) return; diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/debugger/GroovyPositionManager.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/debugger/GroovyPositionManager.java index 48e98a45206b..73e3b27afcf9 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/debugger/GroovyPositionManager.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/debugger/GroovyPositionManager.java @@ -27,6 +27,7 @@ import com.intellij.debugger.requests.ClassPrepareRequestor; import com.intellij.openapi.application.AccessToken; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.diagnostic.Logger; +import com.intellij.openapi.module.Module; import com.intellij.openapi.module.impl.scopes.ModuleWithDependenciesScope; import com.intellij.openapi.progress.ProcessCanceledException; import com.intellij.openapi.project.IndexNotReadyException; @@ -109,9 +110,16 @@ public class GroovyPositionManager implements PositionManager { } } + private static void checkGroovyFile(@NotNull SourcePosition position) throws NoDataException { + if (!(position.getFile() instanceof GroovyFileBase)) { + throw new NoDataException(); + } + } + @Override public ClassPrepareRequest createPrepareRequest(@NotNull final ClassPrepareRequestor requestor, @NotNull final SourcePosition position) throws NoDataException { + checkGroovyFile(position); String qName = getOuterClassName(position); if (qName != null) { return myDebugProcess.getRequestsManager().createClassPrepareRequest(requestor, qName); @@ -260,7 +268,10 @@ public class GroovyPositionManager implements PositionManager { private static GlobalSearchScope addModuleContent(GlobalSearchScope scope) { if (scope instanceof ModuleWithDependenciesScope) { - return scope.uniteWith(((ModuleWithDependenciesScope)scope).getModule().getModuleContentWithDependenciesScope()); + Module module = ((ModuleWithDependenciesScope)scope).getModule(); + if (!module.isDisposed()) { + return scope.uniteWith(module.getModuleContentWithDependenciesScope()); + } } return scope; } @@ -277,6 +288,7 @@ public class GroovyPositionManager implements PositionManager { @Override @NotNull public List<ReferenceType> getAllClasses(@NotNull final SourcePosition position) throws NoDataException { + checkGroovyFile(position); List<ReferenceType> result = ApplicationManager.getApplication().runReadAction(new Computable<List<ReferenceType>>() { @Override public List<ReferenceType> compute() { diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/dgm/DGMReferenceContributor.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/dgm/DGMReferenceContributor.java index 2dd7f99dd95c..d5f6e0f3c5c2 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/dgm/DGMReferenceContributor.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/dgm/DGMReferenceContributor.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2012 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. @@ -35,7 +35,7 @@ public class DGMReferenceContributor extends PsiReferenceContributor { private final JavaClassReferenceProvider myProvider = new JavaClassReferenceProvider(); @Override - public void registerReferenceProviders(PsiReferenceRegistrar registrar) { + public void registerReferenceProviders(@NotNull PsiReferenceRegistrar registrar) { registrar.registerReferenceProvider(PlatformPatterns.psiElement(PropertiesTokenTypes.VALUE_CHARACTERS), new PsiReferenceProvider() { @NotNull @Override diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/gant/GantScriptType.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/gant/GantScriptType.java index adda0faf476f..56d51c6d7e7d 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/gant/GantScriptType.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/gant/GantScriptType.java @@ -20,12 +20,12 @@ import com.intellij.compiler.options.CompileStepBeforeRunNoErrorCheck; import com.intellij.execution.Location; import com.intellij.execution.RunManagerEx; import com.intellij.openapi.module.Module; -import com.intellij.openapi.module.ModuleUtil; +import com.intellij.openapi.module.ModuleUtilCore; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; import com.intellij.psi.search.GlobalSearchScope; -import com.intellij.psi.search.NonClasspathDirectoryScope; +import com.intellij.psi.search.NonClasspathDirectoriesScope; import icons.JetgroovyIcons; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; @@ -84,7 +84,7 @@ public class GantScriptType extends GroovyRunnableScriptType { final GrNamedArgument[] args = ((GrMethodCallExpression)parent).getNamedArguments(); if (args.length == 1) { final GrArgumentLabel label = args[0].getLabel(); - if (label != null && GantUtils.isPlainIdentifier(label)) { + if (label != null) { return label.getName(); } } @@ -104,7 +104,7 @@ public class GantScriptType extends GroovyRunnableScriptType { } public static List<VirtualFile> additionalScopeFiles(@NotNull GroovyFile file) { - final Module module = ModuleUtil.findModuleForPsiElement(file); + final Module module = ModuleUtilCore.findModuleForPsiElement(file); if (module != null) { final String sdkHome = GantUtils.getSdkHomeFromClasspath(module); if (sdkHome != null) { @@ -123,10 +123,6 @@ public class GantScriptType extends GroovyRunnableScriptType { @Override public GlobalSearchScope patchResolveScope(@NotNull GroovyFile file, @NotNull GlobalSearchScope baseScope) { - GlobalSearchScope result = baseScope; - for (final VirtualFile root : additionalScopeFiles(file)) { - result = result.uniteWith(new NonClasspathDirectoryScope(root)); - } - return result; + return baseScope.uniteWith(new NonClasspathDirectoriesScope(additionalScopeFiles(file))); } } diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/grape/GrabDependencies.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/grape/GrabDependencies.java index 5c1c824fb580..11a0c2b9ccd6 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/grape/GrabDependencies.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/grape/GrabDependencies.java @@ -82,6 +82,7 @@ public class GrabDependencies implements IntentionAction { private static final Logger LOG = Logger.getInstance("#org.jetbrains.plugins.groovy.grape.GrabDependencies"); private static final NotificationGroup NOTIFICATION_GROUP = new NotificationGroup("Grape", NotificationDisplayType.BALLOON, true); + public static final String GRAPE_RUNNER = "org.jetbrains.plugins.groovy.grape.GrapeRunner"; @Override @NotNull @@ -195,7 +196,7 @@ public class GrabDependencies implements IntentionAction { //javaParameters.getVMParametersList().add("-Xdebug"); javaParameters.getVMParametersList().add("-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5239"); try { - DefaultGroovyScriptRunner.configureGenericGroovyRunner(javaParameters, module, "org.jetbrains.plugins.groovy.grape.GrapeRunner", false, true); + DefaultGroovyScriptRunner.configureGenericGroovyRunner(javaParameters, module, GRAPE_RUNNER, false, true); } catch (CantRunException e) { NOTIFICATION_GROUP.createNotification("Can't run @Grab: " + ExceptionUtil.getMessage(e), ExceptionUtil.getThrowableText(e), NotificationType.ERROR, null).notify(project); diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/completion/CompleteReferenceExpression.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/completion/CompleteReferenceExpression.java index e23b5976d3fa..91a8c6f1fac3 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/completion/CompleteReferenceExpression.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/completion/CompleteReferenceExpression.java @@ -43,7 +43,6 @@ import org.jetbrains.plugins.groovy.lang.psi.api.auxiliary.modifiers.annotation. import org.jetbrains.plugins.groovy.lang.psi.api.auxiliary.modifiers.annotation.GrAnnotationNameValuePair; import org.jetbrains.plugins.groovy.lang.psi.api.statements.GrField; import org.jetbrains.plugins.groovy.lang.psi.api.statements.GrVariable; -import org.jetbrains.plugins.groovy.lang.psi.api.statements.blocks.GrClosableBlock; import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrAssignmentExpression; import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrExpression; import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrReferenceExpression; @@ -55,7 +54,6 @@ import org.jetbrains.plugins.groovy.lang.psi.impl.GroovyPsiManager; import org.jetbrains.plugins.groovy.lang.psi.impl.GroovyResolveResultImpl; import org.jetbrains.plugins.groovy.lang.psi.impl.PsiImplUtil; import org.jetbrains.plugins.groovy.lang.psi.impl.statements.expressions.GrReferenceExpressionImpl; -import org.jetbrains.plugins.groovy.lang.psi.impl.statements.expressions.GrReferenceResolveUtil; import org.jetbrains.plugins.groovy.lang.psi.impl.statements.expressions.TypesUtil; import org.jetbrains.plugins.groovy.lang.psi.impl.synthetic.GrBindingVariable; import org.jetbrains.plugins.groovy.lang.psi.typeEnhancers.ClosureParameterEnhancer; @@ -63,7 +61,6 @@ import org.jetbrains.plugins.groovy.lang.psi.util.GroovyPropertyUtils; import org.jetbrains.plugins.groovy.lang.psi.util.PsiUtil; import org.jetbrains.plugins.groovy.lang.resolve.ClosureMissingMethodContributor; import org.jetbrains.plugins.groovy.lang.resolve.ResolveUtil; -import org.jetbrains.plugins.groovy.lang.resolve.processors.ClassHint; import org.jetbrains.plugins.groovy.lang.resolve.processors.ResolverProcessor; import org.jetbrains.plugins.groovy.lang.resolve.processors.SubstitutorComputer; @@ -157,14 +154,7 @@ public class CompleteReferenceExpression { if (qualifier == null) { ResolveUtil.treeWalkUp(myRefExpr, myProcessor, true); - for (PsiElement e = myRefExpr.getParent(); e != null; e = e.getParent()) { - if (e instanceof GrClosableBlock) { - ResolveState state = ResolveState.initial().put(ClassHint.RESOLVE_CONTEXT, e); - for (ClosureMissingMethodContributor contributor : ClosureMissingMethodContributor.EP_NAME.getExtensions()) { - contributor.processMembers((GrClosableBlock)e, myProcessor, myRefExpr, state); - } - } - } + ClosureMissingMethodContributor.processMethodsFromClosures(myRefExpr, myProcessor); GrExpression runtimeQualifier = PsiImplUtil.getRuntimeQualifier(myRefExpr); if (runtimeQualifier != null) { @@ -394,7 +384,7 @@ public class CompleteReferenceExpression { } private boolean isMap() { - final PsiType qType = GrReferenceResolveUtil.getQualifierType(myRefExpr); + final PsiType qType = PsiImplUtil.getQualifierType(myRefExpr); return InheritanceUtil.isInheritor(qType, CommonClassNames.JAVA_UTIL_MAP); } @@ -436,7 +426,7 @@ public class CompleteReferenceExpression { myFieldPointerOperator = myRefExpr.hasAt(); myMethodPointerOperator = myRefExpr.getDotTokenType() == GroovyTokenTypes.mMEMBER_POINTER; myIsMap = isMap(); - final PsiType thisType = GrReferenceResolveUtil.getQualifierType(myRefExpr); + final PsiType thisType = PsiImplUtil.getQualifierType(myRefExpr); mySubstitutorComputer = new SubstitutorComputer(thisType, PsiType.EMPTY_ARRAY, PsiType.EMPTY_ARRAY, myRefExpr, myRefExpr.getParent()); } diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/completion/GdslClosureCompleter.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/completion/GdslClosureCompleter.java index 47ebb661c960..3227ff76e01e 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/completion/GdslClosureCompleter.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/completion/GdslClosureCompleter.java @@ -26,7 +26,7 @@ import org.jetbrains.plugins.groovy.lang.psi.api.statements.blocks.GrClosableBlo import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrExpression; import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrReferenceExpression; import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.GrTypeDefinition; -import org.jetbrains.plugins.groovy.lang.psi.impl.statements.expressions.GrReferenceResolveUtil; +import org.jetbrains.plugins.groovy.lang.psi.impl.PsiImplUtil; import org.jetbrains.plugins.groovy.lang.psi.impl.statements.expressions.TypesUtil; import org.jetbrains.plugins.groovy.lang.psi.util.GroovyCommonClassNames; @@ -44,7 +44,7 @@ public class GdslClosureCompleter extends ClosureCompleter { PsiElement place) { final ArrayList<ClosureDescriptor> descriptors = new ArrayList<ClosureDescriptor>(); GrReferenceExpression ref = (GrReferenceExpression)place; - PsiType qtype = GrReferenceResolveUtil.getQualifierType(ref); + PsiType qtype = PsiImplUtil.getQualifierType(ref); if (qtype == null) return null; GrExpression qualifier = ref.getQualifier(); diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/completion/GrMethodMergingContributor.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/completion/GrMethodMergingContributor.java index 9fced9dac8bd..e84361b0f57d 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/completion/GrMethodMergingContributor.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/completion/GrMethodMergingContributor.java @@ -22,6 +22,7 @@ import com.intellij.psi.PsiMethod; import com.intellij.psi.PsiParameter; import com.intellij.psi.PsiType; import com.intellij.psi.ResolveResult; +import org.jetbrains.annotations.NotNull; import org.jetbrains.plugins.groovy.lang.psi.impl.statements.expressions.TypesUtil; import org.jetbrains.plugins.groovy.lang.psi.util.GroovyCommonClassNames; @@ -32,7 +33,7 @@ import java.util.ArrayList; */ public class GrMethodMergingContributor extends CompletionContributor { @Override - public AutoCompletionDecision handleAutoCompletionPossibility(AutoCompletionContext context) { + public AutoCompletionDecision handleAutoCompletionPossibility(@NotNull AutoCompletionContext context) { final CompletionParameters parameters = context.getParameters(); if (parameters.getCompletionType() != CompletionType.SMART && parameters.getCompletionType() != CompletionType.BASIC) { diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/completion/GroovyCompletionContributor.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/completion/GroovyCompletionContributor.java index e02f73314eb5..4c0c342030fb 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/completion/GroovyCompletionContributor.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/completion/GroovyCompletionContributor.java @@ -73,7 +73,7 @@ public class GroovyCompletionContributor extends CompletionContributor { } @Override - public void fillCompletionVariants(CompletionParameters parameters, CompletionResultSet result) { + public void fillCompletionVariants(@NotNull CompletionParameters parameters, @NotNull CompletionResultSet result) { if (!AFTER_NUMBER_LITERAL.accepts(parameters.getPosition())) { super.fillCompletionVariants(parameters, result); } diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/completion/GroovyNoVariantsDelegator.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/completion/GroovyNoVariantsDelegator.java index 6985f16cbc31..745f353ccf5b 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/completion/GroovyNoVariantsDelegator.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/completion/GroovyNoVariantsDelegator.java @@ -48,7 +48,7 @@ public class GroovyNoVariantsDelegator extends CompletionContributor { } @Override - public void fillCompletionVariants(final CompletionParameters parameters, CompletionResultSet result) { + public void fillCompletionVariants(@NotNull final CompletionParameters parameters, @NotNull CompletionResultSet result) { LinkedHashSet<CompletionResult> plainResults = result.runRemainingContributors(parameters, true); final boolean empty = JavaNoVariantsDelegator.containsOnlyPackages(plainResults) || suggestMetaAnnotations(parameters); diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/completion/GroovySmartCompletionContributor.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/completion/GroovySmartCompletionContributor.java index 68d418c1f381..4b5459ff432e 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/completion/GroovySmartCompletionContributor.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/completion/GroovySmartCompletionContributor.java @@ -377,7 +377,7 @@ public class GroovySmartCompletionContributor extends CompletionContributor { } @Override - public void fillCompletionVariants(CompletionParameters parameters, CompletionResultSet result) { + public void fillCompletionVariants(@NotNull CompletionParameters parameters, @NotNull CompletionResultSet result) { super.fillCompletionVariants(parameters, result); } diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/mvc/MvcCliCommandExecutor.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/mvc/MvcCliCommandExecutor.java new file mode 100644 index 000000000000..120c5abf189b --- /dev/null +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/mvc/MvcCliCommandExecutor.java @@ -0,0 +1,46 @@ +/* + * 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 org.jetbrains.plugins.groovy.mvc; + +import com.intellij.execution.configurations.GeneralCommandLine; +import com.intellij.openapi.module.Module; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +/** + * @author Vladislav.Soroka + * @since 6/19/2014 + */ +public class MvcCliCommandExecutor extends MvcCommandExecutor { + @Override + protected boolean isApplicable(Module module) { + return true; + } + + @Nullable + @Override + protected ConsoleProcessDescriptor doRun(@NotNull Module module, + @NotNull MvcFramework framework, + @NotNull MvcCommand mvcCommand, + @Nullable Runnable onDone, + boolean showConsole, + boolean closeOnDone, + String... input) { + final GeneralCommandLine commandLine = framework.createCommandAndShowErrors(null, module, mvcCommand); + if (commandLine == null) return null; + return MvcConsole.executeProcess(module, commandLine, onDone, closeOnDone, input); + } +} diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/mvc/MvcCommandExecutor.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/mvc/MvcCommandExecutor.java new file mode 100644 index 000000000000..c4c791ba0042 --- /dev/null +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/mvc/MvcCommandExecutor.java @@ -0,0 +1,69 @@ +/* + * 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 org.jetbrains.plugins.groovy.mvc; + +import com.intellij.openapi.extensions.ExtensionPointName; +import com.intellij.openapi.module.Module; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +/** + * @author Vladislav.Soroka + * @since 6/19/2014 + */ +public abstract class MvcCommandExecutor { + private static final ExtensionPointName<MvcCommandExecutor> EP_NAME = + ExtensionPointName.create("org.intellij.groovy.mvc.command.executor"); + + @Nullable + public static ConsoleProcessDescriptor run(@NotNull Module module, + @NotNull MvcFramework framework, + @NotNull MvcCommand mvcCommand, + @Nullable Runnable onDone, + boolean closeOnDone, + String... input) { + return run(module, framework, mvcCommand, onDone, true, closeOnDone, input); + } + + @Nullable + public static ConsoleProcessDescriptor run(@NotNull Module module, + @NotNull MvcFramework framework, + @NotNull MvcCommand mvcCommand, + @Nullable Runnable onDone, + boolean showConsole, + boolean closeOnDone, + String... input) { + for (MvcCommandExecutor executor : EP_NAME.getExtensions()) { + if (executor.isApplicable(module)) { + return executor.doRun(module, framework, mvcCommand, onDone, showConsole, closeOnDone, input); + } + } + + // fallback to default CLI implementation + return new MvcCliCommandExecutor().doRun(module, framework, mvcCommand, onDone, showConsole, closeOnDone, input); + } + + protected abstract boolean isApplicable(Module module); + + @Nullable + protected abstract ConsoleProcessDescriptor doRun(@NotNull Module module, + @NotNull MvcFramework framework, + @NotNull MvcCommand mvcCommand, + @Nullable Runnable onDone, + boolean showConsole, + boolean closeOnDone, + String... input); +} diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/mvc/MvcRunConfigurationEditor.form b/plugins/groovy/src/org/jetbrains/plugins/groovy/mvc/MvcRunConfigurationEditor.form index 688fe451db4c..a86aade6a66f 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/mvc/MvcRunConfigurationEditor.form +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/mvc/MvcRunConfigurationEditor.form @@ -39,7 +39,7 @@ </constraints> <properties/> </component> - <component id="d1e7d" class="javax.swing.JComboBox" binding="myModulesBox"> + <component id="d1e7d" class="com.intellij.application.options.ModulesComboBox" binding="myModulesBox"> <constraints> <grid row="0" column="1" row-span="1" col-span="1" vsize-policy="0" hsize-policy="2" anchor="8" fill="1" indent="0" use-parent-layout="false"/> </constraints> diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/mvc/MvcRunConfigurationEditor.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/mvc/MvcRunConfigurationEditor.java index 68f6d50ae80d..d81ce98ffec6 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/mvc/MvcRunConfigurationEditor.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/mvc/MvcRunConfigurationEditor.java @@ -20,13 +20,13 @@ import com.intellij.execution.configuration.EnvironmentVariablesComponent; import com.intellij.openapi.module.Module; import com.intellij.openapi.options.ConfigurationException; import com.intellij.openapi.options.SettingsEditor; +import com.intellij.application.options.ModulesComboBox; import com.intellij.openapi.util.text.StringUtil; import com.intellij.ui.DocumentAdapter; import com.intellij.ui.PanelWithAnchor; import com.intellij.ui.RawCommandLineEditor; import com.intellij.ui.components.JBLabel; import org.jetbrains.annotations.NotNull; -import org.jetbrains.plugins.groovy.mvc.util.ModuleCellRenderer; import javax.swing.*; import javax.swing.event.DocumentEvent; @@ -35,8 +35,7 @@ import java.io.File; import java.util.HashMap; public class MvcRunConfigurationEditor<T extends MvcRunConfiguration> extends SettingsEditor<T> implements PanelWithAnchor { - private DefaultComboBoxModel myModulesModel; - protected JComboBox myModulesBox; + protected ModulesComboBox myModulesBox; private JPanel myMainPanel; private RawCommandLineEditor myVMParameters; private JTextField myCommandLine; @@ -67,11 +66,8 @@ public class MvcRunConfigurationEditor<T extends MvcRunConfiguration> extends Se myCommandLine.setText(configuration.cmdLine); - myModulesModel.removeAllElements(); - for (Module module : configuration.getValidModules()) { - myModulesModel.addElement(module); - } - myModulesModel.setSelectedItem(configuration.getModule()); + myModulesBox.setModules(configuration.getValidModules()); + myModulesBox.setSelectedModule(configuration.getModule()); commandLineChanged(getCommandLine()); @@ -142,7 +138,7 @@ public class MvcRunConfigurationEditor<T extends MvcRunConfiguration> extends Se } protected Module getSelectedModule() { - return (Module)myModulesBox.getSelectedItem(); + return myModulesBox.getSelectedModule(); } public void addExtension(JComponent component) { @@ -152,10 +148,6 @@ public class MvcRunConfigurationEditor<T extends MvcRunConfiguration> extends Se @Override @NotNull protected JComponent createEditor() { - myModulesModel = new DefaultComboBoxModel(); - myModulesBox.setModel(myModulesModel); - myModulesBox.setRenderer(new ModuleCellRenderer(myModulesBox.getRenderer())); - return myMainPanel; } } diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/mvc/MvcRunTarget.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/mvc/MvcRunTarget.java index 6efc6665504e..ad856e862223 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/mvc/MvcRunTarget.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/mvc/MvcRunTarget.java @@ -15,7 +15,6 @@ */ package org.jetbrains.plugins.groovy.mvc; -import com.intellij.execution.configurations.GeneralCommandLine; import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.module.Module; import org.jetbrains.annotations.NotNull; @@ -34,13 +33,8 @@ public class MvcRunTarget extends MvcActionBase { } Module selectedModule = dialog.getSelectedModule(); - MvcCommand cmd = MvcCommand.parse(dialog.getTargetArguments()); - - final GeneralCommandLine commandLine = framework.createCommandAndShowErrors(dialog.getVmOptions(), selectedModule, cmd); - if (commandLine == null) return; - - MvcConsole.executeProcess(selectedModule, commandLine, null, false); + MvcCommandExecutor.run(selectedModule, framework, cmd, null, false); } } diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/mvc/MvcRunTargetDialog.form b/plugins/groovy/src/org/jetbrains/plugins/groovy/mvc/MvcRunTargetDialog.form index 3d086ca296b6..cafff50f6c2a 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/mvc/MvcRunTargetDialog.form +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/mvc/MvcRunTargetDialog.form @@ -69,7 +69,7 @@ <text value="&Module:"/> </properties> </component> - <component id="cf36f" class="javax.swing.JComboBox" binding="myModuleBox"> + <component id="cf36f" class="com.intellij.application.options.ModulesComboBox" binding="myModuleBox"> <constraints> <grid row="0" column="1" row-span="1" col-span="1" vsize-policy="0" hsize-policy="2" anchor="8" fill="0" indent="0" use-parent-layout="false"/> </constraints> diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/mvc/MvcRunTargetDialog.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/mvc/MvcRunTargetDialog.java index 2b629bb668a1..65c6b4be97b4 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/mvc/MvcRunTargetDialog.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/mvc/MvcRunTargetDialog.java @@ -22,14 +22,17 @@ import com.intellij.openapi.editor.event.DocumentEvent; import com.intellij.openapi.fileTypes.PlainTextFileType; import com.intellij.openapi.module.Module; import com.intellij.openapi.module.ModuleManager; +import com.intellij.application.options.ModulesComboBox; import com.intellij.openapi.ui.ComboBox; import com.intellij.openapi.ui.DialogWrapper; import com.intellij.openapi.util.text.StringUtil; -import com.intellij.ui.*; +import com.intellij.ui.EditorComboBoxEditor; +import com.intellij.ui.EditorComboBoxRenderer; +import com.intellij.ui.EditorTextField; +import com.intellij.ui.StringComboboxEditor; import com.intellij.util.TextFieldCompletionProvider; import com.intellij.util.TextFieldCompletionProviderDumbAware; import org.jetbrains.annotations.NotNull; -import org.jetbrains.plugins.groovy.mvc.util.ModuleCellRenderer; import org.jetbrains.plugins.groovy.mvc.util.MvcTargetDialogCompletionUtils; import javax.swing.*; @@ -47,7 +50,7 @@ public class MvcRunTargetDialog extends DialogWrapper { private JLabel myTargetLabel; private JPanel myFakePanel; private EditorTextField myVmOptionsField; - private JComboBox myModuleBox; + private ModulesComboBox myModuleBox; private JLabel myModuleLabel; private JLabel myVmOptionLabel; private ComboBox myTargetField; @@ -114,18 +117,17 @@ public class MvcRunTargetDialog extends DialogWrapper { assert mvcModules.contains(myModule); myModuleLabel.setLabelFor(myModuleBox); - myModuleBox.setModel(new CollectionComboBoxModel(mvcModules, myModule)); + myModuleBox.setModules(mvcModules); + myModuleBox.setSelectedModule(myModule); myModuleBox.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { - myModule = (Module)myModuleBox.getSelectedItem(); + myModule = myModuleBox.getSelectedModule(); if (myInteractiveRunAction != null) { myInteractiveRunAction.setEnabled(myFramework.isInteractiveConsoleSupported(myModule)); } } }); - - myModuleBox.setRenderer(new ModuleCellRenderer(myModuleBox.getRenderer())); } @NotNull diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/mvc/util/ModuleCellRenderer.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/mvc/util/ModuleCellRenderer.java deleted file mode 100644 index 208de7bbcfbc..000000000000 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/mvc/util/ModuleCellRenderer.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * 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.mvc.util; - -import com.intellij.openapi.module.Module; -import com.intellij.openapi.module.ModuleType; -import com.intellij.ui.ListCellRendererWrapper; - -import javax.swing.*; - -/** - * @author Sergey Evdokimov - */ -public class ModuleCellRenderer extends ListCellRendererWrapper<Module> { - public ModuleCellRenderer(ListCellRenderer renderer) { - super(); - } - - @Override - public void customize(JList list, Module module, int index, boolean selected, boolean hasFocus) { - if (module != null) { - setIcon(ModuleType.get(module).getIcon()); - setText(module.getName()); - } - } -} diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/convertToJava/ExpressionGenerator.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/convertToJava/ExpressionGenerator.java index 615a2dac667a..aceef3c34b84 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/convertToJava/ExpressionGenerator.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/convertToJava/ExpressionGenerator.java @@ -69,7 +69,6 @@ import org.jetbrains.plugins.groovy.lang.psi.impl.GrLiteralClassType; import org.jetbrains.plugins.groovy.lang.psi.impl.GrRangeType; import org.jetbrains.plugins.groovy.lang.psi.impl.PsiImplUtil; import org.jetbrains.plugins.groovy.lang.psi.impl.signatures.GrClosureSignatureUtil; -import org.jetbrains.plugins.groovy.lang.psi.impl.statements.expressions.GrReferenceResolveUtil; import org.jetbrains.plugins.groovy.lang.psi.impl.statements.expressions.TypesUtil; import org.jetbrains.plugins.groovy.lang.psi.impl.synthetic.ClosureSyntheticParameter; import org.jetbrains.plugins.groovy.lang.psi.impl.synthetic.GrBindingVariable; @@ -447,7 +446,7 @@ public class ExpressionGenerator extends Generator { else if (resolved == null || resolved instanceof GrBindingVariable) { //write unresolved reference assignment via setter GroovyObject.setProperty(String name, Object value) final GrExpression qualifier = ((GrReferenceExpression)realLValue).getQualifier(); - final PsiType type = GrReferenceResolveUtil.getQualifierType((GrReferenceExpression)realLValue); + final PsiType type = PsiImplUtil.getQualifierType((GrReferenceExpression)realLValue); final GrExpression[] args = { factory.createExpressionFromText("\"" + ((GrReferenceExpression)realLValue).getReferenceName() + "\""), @@ -952,7 +951,7 @@ public class ExpressionGenerator extends Generator { return; } - if (GrReferenceResolveUtil.isClassReference(referenceExpression)) { + if (ResolveUtil.isClassReference(referenceExpression)) { LOG.assertTrue(qualifier != null); qualifier.accept(this); builder.append(".class"); @@ -1052,7 +1051,7 @@ public class ExpressionGenerator extends Generator { } else { PsiType stringType = PsiType.getJavaLangString(referenceExpression.getManager(), referenceExpression.getResolveScope()); - PsiType qualifierType = GrReferenceResolveUtil.getQualifierType(referenceExpression); + PsiType qualifierType = PsiImplUtil.getQualifierType(referenceExpression); GroovyResolveResult[] candidates = qualifierType != null ? ResolveUtil.getMethodCandidates(qualifierType, "getProperty", referenceExpression, stringType) diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/rename/RenameAliasImportedFieldProcessor.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/rename/RenameAliasImportedFieldProcessor.java deleted file mode 100644 index 3cd416459bd3..000000000000 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/rename/RenameAliasImportedFieldProcessor.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright 2000-2010 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.refactoring.rename; - -import com.intellij.psi.PsiElement; -import com.intellij.psi.PsiReference; -import com.intellij.refactoring.rename.RenameJavaVariableProcessor; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.plugins.groovy.lang.psi.api.statements.GrField; - -import java.util.Collection; - -/** - * @author Maxim.Medvedev - */ -public class RenameAliasImportedFieldProcessor extends RenameJavaVariableProcessor{ - @Override - public boolean canProcessElement(@NotNull PsiElement element) { - return element instanceof GrField && !((GrField)element).isProperty(); - } - - @NotNull - @Override - public Collection<PsiReference> findReferences(PsiElement element) { - return RenameAliasedUsagesUtil.filterAliasedRefs(super.findReferences(element), element); - } -} diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/rename/RenameGrFieldProcessor.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/rename/RenameGrFieldProcessor.java index 8bccb8073874..9e90ac2326a0 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/rename/RenameGrFieldProcessor.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/rename/RenameGrFieldProcessor.java @@ -15,6 +15,7 @@ */ package org.jetbrains.plugins.groovy.refactoring.rename; +import com.intellij.openapi.diagnostic.Logger; import com.intellij.psi.*; import com.intellij.psi.codeStyle.JavaCodeStyleManager; import com.intellij.psi.search.GlobalSearchScope; @@ -30,8 +31,8 @@ import com.intellij.refactoring.rename.UnresolvableCollisionUsageInfo; import com.intellij.refactoring.util.MoveRenameUsageInfo; import com.intellij.usageView.UsageInfo; import com.intellij.util.IncorrectOperationException; +import com.intellij.util.containers.ContainerUtil; import com.intellij.util.containers.MultiMap; -import com.intellij.util.containers.hash.HashMap; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.plugins.groovy.lang.psi.GroovyPsiElementFactory; @@ -40,6 +41,8 @@ import org.jetbrains.plugins.groovy.lang.psi.api.statements.GrField; import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrCall; import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrReferenceExpression; import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.members.GrAccessorMethod; +import org.jetbrains.plugins.groovy.lang.psi.impl.synthetic.GrTraitField; +import org.jetbrains.plugins.groovy.lang.psi.util.GrTraitUtil; import org.jetbrains.plugins.groovy.lang.psi.util.GroovyPropertyUtils; import org.jetbrains.plugins.groovy.lang.psi.util.PsiUtil; import org.jetbrains.plugins.groovy.lang.resolve.ResolveUtil; @@ -56,6 +59,8 @@ import java.util.Map; */ public class RenameGrFieldProcessor extends RenameJavaVariableProcessor { + private static final Logger LOG = Logger.getInstance(RenameGrFieldProcessor.class); + @NotNull @Override public Collection<PsiReference> findReferences(PsiElement element) { @@ -84,16 +89,8 @@ public class RenameGrFieldProcessor extends RenameJavaVariableProcessor { @Nullable RefactoringElementListener listener) throws IncorrectOperationException { final GrField field = (GrField)psiElement; String fieldName = field.getName(); - Map<PsiElement, String> renames = new HashMap<PsiElement, String>(); - renames.put(field, newName); - for (GrAccessorMethod getter : field.getGetters()) { - renames.put(getter, RenamePropertyUtil.getGetterNameByOldName(newName, getter.getName())); - } - final GrAccessorMethod setter = field.getSetter(); - if (setter != null) { - renames.put(setter, GroovyPropertyUtils.getSetterName(newName)); - } + NameProvider nameProvider = new NameProvider(field, newName); MultiMap<PsiNamedElement, UsageInfo> propertyUsages = MultiMap.createLinked(); MultiMap<PsiNamedElement, UsageInfo> simpleUsages = MultiMap.createLinked(); @@ -106,12 +103,7 @@ public class RenameGrFieldProcessor extends RenameJavaVariableProcessor { final GroovyResolveResult resolveResult = ((GrReferenceExpression)ref).advancedResolve(); final PsiElement element = resolveResult.getElement(); if (resolveResult.isInvokedOnProperty()) { - if (element == null) { - unknownUsages.add(ref); - } - else { - propertyUsages.putValue((PsiNamedElement)element, usage); - } + propertyUsages.putValue((PsiNamedElement)element, usage); } else { simpleUsages.putValue((PsiNamedElement)element, usage); @@ -128,22 +120,13 @@ public class RenameGrFieldProcessor extends RenameJavaVariableProcessor { field.setName(newName); - final GrAccessorMethod[] newGetters = field.getGetters(); - final GrAccessorMethod newSetter = field.getSetter(); - Map<String, PsiNamedElement> newElements = new HashMap<String, PsiNamedElement>(); - newElements.put(newName, field); - for (GrAccessorMethod newGetter : newGetters) { - newElements.put(newGetter.getName(), newGetter); - } - if (newSetter != null) { - newElements.put(newSetter.getName(), newSetter); - } + nameProvider.putNewElements(field); PsiManager manager = field.getManager(); for (PsiNamedElement element : simpleUsages.keySet()) { for (UsageInfo info : simpleUsages.get(element)) { - final String name = renames.get(element); - rename(newElements.get(name), info, name == null ? newName : name, name != null, manager); + final String name = nameProvider.getNewName(element); + rename(nameProvider.getNewElement(element), info, name == null ? newName : name, name != null, manager); } } for (PsiNamedElement element : propertyUsages.keySet()) { @@ -156,6 +139,72 @@ public class RenameGrFieldProcessor extends RenameJavaVariableProcessor { } } + private static class NameProvider { + + private final Map<PsiElement, String> myNameMap = ContainerUtil.newHashMap(); + private final Map<String, PsiNamedElement> myNewElements = ContainerUtil.newHashMap(); + + + public NameProvider(GrField field, String newName) { + myNameMap.put(field, newName); + + if (field.isProperty()) { + for (GrAccessorMethod getter : field.getGetters()) { + myNameMap.put(getter, RenamePropertyUtil.getGetterNameByOldName(newName, getter.getName())); + } + final GrAccessorMethod setter = field.getSetter(); + if (setter != null) { + myNameMap.put(setter, GroovyPropertyUtils.getSetterName(newName)); + } + } + } + + String getNewName(@NotNull PsiElement element) { + String name = myNameMap.get(element); + if (name != null) { + return name; + } + + if (element instanceof GrTraitField) { + PsiField prototype = ((GrTraitField)element).getPrototype(); + String newPrototypeName = getNewName(prototype); + return GrTraitUtil.getTraitFieldPrefix(prototype.getContainingClass()) + newPrototypeName; + } + + return null; + } + + public void putNewElements(@NotNull GrField field) { + myNewElements.put(field.getName(), field); + + if (field.isProperty()) { + for (GrAccessorMethod newGetter : field.getGetters()) { + myNewElements.put(newGetter.getName(), newGetter); + } + + final GrAccessorMethod newSetter = field.getSetter(); + if (newSetter != null) { + myNewElements.put(newSetter.getName(), newSetter); + } + } + } + + public PsiNamedElement getNewElement(PsiNamedElement element) { + String newName = getNewName(element); + PsiNamedElement newElement = myNewElements.get(newName); + if (newElement != null) { + return newElement; + } + + if (element instanceof GrTraitField) { + PsiField prototype = ((GrTraitField)element).getPrototype(); + return getNewElement(prototype); + } + + return null; + } + } + private static void rename(PsiNamedElement element, UsageInfo info, String nameToUse, @@ -241,7 +290,7 @@ public class RenameGrFieldProcessor extends RenameJavaVariableProcessor { @Override public boolean canProcessElement(@NotNull final PsiElement element) { - return element instanceof GrField && ((GrField)element).isProperty() || element instanceof GrAccessorMethod; + return element instanceof GrField /*&& ((GrField)element).isProperty()*/ || element instanceof GrAccessorMethod; } @Override diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/runner/DefaultGroovyScriptRunner.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/runner/DefaultGroovyScriptRunner.java index 7676de9fdc3d..90e4131f1ef9 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/runner/DefaultGroovyScriptRunner.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/runner/DefaultGroovyScriptRunner.java @@ -37,6 +37,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jps.incremental.groovy.GroovycOSProcessHandler; import org.jetbrains.plugins.groovy.config.GroovyFacetUtil; +import org.jetbrains.plugins.groovy.grape.GrabDependencies; import org.jetbrains.plugins.groovy.util.LibrariesUtil; import java.nio.charset.Charset; @@ -118,7 +119,9 @@ public class DefaultGroovyScriptRunner extends GroovyScriptRunner { params.getProgramParametersList().add("--main"); params.getProgramParametersList().add(mainClass); - addClasspathFromRootModel(module, tests, params, true); + if (!GrabDependencies.GRAPE_RUNNER.equals(mainClass)) { + addClasspathFromRootModel(module, tests, params, true); + } if (params.getVMParametersList().getPropertyValue(GroovycOSProcessHandler.GRAPE_ROOT) == null) { String sysRoot = System.getProperty(GroovycOSProcessHandler.GRAPE_ROOT); diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/runner/GroovyRunConfigurationEditor.form b/plugins/groovy/src/org/jetbrains/plugins/groovy/runner/GroovyRunConfigurationEditor.form index 31e26e527258..a5ffd20bd1d2 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/runner/GroovyRunConfigurationEditor.form +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/runner/GroovyRunConfigurationEditor.form @@ -74,7 +74,7 @@ <text value="Module:"/> </properties> </component> - <component id="d1e7d" class="javax.swing.JComboBox" binding="myModulesBox"> + <component id="d1e7d" class="com.intellij.application.options.ModulesComboBox" binding="myModulesBox"> <constraints> <grid row="1" column="1" row-span="1" col-span="1" vsize-policy="0" hsize-policy="2" anchor="8" fill="1" indent="0" use-parent-layout="false"/> </constraints> diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/runner/GroovyRunConfigurationEditor.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/runner/GroovyRunConfigurationEditor.java index 46a0d0389f49..e41164f7442d 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/runner/GroovyRunConfigurationEditor.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/runner/GroovyRunConfigurationEditor.java @@ -19,26 +19,22 @@ package org.jetbrains.plugins.groovy.runner; import com.intellij.execution.configuration.EnvironmentVariablesComponent; import com.intellij.ide.util.BrowseFilesListener; import com.intellij.openapi.fileChooser.FileChooserDescriptor; -import com.intellij.openapi.module.Module; -import com.intellij.openapi.module.ModuleType; import com.intellij.openapi.options.ConfigurationException; import com.intellij.openapi.options.SettingsEditor; -import com.intellij.openapi.roots.ui.configuration.ModulesAlphaComparator; +import com.intellij.application.options.ModulesComboBox; import com.intellij.openapi.vfs.VirtualFile; -import com.intellij.ui.*; +import com.intellij.ui.FieldPanel; +import com.intellij.ui.PanelWithAnchor; +import com.intellij.ui.RawCommandLineEditor; import com.intellij.ui.components.JBLabel; import org.jetbrains.annotations.NotNull; import org.jetbrains.plugins.groovy.GroovyFileType; import javax.swing.*; import java.awt.*; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; public class GroovyRunConfigurationEditor extends SettingsEditor<GroovyScriptRunConfiguration> implements PanelWithAnchor { - private DefaultComboBoxModel myModulesModel; - private JComboBox myModulesBox; + private ModulesComboBox myModulesBox; private JPanel myMainPanel; private RawCommandLineEditor myVMParameters; private RawCommandLineEditor myParameters; @@ -93,20 +89,15 @@ public class GroovyRunConfigurationEditor extends SettingsEditor<GroovyScriptRun myDebugCB.setEnabled(true); myDebugCB.setSelected(configuration.isDebugEnabled()); - myModulesModel.removeAllElements(); - List<Module> modules = new ArrayList<Module>(configuration.getValidModules()); - Collections.sort(modules, ModulesAlphaComparator.INSTANCE); - for (Module module : modules) { - myModulesModel.addElement(module); - } - myModulesModel.setSelectedItem(configuration.getModule()); + myModulesBox.setModules(configuration.getValidModules()); + myModulesBox.setSelectedModule(configuration.getModule()); myEnvVariables.setEnvs(configuration.getEnvs()); } @Override public void applyEditorTo(GroovyScriptRunConfiguration configuration) throws ConfigurationException { - configuration.setModule((Module) myModulesBox.getSelectedItem()); + configuration.setModule(myModulesBox.getSelectedModule()); configuration.setVMParameters(myVMParameters.getText()); configuration.setDebugEnabled(myDebugCB.isSelected()); configuration.setScriptParameters(myParameters.getText()); @@ -118,27 +109,8 @@ public class GroovyRunConfigurationEditor extends SettingsEditor<GroovyScriptRun @Override @NotNull public JComponent createEditor() { - myModulesModel = new DefaultComboBoxModel(); - myModulesBox.setModel(myModulesModel); myDebugCB.setEnabled(true); myDebugCB.setSelected(false); - - myModulesBox.setRenderer(new ListCellRendererWrapper<Module>() { - @Override - public void customize(JList list, Module module, int index, boolean selected, boolean hasFocus) { - if (module != null) { - setIcon(ModuleType.get(module).getIcon()); - setText(module.getName()); - } - } - }); - new ComboboxSpeedSearch(myModulesBox) { - @Override - protected String getElementText(Object element) { - return element instanceof Module ? ((Module)element).getName() : ""; - } - }; - return myMainPanel; } diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/runner/GroovyScriptRunner.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/runner/GroovyScriptRunner.java index f4457d9bc8c2..743895151093 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/runner/GroovyScriptRunner.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/runner/GroovyScriptRunner.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2013 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. @@ -32,6 +32,7 @@ import com.intellij.util.PathUtil; import com.intellij.util.PathsList; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.plugins.groovy.GroovyLanguage; import org.jetbrains.plugins.groovy.config.GroovyConfigUtils; import java.io.File; @@ -66,7 +67,7 @@ public abstract class GroovyScriptRunner { public static String getPathInConf(String fileName) { try { - final String jarPath = PathUtil.getJarPathForClass(GroovyScriptRunner.class); + final String jarPath = PathUtil.getJarPathForClass(GroovyLanguage.class); if (new File(jarPath).isFile()) { //jar; distribution mode return new File(jarPath, "../" + fileName).getCanonicalPath(); } |