diff --git a/plugins/groovy/src/META-INF/plugin.xml b/plugins/groovy/src/META-INF/plugin.xml index 8355dd55750a..353a39270ce9 100644 --- a/plugins/groovy/src/META-INF/plugin.xml +++ b/plugins/groovy/src/META-INF/plugin.xml @@ -363,6 +363,8 @@ id="groovyBasic2ClassName" order="first, after liveTemplates"/> + + 0 && arguments[0] == parent; + } +} diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/console/GroovyShellConsoleImpl.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/console/GroovyShellConsoleImpl.java index bb50a53e8a16..ccfe315c1e2f 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/console/GroovyShellConsoleImpl.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/console/GroovyShellConsoleImpl.java @@ -58,34 +58,68 @@ public class GroovyShellConsoleImpl extends LanguageConsoleImpl { protected String addToHistoryInner(@NotNull TextRange textRange, @NotNull EditorEx editor, boolean erase, boolean preserveMarkup) { final String result = super.addToHistoryInner(textRange, editor, erase, preserveMarkup); - GroovyShellCodeFragment codeFragment = (GroovyShellCodeFragment)myFile; - GrTopStatement[] definitions = codeFragment.getTopStatements(); + if ("purge variables".equals(result.trim())) { + clearVariables(); + } + else if ("purge classes".equals(result.trim())) { + clearClasses(); + } + else if ("purge imports".equals(result.trim())) { + clearImports(); + } + else if ("purge all".equals(result.trim())) { + clearVariables(); + clearClasses(); + clearImports(); + } + else { + processCode(); + } - for (GrTopStatement statement : definitions) { + return result; + } + + private void processCode() { + for (GrTopStatement statement : getFile().getTopStatements()) { if (statement instanceof GrImportStatement) { - codeFragment.addImportsFromString(importToString((GrImportStatement)statement)); + getFile().addImportsFromString(importToString((GrImportStatement)statement)); } else if (statement instanceof GrMethod) { - codeFragment.addVariable(((GrMethod)statement).getName(), generateClosure((GrMethod)statement)); + getFile().addVariable(((GrMethod)statement).getName(), generateClosure((GrMethod)statement)); } else if (statement instanceof GrAssignmentExpression) { GrAssignmentExpression assignment = (GrAssignmentExpression)statement; GrExpression left = assignment.getLValue(); if (left instanceof GrReferenceExpression && !((GrReferenceExpression)left).isQualified()) { - codeFragment.addVariable(((GrReferenceExpression)left).getReferenceName(), assignment.getRValue()); + getFile().addVariable(((GrReferenceExpression)left).getReferenceName(), assignment.getRValue()); } } else if (statement instanceof GrTypeDefinition) { - codeFragment.addTypeDefinition(prepareTypeDefinition((GrTypeDefinition)statement)); + getFile().addTypeDefinition(prepareTypeDefinition((GrTypeDefinition)statement)); } } - PsiType scriptType = ((GroovyShellCodeFragment)myFile).getInferredScriptReturnType(); + PsiType scriptType = getFile().getInferredScriptReturnType(); if (scriptType != null) { - codeFragment.addVariable("_", scriptType); + getFile().addVariable("_", scriptType); } + } - return result; + @NotNull + public GroovyShellCodeFragment getFile() { + return (GroovyShellCodeFragment)myFile; + } + + private void clearVariables() { + getFile().clearVariables(); + } + + private void clearClasses() { + getFile().clearClasses(); + } + + private void clearImports() { + getFile().clearImports(); } @NotNull diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/debugger/fragments/GroovyCodeFragment.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/debugger/fragments/GroovyCodeFragment.java index 8b2c6b6824e4..45d37ed54e83 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/debugger/fragments/GroovyCodeFragment.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/debugger/fragments/GroovyCodeFragment.java @@ -285,4 +285,9 @@ public class GroovyCodeFragment extends GroovyFileImpl implements JavaCodeFragme return null; } } + + public void clearImports() { + myPseudoImports.clear(); + myOnDemandImports.clear(); + } }