diff --git a/java/debugger/impl/src/com/intellij/debugger/engine/PositionManagerImpl.java b/java/debugger/impl/src/com/intellij/debugger/engine/PositionManagerImpl.java index 59d5cd78a61b..d52466171885 100644 --- a/java/debugger/impl/src/com/intellij/debugger/engine/PositionManagerImpl.java +++ b/java/debugger/impl/src/com/intellij/debugger/engine/PositionManagerImpl.java @@ -99,11 +99,14 @@ public class PositionManagerImpl implements PositionManager { waitRequestor.set(new ClassPrepareRequestor() { public void processClassPrepare(DebugProcess debuggerProcess, ReferenceType referenceType) { final CompoundPositionManager positionManager = ((DebugProcessImpl)debuggerProcess).getPositionManager(); - if (positionManager.locationsOfLine(referenceType, position).size() > 0) { - requestor.processClassPrepare(debuggerProcess, referenceType); + final List positionClasses = positionManager.getAllClasses(position); + if (positionClasses.isEmpty()) { + // fallback + if (positionManager.locationsOfLine(referenceType, position).size() > 0) { + requestor.processClassPrepare(debuggerProcess, referenceType); + } } else { - final List positionClasses = positionManager.getAllClasses(position); if (positionClasses.contains(referenceType)) { requestor.processClassPrepare(debuggerProcess, referenceType); } @@ -267,15 +270,17 @@ public class PositionManagerImpl implements PositionManager { final List nestedTypes = vmProxy.nestedTypes(fromClass); - for (ReferenceType nested : nestedTypes) { - final ReferenceType found = findNested(nested, classToFind, classPosition); - if (found != null) { - return found; - } - } - try { final int lineNumber = classPosition.getLine() + 1; + + for (ReferenceType nested : nestedTypes) { + final ReferenceType found = findNested(nested, classToFind, classPosition); + if (found != null) { + // check if enclosing class also has executable code at the same line, and if yes, prefer enclosing class + return fromClass.locationsOfLine(lineNumber).isEmpty()? found : fromClass; + } + } + if (fromClass.locationsOfLine(lineNumber).size() > 0) { return fromClass; } diff --git a/java/debugger/impl/src/com/intellij/debugger/jdi/VirtualMachineProxyImpl.java b/java/debugger/impl/src/com/intellij/debugger/jdi/VirtualMachineProxyImpl.java index 60215e2b7da4..586e4bfe1325 100644 --- a/java/debugger/impl/src/com/intellij/debugger/jdi/VirtualMachineProxyImpl.java +++ b/java/debugger/impl/src/com/intellij/debugger/jdi/VirtualMachineProxyImpl.java @@ -38,10 +38,7 @@ import org.jetbrains.annotations.NotNull; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; -import java.util.Map; +import java.util.*; public class VirtualMachineProxyImpl implements JdiTimer, VirtualMachineProxy { private static final Logger LOG = Logger.getInstance("#com.intellij.debugger.jdi.VirtualMachineProxyImpl"); @@ -87,12 +84,29 @@ public class VirtualMachineProxyImpl implements JdiTimer, VirtualMachineProxy { List nestedTypes = myNestedClassesCache.get(refType); if (nestedTypes == null) { final List list = refType.nestedTypes(); - nestedTypes = new ArrayList(list.size()); - final ClassLoaderReference outerLoader = refType.classLoader(); - for (ReferenceType type : list) { - if (outerLoader == null? type.classLoader() == null : outerLoader.equals(type.classLoader())) { - nestedTypes.add(type); + final int size = list.size(); + if (size > 0) { + final Set candidates = new HashSet(); + final ClassLoaderReference outerLoader = refType.classLoader(); + for (ReferenceType nested : list) { + if (outerLoader == null? nested.classLoader() == null : outerLoader.equals(nested.classLoader())) { + candidates.add(nested); + } } + + if (!candidates.isEmpty()) { + // keep only direct nested types + final Set nested2 = new HashSet(); + for (final ReferenceType candidate : candidates) { + nested2.addAll(nestedTypes(candidate)); + } + candidates.removeAll(nested2); + } + + nestedTypes = candidates.isEmpty()? Collections.emptyList() : new ArrayList(candidates); + } + else { + nestedTypes = Collections.emptyList(); } myNestedClassesCache.put(refType, nestedTypes); } diff --git a/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/LineBreakpoint.java b/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/LineBreakpoint.java index 9ea0bfe2ba0c..2063ce7313cc 100644 --- a/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/LineBreakpoint.java +++ b/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/LineBreakpoint.java @@ -130,16 +130,27 @@ public class LineBreakpoint extends BreakpointWithHighlighter { try { List locs = debugProcess.getPositionManager().locationsOfLine(classType, getSourcePosition()); if (locs.size() > 0) { - for (final Location location : locs) { - if (LOG.isDebugEnabled()) { - LOG.debug("Found location for reference type " + classType.name() + " at line " + getLineIndex() + "; isObsolete: " + (debugProcess.getVirtualMachineProxy().versionHigher("1.4") && location.method().isObsolete())); + Location minLocation = null; + for (final Location loc : locs) { + if (minLocation == null) { + minLocation = loc; } - BreakpointRequest request = debugProcess.getRequestsManager().createBreakpointRequest(LineBreakpoint.this, location); - debugProcess.getRequestsManager().enableRequest(request); - if (LOG.isDebugEnabled()) { - LOG.debug("Created breakpoint request for reference type " + classType.name() + " at line " + getLineIndex()); + else if (loc.codeIndex() < minLocation.codeIndex()) { + minLocation = loc; } } + + assert minLocation != null; + + if (LOG.isDebugEnabled()) { + LOG.debug("Found location for reference type " + classType.name() + " at line " + getLineIndex() + "; isObsolete: " + (debugProcess.getVirtualMachineProxy().versionHigher("1.4") && minLocation + .method().isObsolete())); + } + BreakpointRequest request = debugProcess.getRequestsManager().createBreakpointRequest(LineBreakpoint.this, minLocation); + debugProcess.getRequestsManager().enableRequest(request); + if (LOG.isDebugEnabled()) { + LOG.debug("Created breakpoint request for reference type " + classType.name() + " at line " + getLineIndex()); + } } else { // there's no executable code in this class diff --git a/platform/lang-impl/src/com/intellij/find/impl/livePreview/SearchResults.java b/platform/lang-impl/src/com/intellij/find/impl/livePreview/SearchResults.java index 224479d369e5..91258d1f51a9 100644 --- a/platform/lang-impl/src/com/intellij/find/impl/livePreview/SearchResults.java +++ b/platform/lang-impl/src/com/intellij/find/impl/livePreview/SearchResults.java @@ -238,6 +238,9 @@ public class SearchResults { myCursor = null; } } + if (myCursor == null && hasMatches()) { + setNotFoundState(true); + } } @Nullable diff --git a/platform/lang-impl/src/com/intellij/openapi/file/exclude/ProjectFileExclusionManager.java b/platform/lang-impl/src/com/intellij/openapi/file/exclude/ProjectFileExclusionManager.java index 6a630ffbf5b8..82eeba9b06d1 100644 --- a/platform/lang-impl/src/com/intellij/openapi/file/exclude/ProjectFileExclusionManager.java +++ b/platform/lang-impl/src/com/intellij/openapi/file/exclude/ProjectFileExclusionManager.java @@ -30,7 +30,7 @@ import com.intellij.openapi.vfs.VirtualFileManager; import com.intellij.util.indexing.FileBasedIndex; import org.jdom.Attribute; import org.jdom.Element; -import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.NotNull; import java.util.Collection; import java.util.Map; @@ -115,8 +115,8 @@ public class ProjectFileExclusionManager implements PersistentStateComponent myDocument; private final Language myBaseLanguage; + private final ProjectFileExclusionManager myExclusionManager; public SingleRootFileViewProvider(@NotNull PsiManager manager, @NotNull VirtualFile file) { this(manager, file, true); @@ -81,6 +83,7 @@ public class SingleRootFileViewProvider extends UserDataHolderBase implements Fi myPhysical = isEventSystemEnabled() && !(virtualFile instanceof LightVirtualFile) && !(virtualFile.getFileSystem() instanceof DummyFileSystem); + myExclusionManager = ProjectFileExclusionManager.getInstance(manager.getProject()); } @NotNull @@ -234,6 +237,7 @@ public class SingleRootFileViewProvider extends UserDataHolderBase implements Fi protected boolean isIgnored() { final VirtualFile file = getVirtualFile(); if (file instanceof LightVirtualFile) return false; + if (myExclusionManager.isExcluded(file)) return true; return FileTypeManager.getInstance().isFileIgnored(file); } diff --git a/platform/lang-impl/src/com/intellij/util/indexing/FileBasedIndexProjectHandler.java b/platform/lang-impl/src/com/intellij/util/indexing/FileBasedIndexProjectHandler.java index 42f9d9367091..bb4d3b4fe066 100644 --- a/platform/lang-impl/src/com/intellij/util/indexing/FileBasedIndexProjectHandler.java +++ b/platform/lang-impl/src/com/intellij/util/indexing/FileBasedIndexProjectHandler.java @@ -23,6 +23,7 @@ import com.intellij.ide.caches.CacheUpdater; import com.intellij.ide.caches.FileContent; import com.intellij.ide.startup.StartupManagerEx; import com.intellij.openapi.components.AbstractProjectComponent; +import com.intellij.openapi.file.exclude.ProjectFileExclusionManager; import com.intellij.openapi.fileTypes.FileTypeManager; import com.intellij.openapi.project.Project; import com.intellij.openapi.project.ProjectManager; @@ -40,12 +41,14 @@ public class FileBasedIndexProjectHandler extends AbstractProjectComponent imple private final FileBasedIndex myIndex; private final ProjectRootManagerEx myRootManager; private final FileTypeManager myFileTypeManager; + private final ProjectFileExclusionManager myExclusionManager; public FileBasedIndexProjectHandler(final FileBasedIndex index, final Project project, final ProjectRootManagerEx rootManager, FileTypeManager ftManager, final ProjectManager projectManager) { super(project); myIndex = index; myRootManager = rootManager; myFileTypeManager = ftManager; + myExclusionManager = ProjectFileExclusionManager.getInstance(project); final StartupManagerEx startupManager = (StartupManagerEx)StartupManager.getInstance(project); if (startupManager != null) { @@ -73,6 +76,7 @@ public class FileBasedIndexProjectHandler extends AbstractProjectComponent imple public boolean isInSet(final VirtualFile file) { final ProjectFileIndex index = myRootManager.getFileIndex(); if (index.isInContent(file) || index.isInLibraryClasses(file) || index.isInLibrarySource(file)) { + if (myExclusionManager.isExcluded(file)) return false; return !myFileTypeManager.isFileIgnored(file); } return false; diff --git a/platform/platform-api/src/com/intellij/openapi/fileTypes/FileTypeManager.java b/platform/platform-api/src/com/intellij/openapi/fileTypes/FileTypeManager.java index 2a3dcd38d4d2..a8a7818fd6f8 100644 --- a/platform/platform-api/src/com/intellij/openapi/fileTypes/FileTypeManager.java +++ b/platform/platform-api/src/com/intellij/openapi/fileTypes/FileTypeManager.java @@ -18,7 +18,6 @@ package com.intellij.openapi.fileTypes; import com.intellij.openapi.application.Application; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.application.CachedSingletonsRegistry; -import com.intellij.openapi.project.Project; import com.intellij.openapi.vfs.VirtualFile; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; @@ -115,23 +114,8 @@ public abstract class FileTypeManager{ public abstract boolean isFileIgnored(@NonNls @NotNull String name); - /** - * @param file The file to be checked. - * @return true if the file is ignored, false otherwise. - * @deprecated A preferred method is {@link FileTypeManager#isFileIgnored(com.intellij.openapi.project.Project, com.intellij.openapi.vfs.VirtualFile)} - */ public abstract boolean isFileIgnored(@NonNls @NotNull VirtualFile file); - /** - * Checkes if the file is to be ignored within a given project. - * @param project The project containing the file to check. - * @param file The file to to be checked. - * @return true if the file is ignored, false otherwise. - */ - public boolean isFileIgnored(@Nullable Project project, @NotNull VirtualFile file) { - return isFileIgnored(file); - } - /** * Returns the list of extensions associated with the specified file type. * diff --git a/platform/platform-impl/src/com/intellij/openapi/file/exclude/FileExclusionProvider.java b/platform/platform-impl/src/com/intellij/openapi/file/exclude/FileExclusionProvider.java deleted file mode 100644 index 648dfa9289f1..000000000000 --- a/platform/platform-impl/src/com/intellij/openapi/file/exclude/FileExclusionProvider.java +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Copyright 2000-2011 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.openapi.file.exclude; - -import com.intellij.openapi.extensions.ExtensionPointName; -import com.intellij.openapi.extensions.Extensions; -import com.intellij.openapi.project.Project; -import com.intellij.openapi.project.ProjectManager; -import com.intellij.openapi.vfs.VirtualFile; -import org.jetbrains.annotations.Nullable; - -/** - * @author Rustam Vishnyakov - */ -public abstract class FileExclusionProvider { - - public static ExtensionPointName EP_NAME = ExtensionPointName.create("com.intellij.fileExclusionProvider"); - public static ExtensionPointName PROJECT_EP_NAME = - ExtensionPointName.create("com.intellij.projectFileExclusionProvider"); - - public boolean isFileExcluded(final VirtualFile file) { - return false; - } - - public boolean isFileNameExcluded(final String name) { - return false; - } - - public static boolean isExcluded(final @Nullable Project project, final VirtualFile file) { - if (file.isDirectory()) return false; - for (FileExclusionProvider exclusionProvider : Extensions.getExtensions(EP_NAME)) { - if (exclusionProvider.isFileExcluded(file)) return true; - } - if (project != null) { - for (FileExclusionProvider exclusionProvider : Extensions.getExtensions(PROJECT_EP_NAME, project)) { - if (exclusionProvider.isFileExcluded(file)) return true; - } - } - else { - for (Project openProject : ProjectManager.getInstance().getOpenProjects()) { - assert openProject != null; - if(isExcluded(openProject, file)) return true; - } - } - return false; - } - - public static boolean isExcluded (final String fileName) { - for (FileExclusionProvider exclusionProvider : Extensions.getExtensions(EP_NAME)) { - if (exclusionProvider.isFileNameExcluded(fileName)) return true; - } - return false; - } - -} diff --git a/platform/platform-impl/src/com/intellij/openapi/fileTypes/impl/FileTypeManagerImpl.java b/platform/platform-impl/src/com/intellij/openapi/fileTypes/impl/FileTypeManagerImpl.java index 326822ce9960..e6e044498d13 100644 --- a/platform/platform-impl/src/com/intellij/openapi/fileTypes/impl/FileTypeManagerImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/fileTypes/impl/FileTypeManagerImpl.java @@ -25,14 +25,12 @@ import com.intellij.openapi.components.ExportableApplicationComponent; import com.intellij.openapi.components.RoamingType; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.extensions.Extensions; -import com.intellij.openapi.file.exclude.FileExclusionProvider; import com.intellij.openapi.fileTypes.*; import com.intellij.openapi.fileTypes.ex.*; import com.intellij.openapi.options.BaseSchemeProcessor; import com.intellij.openapi.options.ExternalInfo; import com.intellij.openapi.options.SchemesManager; import com.intellij.openapi.options.SchemesManagerFactory; -import com.intellij.openapi.project.Project; import com.intellij.openapi.util.*; import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.vfs.VirtualFile; @@ -377,17 +375,12 @@ public class FileTypeManagerImpl extends FileTypeManagerEx implements NamedJDOME } public boolean isFileIgnored(@NotNull String name) { - return myIgnoredPatterns.isIgnored(name) || FileExclusionProvider.isExcluded(name); - } - - @Override - public boolean isFileIgnored(@Nullable Project project, @NonNls @NotNull VirtualFile file) { - return isFileIgnored(file.getName()) || FileExclusionProvider.isExcluded(project, file); + return myIgnoredPatterns.isIgnored(name); } @Override public boolean isFileIgnored(@NonNls @NotNull VirtualFile file) { - return isFileIgnored(file.getName()) || FileExclusionProvider.isExcluded(null, file); + return isFileIgnored(file.getName()); } @SuppressWarnings({"deprecation"}) diff --git a/platform/platform-impl/src/com/intellij/util/PlatformUtils.java b/platform/platform-impl/src/com/intellij/util/PlatformUtils.java index 0c6c58358716..26dba41e653c 100644 --- a/platform/platform-impl/src/com/intellij/util/PlatformUtils.java +++ b/platform/platform-impl/src/com/intellij/util/PlatformUtils.java @@ -26,6 +26,7 @@ public class PlatformUtils { public static final String RUBY_PREFIX = "Ruby"; public static final String PHP_PREFIX = "PhpStorm"; public static final String WEB_PREFIX = "WebStorm"; + public static final String FLEX_PREFIX = "Flex"; private PlatformUtils() { } @@ -65,4 +66,8 @@ public class PlatformUtils { public static boolean isWebStorm() { return WEB_PREFIX.equals(getPlatformPrefix()); } + + public static boolean isFlexIde() { + return FLEX_PREFIX.equals(getPlatformPrefix()); + } } diff --git a/platform/platform-resources/src/META-INF/LangExtensions.xml b/platform/platform-resources/src/META-INF/LangExtensions.xml index 5681443a79eb..4d7faa29d255 100644 --- a/platform/platform-resources/src/META-INF/LangExtensions.xml +++ b/platform/platform-resources/src/META-INF/LangExtensions.xml @@ -278,7 +278,6 @@ - diff --git a/platform/platform-resources/src/META-INF/PlatformExtensionPoints.xml b/platform/platform-resources/src/META-INF/PlatformExtensionPoints.xml index 924ce9da1657..84a0e91e4ab8 100644 --- a/platform/platform-resources/src/META-INF/PlatformExtensionPoints.xml +++ b/platform/platform-resources/src/META-INF/PlatformExtensionPoints.xml @@ -44,9 +44,6 @@ area="IDEA_PROJECT"/> - - toCompile, OutputSink sink, boolean tests) { + protected void compileFiles(CompileContext compileContext, + Module module, + final List toCompile, + OutputSink sink, + boolean tests) { final File outDir = getStubOutput(module, tests); outDir.mkdirs(); @@ -116,16 +127,17 @@ public class GroovycStubGenerator extends GroovyCompilerBase { if (GroovyCompilerConfiguration.getInstance(myProject).isUseGroovycStubs()) { runGroovycCompiler(compileContext, module, toCompile, true, tempOutput, sink, tests); - } else { + } + else { ProgressIndicator indicator = compileContext.getProgressIndicator(); indicator.pushState(); try { - final GroovyToJavaGenerator generator = new GroovyToJavaGenerator(myProject, compileContext, toCompile); + final GroovyToJavaGenerator generator = new GroovyToJavaGenerator(myProject, toCompile, false); for (int i = 0; i < toCompile.size(); i++) { indicator.setFraction((double)i / toCompile.size()); - final Collection stubFiles = generator.generateItems(toCompile.get(i), tempOutput); + final Collection stubFiles = generateItems(generator, toCompile.get(i), tempOutput, compileContext, myProject); ((CompileContextEx)compileContext).addScope(new FileSetCompileScope(stubFiles, new Module[]{module})); } } @@ -188,4 +200,40 @@ public class GroovycStubGenerator extends GroovyCompilerBase { return true; } + public static Collection generateItems(final GroovyToJavaGenerator generator, + final VirtualFile item, + final VirtualFile outputRootDirectory, + CompileContext context, + final Project project) { + ProgressIndicator indicator = context.getProgressIndicator(); + indicator.setText("Generating stubs for " + item.getName() + "..."); + + if (LOG.isDebugEnabled()) { + LOG.debug("Generating stubs for " + item.getName() + "..."); + } + + final Map output = ApplicationManager.getApplication().runReadAction(new Computable>() { + public Map compute() { + return generator.generateStubs((GroovyFile)PsiManager.getInstance(project).findFile(item)); + } + }); + return writeStubs(outputRootDirectory, output, item); + } + + private static List writeStubs(VirtualFile outputRootDirectory, Map output, VirtualFile src) { + final ArrayList stubs = CollectionFactory.arrayList(); + for (String relativePath : output.keySet()) { + final File stubFile = new File(outputRootDirectory.getPath(), relativePath); + FileUtil.createIfDoesntExist(stubFile); + try { + FileUtil.writeToFile(stubFile, output.get(relativePath).getBytes(src.getCharset())); + } + catch (IOException e) { + LOG.error(e); + } + CompilerUtil.refreshIOFile(stubFile); + ContainerUtil.addIfNotNull(LocalFileSystem.getInstance().refreshAndFindFileByIoFile(stubFile), stubs); + } + return stubs; + } } diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/api/statements/arguments/GrArgumentLabel.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/api/statements/arguments/GrArgumentLabel.java index 39d8416f36e9..c2d0aeaad567 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/api/statements/arguments/GrArgumentLabel.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/api/statements/arguments/GrArgumentLabel.java @@ -24,6 +24,7 @@ import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.plugins.groovy.lang.psi.GroovyPsiElement; +import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrExpression; /** * @author ilyas @@ -35,6 +36,12 @@ public interface GrArgumentLabel extends GroovyPsiElement, PsiReference { @NotNull PsiElement getNameElement(); + @Nullable + /** + * returns expression which is put into parentheses. + */ + GrExpression getExpression(); + @Nullable String getName(); diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/arguments/GrArgumentLabelImpl.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/arguments/GrArgumentLabelImpl.java index 057e6ed48662..9bf265c5f0d3 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/arguments/GrArgumentLabelImpl.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/arguments/GrArgumentLabelImpl.java @@ -236,6 +236,13 @@ public class GrArgumentLabelImpl extends GroovyPsiElementImpl implements GrArgum return element; } + @Override + public GrExpression getExpression() { + final PsiElement nameElement = getNameElement(); + if (nameElement instanceof GrParenthesizedExpression) return ((GrParenthesizedExpression)nameElement).getOperand(); + return null; + } + @Nullable public PsiType getExpectedArgumentType() { final PsiElement resolved = resolve(); diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/convertToJava/GroovyToJavaGenerator.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/convertToJava/GroovyToJavaGenerator.java index 44eb98f77aba..f1d12ab2e05b 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/convertToJava/GroovyToJavaGenerator.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/convertToJava/GroovyToJavaGenerator.java @@ -13,20 +13,15 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.jetbrains.plugins.groovy.compiler.generator; +package org.jetbrains.plugins.groovy.refactoring.convertToJava; import com.intellij.codeInsight.generation.OverrideImplementUtil; -import com.intellij.compiler.impl.CompilerUtil; import com.intellij.openapi.application.ApplicationManager; -import com.intellij.openapi.compiler.CompileContext; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.progress.ProcessCanceledException; -import com.intellij.openapi.progress.ProgressIndicator; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Computable; -import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.util.text.StringUtil; -import com.intellij.openapi.vfs.LocalFileSystem; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.*; import com.intellij.psi.impl.light.LightMethodBuilder; @@ -62,8 +57,6 @@ import org.jetbrains.plugins.groovy.lang.psi.impl.statements.expressions.TypesUt import org.jetbrains.plugins.groovy.lang.psi.impl.synthetic.GroovyScriptClass; import org.jetbrains.plugins.groovy.lang.psi.util.GrClassImplUtil; -import java.io.File; -import java.io.IOException; import java.util.*; /** @@ -72,7 +65,7 @@ import java.util.*; */ public class GroovyToJavaGenerator { private static final Map typesToInitialValues = new HashMap(); - private static final Logger LOG = Logger.getInstance("org.jetbrains.plugins.groovy.compiler.generator.GroovyToJavaGenerator"); + private static final Logger LOG = Logger.getInstance("org.jetbrains.plugins.groovy.refactoring.convertToJava.GroovyToJavaGenerator"); static { typesToInitialValues.put("boolean", "false"); @@ -97,30 +90,15 @@ public class GroovyToJavaGenerator { PsiModifier.NATIVE, }; - private final CompileContext myContext; private final List myAllToCompile; private final Project myProject; - public GroovyToJavaGenerator(Project project, CompileContext context, List allToCompile) { + private final boolean fullConversion; + + public GroovyToJavaGenerator(Project project, List allToCompile, boolean fullConversion) { myProject = project; - myContext = context; myAllToCompile = allToCompile; - } - - public Collection generateItems(final VirtualFile item, final VirtualFile outputRootDirectory) { - ProgressIndicator indicator = myContext.getProgressIndicator(); - indicator.setText("Generating stubs for " + item.getName() + "..."); - - if (LOG.isDebugEnabled()) { - LOG.debug("Generating stubs for " + item.getName() + "..."); - } - - final Map output = ApplicationManager.getApplication().runReadAction(new Computable>() { - public Map compute() { - return generateStubs((GroovyFile)PsiManager.getInstance(myProject).findFile(item)); - } - }); - return writeStubs(outputRootDirectory, output, item); + this.fullConversion = fullConversion; } public Map generateStubs(GroovyFile file) { @@ -157,23 +135,6 @@ public class GroovyToJavaGenerator { return output; } - private static List writeStubs(VirtualFile outputRootDirectory, Map output, VirtualFile src) { - final ArrayList stubs = CollectionFactory.arrayList(); - for (String relativePath : output.keySet()) { - final File stubFile = new File(outputRootDirectory.getPath(), relativePath); - FileUtil.createIfDoesntExist(stubFile); - try { - FileUtil.writeToFile(stubFile, output.get(relativePath).getBytes(src.getCharset())); - } - catch (IOException e) { - LOG.error(e); - } - CompilerUtil.refreshIOFile(stubFile); - ContainerUtil.addIfNotNull(LocalFileSystem.getInstance().refreshAndFindFileByIoFile(stubFile), stubs); - } - return stubs; - } - private static String getPackageDirectory(@Nullable GrPackageDefinition packageDefinition) { if (packageDefinition == null) return ""; @@ -596,7 +557,7 @@ public class GroovyToJavaGenerator { return method.getText(); } - final GroovyToJavaGenerator generator = new GroovyToJavaGenerator(method.getProject(), null, Collections.emptyList()); + final GroovyToJavaGenerator generator = new GroovyToJavaGenerator(method.getProject(), Collections.emptyList(), false); final StringBuffer buffer = new StringBuffer(); if (method instanceof GrConstructor) { generator.writeConstructor(buffer, (GrConstructor)method, false, false); diff --git a/plugins/groovy/test/org/jetbrains/plugins/groovy/compiler/GeneratorTest.java b/plugins/groovy/test/org/jetbrains/plugins/groovy/compiler/GeneratorTest.java index 6833091f3916..4008333a87f2 100644 --- a/plugins/groovy/test/org/jetbrains/plugins/groovy/compiler/GeneratorTest.java +++ b/plugins/groovy/test/org/jetbrains/plugins/groovy/compiler/GeneratorTest.java @@ -3,8 +3,8 @@ package org.jetbrains.plugins.groovy.compiler; import com.intellij.openapi.util.text.StringUtil; import com.intellij.psi.PsiFile; import org.jetbrains.plugins.groovy.LightGroovyTestCase; -import org.jetbrains.plugins.groovy.compiler.generator.GroovyToJavaGenerator; import org.jetbrains.plugins.groovy.lang.psi.GroovyFile; +import org.jetbrains.plugins.groovy.refactoring.convertToJava.GroovyToJavaGenerator; import org.jetbrains.plugins.groovy.util.TestUtils; import java.util.Arrays; @@ -103,7 +103,7 @@ public class GeneratorTest extends LightGroovyTestCase { final String testName = StringUtil.trimEnd(relTestPath, ".test"); PsiFile psiFile = TestUtils.createPseudoPhysicalFile(getProject(), testName + ".groovy", data.get(0)); final Map map = - new GroovyToJavaGenerator(getProject(), null, Arrays.asList(psiFile.getViewProvider().getVirtualFile())) + new GroovyToJavaGenerator(getProject(), Arrays.asList(psiFile.getViewProvider().getVirtualFile()), false) .generateStubs((GroovyFile)psiFile); for (String stubText : map.values()) {