mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Merge branch 'master' of git@git.labs.intellij.net:idea/community
This commit is contained in:
@@ -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<ReferenceType> positionClasses = positionManager.getAllClasses(position);
|
||||
if (positionClasses.isEmpty()) {
|
||||
// fallback
|
||||
if (positionManager.locationsOfLine(referenceType, position).size() > 0) {
|
||||
requestor.processClassPrepare(debuggerProcess, referenceType);
|
||||
}
|
||||
}
|
||||
else {
|
||||
final List<ReferenceType> positionClasses = positionManager.getAllClasses(position);
|
||||
if (positionClasses.contains(referenceType)) {
|
||||
requestor.processClassPrepare(debuggerProcess, referenceType);
|
||||
}
|
||||
@@ -267,15 +270,17 @@ public class PositionManagerImpl implements PositionManager {
|
||||
|
||||
final List<ReferenceType> 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;
|
||||
}
|
||||
|
||||
@@ -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<ReferenceType> nestedTypes = myNestedClassesCache.get(refType);
|
||||
if (nestedTypes == null) {
|
||||
final List<ReferenceType> list = refType.nestedTypes();
|
||||
nestedTypes = new ArrayList<ReferenceType>(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<ReferenceType> candidates = new HashSet<ReferenceType>();
|
||||
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<ReferenceType> nested2 = new HashSet<ReferenceType>();
|
||||
for (final ReferenceType candidate : candidates) {
|
||||
nested2.addAll(nestedTypes(candidate));
|
||||
}
|
||||
candidates.removeAll(nested2);
|
||||
}
|
||||
|
||||
nestedTypes = candidates.isEmpty()? Collections.<ReferenceType>emptyList() : new ArrayList<ReferenceType>(candidates);
|
||||
}
|
||||
else {
|
||||
nestedTypes = Collections.emptyList();
|
||||
}
|
||||
myNestedClassesCache.put(refType, nestedTypes);
|
||||
}
|
||||
|
||||
@@ -130,16 +130,27 @@ public class LineBreakpoint extends BreakpointWithHighlighter {
|
||||
try {
|
||||
List<Location> 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
|
||||
|
||||
@@ -238,6 +238,9 @@ public class SearchResults {
|
||||
myCursor = null;
|
||||
}
|
||||
}
|
||||
if (myCursor == null && hasMatches()) {
|
||||
setNotFoundState(true);
|
||||
}
|
||||
}
|
||||
|
||||
@Nullable
|
||||
|
||||
+3
-3
@@ -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<Ele
|
||||
}
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public static ProjectFileExclusionManager getInstance(Project project) {
|
||||
public static ProjectFileExclusionManager getInstance(@NotNull Project project) {
|
||||
return ServiceManager.getService(project, ProjectFileExclusionManager.class);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
-38
@@ -1,38 +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.project.Project;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
|
||||
/**
|
||||
* @author Rustam Vishnyakov
|
||||
*/
|
||||
public class ProjectFileExclusionProvider extends FileExclusionProvider {
|
||||
|
||||
private final ProjectFileExclusionManager myFileExclusionManager;
|
||||
|
||||
public ProjectFileExclusionProvider(Project project) {
|
||||
myFileExclusionManager = ProjectFileExclusionManager.getInstance(project);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isFileExcluded(VirtualFile file) {
|
||||
return myFileExclusionManager.isExcluded(file);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -16,6 +16,7 @@
|
||||
|
||||
package com.intellij.openapi.roots.impl;
|
||||
|
||||
import com.intellij.openapi.file.exclude.ProjectFileExclusionManager;
|
||||
import com.intellij.openapi.fileTypes.FileTypeManager;
|
||||
import com.intellij.openapi.fileTypes.StdFileTypes;
|
||||
import com.intellij.openapi.module.Module;
|
||||
@@ -36,6 +37,7 @@ public class ModuleFileIndexImpl implements ModuleFileIndex {
|
||||
private final FileTypeManager myFileTypeManager;
|
||||
private final DirectoryIndex myDirectoryIndex;
|
||||
private final ContentFilter myContentFilter;
|
||||
private final ProjectFileExclusionManager myExclusionManager;
|
||||
|
||||
public ModuleFileIndexImpl(Module module, DirectoryIndex directoryIndex) {
|
||||
myModule = module;
|
||||
@@ -43,6 +45,7 @@ public class ModuleFileIndexImpl implements ModuleFileIndex {
|
||||
myFileTypeManager = FileTypeManager.getInstance();
|
||||
|
||||
myContentFilter = new ContentFilter();
|
||||
myExclusionManager = ProjectFileExclusionManager.getInstance(module.getProject());
|
||||
}
|
||||
|
||||
public boolean iterateContent(@NotNull ContentIterator iterator) {
|
||||
@@ -153,6 +156,7 @@ public class ModuleFileIndexImpl implements ModuleFileIndex {
|
||||
return info != null && myModule.equals(info.module);
|
||||
}
|
||||
else {
|
||||
if(myExclusionManager.isExcluded(file)) return false;
|
||||
return !myFileTypeManager.isFileIgnored(file);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,6 +18,7 @@ package com.intellij.openapi.roots.impl;
|
||||
|
||||
import com.intellij.injected.editor.VirtualFileWindow;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.file.exclude.ProjectFileExclusionManager;
|
||||
import com.intellij.openapi.fileTypes.FileTypeManager;
|
||||
import com.intellij.openapi.fileTypes.StdFileTypes;
|
||||
import com.intellij.openapi.module.Module;
|
||||
@@ -41,6 +42,7 @@ public class ProjectFileIndexImpl implements ProjectFileIndex {
|
||||
private final FileTypeManager myFileTypeManager;
|
||||
private final DirectoryIndex myDirectoryIndex;
|
||||
private final ContentFilter myContentFilter;
|
||||
private final ProjectFileExclusionManager myFileExclusionManager;
|
||||
|
||||
public ProjectFileIndexImpl(Project project, DirectoryIndex directoryIndex, FileTypeManager fileTypeManager) {
|
||||
myProject = project;
|
||||
@@ -48,6 +50,7 @@ public class ProjectFileIndexImpl implements ProjectFileIndex {
|
||||
myDirectoryIndex = directoryIndex;
|
||||
myFileTypeManager = fileTypeManager;
|
||||
myContentFilter = new ContentFilter();
|
||||
myFileExclusionManager = ProjectFileExclusionManager.getInstance(project);
|
||||
}
|
||||
|
||||
public boolean iterateContent(@NotNull ContentIterator iterator) {
|
||||
@@ -88,6 +91,7 @@ public class ProjectFileIndexImpl implements ProjectFileIndex {
|
||||
|
||||
public boolean isIgnored(@NotNull VirtualFile file) {
|
||||
if (myFileTypeManager.isFileIgnored(file)) return true;
|
||||
if (myFileExclusionManager.isExcluded(file)) return true;
|
||||
VirtualFile dir = file.isDirectory() ? file : file.getParent();
|
||||
if (dir == null) return false;
|
||||
|
||||
@@ -242,6 +246,7 @@ public class ProjectFileIndexImpl implements ProjectFileIndex {
|
||||
return info != null && info.module != null;
|
||||
}
|
||||
else {
|
||||
if (myFileExclusionManager.isExcluded(file)) return false;
|
||||
return !myFileTypeManager.isFileIgnored(file);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -22,6 +22,7 @@ import com.intellij.openapi.command.undo.UndoManager;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.editor.Document;
|
||||
import com.intellij.openapi.extensions.Extensions;
|
||||
import com.intellij.openapi.file.exclude.ProjectFileExclusionManager;
|
||||
import com.intellij.openapi.fileEditor.FileDocumentManager;
|
||||
import com.intellij.openapi.fileEditor.impl.LoadTextUtil;
|
||||
import com.intellij.openapi.fileTypes.*;
|
||||
@@ -63,6 +64,7 @@ public class SingleRootFileViewProvider extends UserDataHolderBase implements Fi
|
||||
private volatile Content myContent;
|
||||
private volatile SoftReference<Document> 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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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.
|
||||
*
|
||||
|
||||
-68
@@ -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<FileExclusionProvider> EP_NAME = ExtensionPointName.create("com.intellij.fileExclusionProvider");
|
||||
public static ExtensionPointName<FileExclusionProvider> 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;
|
||||
}
|
||||
|
||||
}
|
||||
+2
-9
@@ -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"})
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -278,7 +278,6 @@
|
||||
<applicationConfigurable instance="com.intellij.codeInsight.intention.impl.config.IntentionSettingsConfigurable" id="intentions"/>
|
||||
|
||||
<!-- File Exclusions -->
|
||||
<projectFileExclusionProvider implementation="com.intellij.openapi.file.exclude.ProjectFileExclusionProvider"/>
|
||||
|
||||
<projectService serviceInterface="com.intellij.openapi.file.exclude.ProjectFileExclusionManager"
|
||||
serviceImplementation="com.intellij.openapi.file.exclude.ProjectFileExclusionManager"/>
|
||||
|
||||
@@ -44,9 +44,6 @@
|
||||
area="IDEA_PROJECT"/>
|
||||
<extensionPoint name="customFileTypeFactory" interface="com.intellij.openapi.fileTypes.ex.CustomFileTypeFactory"/>
|
||||
<extensionPoint name="fileTypeRegistrator" interface="com.intellij.ide.highlighter.FileTypeRegistrator"/>
|
||||
<extensionPoint name="fileExclusionProvider" interface="com.intellij.openapi.file.exclude.FileExclusionProvider"/>
|
||||
<extensionPoint name="projectFileExclusionProvider" interface="com.intellij.openapi.file.exclude.FileExclusionProvider"
|
||||
area="IDEA_PROJECT"/>
|
||||
|
||||
<extensionPoint name="undoProvider" interface="com.intellij.openapi.command.impl.UndoProvider"/>
|
||||
<extensionPoint name="projectUndoProvider" interface="com.intellij.openapi.command.impl.UndoProvider"
|
||||
|
||||
+1
-1
@@ -23,12 +23,12 @@ import com.intellij.util.ArrayUtil;
|
||||
import com.intellij.util.IncorrectOperationException;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.plugins.groovy.compiler.generator.GroovyToJavaGenerator;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.GroovyPsiElementFactory;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.api.statements.GrField;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.api.statements.params.GrParameter;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.members.GrMethod;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.util.PsiUtil;
|
||||
import org.jetbrains.plugins.groovy.refactoring.convertToJava.GroovyToJavaGenerator;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
+57
-9
@@ -16,8 +16,10 @@
|
||||
|
||||
package org.jetbrains.plugins.groovy.compiler.generator;
|
||||
|
||||
import com.intellij.compiler.impl.CompilerUtil;
|
||||
import com.intellij.compiler.impl.FileSetCompileScope;
|
||||
import com.intellij.compiler.impl.TranslatingCompilerFilesMonitor;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.application.Result;
|
||||
import com.intellij.openapi.command.WriteCommandAction;
|
||||
import com.intellij.openapi.compiler.CompileContext;
|
||||
@@ -25,38 +27,44 @@ import com.intellij.openapi.compiler.CompileScope;
|
||||
import com.intellij.openapi.compiler.CompilerPaths;
|
||||
import com.intellij.openapi.compiler.ex.CompileContextEx;
|
||||
import com.intellij.openapi.compiler.options.ExcludedEntriesConfiguration;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.fileTypes.FileType;
|
||||
import com.intellij.openapi.fileTypes.StdFileTypes;
|
||||
import com.intellij.openapi.module.Module;
|
||||
import com.intellij.openapi.module.ModuleManager;
|
||||
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.VfsUtil;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.psi.JavaPsiFacade;
|
||||
import com.intellij.psi.PsiClass;
|
||||
import com.intellij.psi.PsiManager;
|
||||
import com.intellij.psi.search.GlobalSearchScope;
|
||||
import com.intellij.util.Chunk;
|
||||
import com.intellij.util.containers.CollectionFactory;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.plugins.groovy.GroovyFileType;
|
||||
import org.jetbrains.plugins.groovy.compiler.GroovyCompilerBase;
|
||||
import org.jetbrains.plugins.groovy.compiler.GroovyCompilerConfiguration;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.GroovyFile;
|
||||
import org.jetbrains.plugins.groovy.refactoring.GroovyNamesUtil;
|
||||
import org.jetbrains.plugins.groovy.refactoring.convertToJava.GroovyToJavaGenerator;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* @author peter
|
||||
*/
|
||||
public class GroovycStubGenerator extends GroovyCompilerBase {
|
||||
private static Logger LOG = Logger.getInstance("#org.jetbrains.plugins.groovy.compiler.generator.GroovycStubGenerator");
|
||||
|
||||
public static final String GROOVY_STUBS = "groovyStubs";
|
||||
|
||||
@@ -103,8 +111,11 @@ public class GroovycStubGenerator extends GroovyCompilerBase {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void compileFiles(CompileContext compileContext, Module module,
|
||||
final List<VirtualFile> toCompile, OutputSink sink, boolean tests) {
|
||||
protected void compileFiles(CompileContext compileContext,
|
||||
Module module,
|
||||
final List<VirtualFile> 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<VirtualFile> stubFiles = generator.generateItems(toCompile.get(i), tempOutput);
|
||||
final Collection<VirtualFile> 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<VirtualFile> 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<String, String> output = ApplicationManager.getApplication().runReadAction(new Computable<Map<String, String>>() {
|
||||
public Map<String, String> compute() {
|
||||
return generator.generateStubs((GroovyFile)PsiManager.getInstance(project).findFile(item));
|
||||
}
|
||||
});
|
||||
return writeStubs(outputRootDirectory, output, item);
|
||||
}
|
||||
|
||||
private static List<VirtualFile> writeStubs(VirtualFile outputRootDirectory, Map<String, String> output, VirtualFile src) {
|
||||
final ArrayList<VirtualFile> 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;
|
||||
}
|
||||
}
|
||||
|
||||
+7
@@ -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();
|
||||
|
||||
|
||||
+7
@@ -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();
|
||||
|
||||
+7
-46
@@ -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<String, String> typesToInitialValues = new HashMap<String, String>();
|
||||
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<VirtualFile> myAllToCompile;
|
||||
private final Project myProject;
|
||||
|
||||
public GroovyToJavaGenerator(Project project, CompileContext context, List<VirtualFile> allToCompile) {
|
||||
private final boolean fullConversion;
|
||||
|
||||
public GroovyToJavaGenerator(Project project, List<VirtualFile> allToCompile, boolean fullConversion) {
|
||||
myProject = project;
|
||||
myContext = context;
|
||||
myAllToCompile = allToCompile;
|
||||
}
|
||||
|
||||
public Collection<VirtualFile> 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<String, String> output = ApplicationManager.getApplication().runReadAction(new Computable<Map<String, String>>() {
|
||||
public Map<String, String> compute() {
|
||||
return generateStubs((GroovyFile)PsiManager.getInstance(myProject).findFile(item));
|
||||
}
|
||||
});
|
||||
return writeStubs(outputRootDirectory, output, item);
|
||||
this.fullConversion = fullConversion;
|
||||
}
|
||||
|
||||
public Map<String, String> generateStubs(GroovyFile file) {
|
||||
@@ -157,23 +135,6 @@ public class GroovyToJavaGenerator {
|
||||
return output;
|
||||
}
|
||||
|
||||
private static List<VirtualFile> writeStubs(VirtualFile outputRootDirectory, Map<String, String> output, VirtualFile src) {
|
||||
final ArrayList<VirtualFile> 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.<VirtualFile>emptyList());
|
||||
final GroovyToJavaGenerator generator = new GroovyToJavaGenerator(method.getProject(), Collections.<VirtualFile>emptyList(), false);
|
||||
final StringBuffer buffer = new StringBuffer();
|
||||
if (method instanceof GrConstructor) {
|
||||
generator.writeConstructor(buffer, (GrConstructor)method, false, false);
|
||||
|
||||
@@ -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<String,String> 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()) {
|
||||
|
||||
Reference in New Issue
Block a user