Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Fixed issue related to cached ContextPath in the PlSqlFile

  • Loading branch information...
commit 0955e75502540866cf8a2c60e1d350bd3e847ed7 1 parent 920e615
unknown authored
Showing with 475 additions and 1,152 deletions.
  1. +1 −0  .gitignore
  2. +0 −2  shared/root/java/core/com/deepsky/findUsages/persistence/SqlSearchParameters.java
  3. +4 −1 shared/root/java/core/com/deepsky/lang/common/PlSqlFile.java
  4. +14 −182 shared/root/java/core/com/deepsky/lang/common/PlSqlProjectComponent.java
  5. +139 −0 shared/root/java/core/com/deepsky/lang/integration/CodeChangeEventAggregator.java
  6. +34 −36 shared/root/java/core/com/deepsky/lang/integration/LocalFSChangeTracker.java
  7. +64 −30 shared/root/java/core/com/deepsky/lang/integration/PlSqlFileChangeTracker.java
  8. +8 −7 shared/root/java/core/com/deepsky/lang/plsql/indexMan/FSIndexer.java
  9. +1 −6 shared/root/java/core/com/deepsky/lang/plsql/indexMan/IndexManagerImpl.java
  10. +0 −79 shared/root/java/core/com/deepsky/lang/plsql/psi/impl/PlSqlElementBase.java
  11. +2 −8 shared/root/java/core/com/deepsky/lang/plsql/sqlIndex/impl/WordIndexManagerImpl.java
  12. +3 −4 shared/root/java/db_browser/com/deepsky/view/schema_pane/tree/DbBrowserToolWindowComponent.java
  13. +5 −1 shared/root/java/resolver/com/deepsky/lang/plsql/resolver/index/IndexTreeBase.java
  14. +1 −2  shared/root/java/resolver/com/deepsky/lang/plsql/resolver/psibased/NamesIndexer.java
  15. +17 −3 shared/root/java/resolver/com/deepsky/lang/plsql/resolver/psibased/NamesIndexerSpecific.java
  16. +2 −7 sqlassistant-plugin10/SqlAssistantPlugin/META-INF/plugin.xml
  17. +2 −0  sqlassistant-plugin11/SqlAssistantPlugin/META-INF/plugin.xml
  18. +1 −1  sqlassistant-plugin11/SqlAssistantPlugin/SqlAssistantPlugin.iml
  19. +6 −6 sqlassistant-plugin11/sqlassistant-11.ipr
  20. +171 −777 sqlassistant-plugin11/sqlassistant-11.iws
1  .gitignore
View
@@ -7,3 +7,4 @@ sqlassistant-plugin9/idea-9-lib/
sqlassistant-plugin10/idea-10-lib/
sqlassistant-plugin10/SqlAssistantPlugin/build
sqlassistant-plugin10/SqlAssistantPlugin/classes/
+[2~[2~sqlassistant-plugin11/SqlAssistantPlugin/classes/
2  shared/root/java/core/com/deepsky/findUsages/persistence/SqlSearchParameters.java
View
@@ -25,8 +25,6 @@
package com.deepsky.findUsages.persistence;
-import com.intellij.ide.DataManager;
-import com.intellij.openapi.actionSystem.LangDataKeys;
import com.intellij.openapi.components.PersistentStateComponent;
import com.intellij.openapi.components.ServiceManager;
import com.intellij.openapi.components.State;
5 shared/root/java/core/com/deepsky/lang/common/PlSqlFile.java
View
@@ -92,7 +92,7 @@ public void subtreeChanged() {
}
*/
- ResolveFacade domainResolver;
+ private ResolveFacade domainResolver;
public ResolveFacade getResolver(){
if(domainResolver == null){
VirtualFile file = getVirtualFile();
@@ -185,5 +185,8 @@ public DbUrl getDbUrl() {
public void resetCaches() {
cachedCtxPath = null;
+ if(getOriginalFile() != this){
+ ((PlSqlFile) getOriginalFile()).resetCaches();
+ }
}
}
196 shared/root/java/core/com/deepsky/lang/common/PlSqlProjectComponent.java
View
@@ -31,6 +31,7 @@
import com.deepsky.database.ora.DbUrlSID;
import com.deepsky.database.ora2.DbSchemaIndexer;
import com.deepsky.lang.integration.LocalFSChangeTracker;
+import com.deepsky.lang.integration.CodeChangeEventAggregator;
import com.deepsky.lang.integration.PlSqlFileChangeTracker;
import com.deepsky.lang.plsql.ConfigurationException;
import com.deepsky.lang.plsql.indexMan.FSIndexer;
@@ -59,24 +60,22 @@
private final Logger log = Logger.getInstance("#PlSqlProjectComponent");
- static final String componentName = "PlSqlProjectComponent";
+ private static final String componentName = "PlSqlProjectComponent";
- Project project;
+ private Project project;
- ConnectionManagerListener connectionListener;
- CacheManagerListener cacheListener;
+ private ConnectionManagerListener connectionListener;
+ private CacheManagerListener cacheListener;
- ConnectionManagerImpl connectionManager;
+ private ConnectionManagerImpl connectionManager;
+ private QueryResultWindow qrWindow;
- QueryResultWindow qrWindow;
-// DBBrowserWindow dbBrowser;
+ private DbSchemaIndexer dbIndexer;
+ private FSIndexer fsIndexer;
+ private IndexManager indexManager;
- DbSchemaIndexer dbIndexer;
- FSIndexer fsIndexer;
- IndexManager indexManager;
-
- DbUrl dbUrl;
- NameLookupService nameLookupService;
+ private DbUrl dbUrl;
+ private NameLookupService nameLookupService;
public PlSqlProjectComponent(Project project) {
this.project = project;
@@ -100,13 +99,6 @@ public String getAlias() {
connectionListener = new StateListenerImpl();
cacheListener = new CacheManagerListenerImpl();
-// cacheManager = new CacheManager3();
-// PluginKeys.CACHE_MANAGER.putData(cacheManager, project);
-// cacheManager.addListener(cacheListener);
-//
-// objectCache = new OraObjectCache3(null); //cacheManager);
-// PluginKeys.OBJECT_CACHE.putData(objectCache, project);
-
indexManager = new IndexManagerImpl(project);
PluginKeys.SQL_INDEX_MAN.putData(indexManager, project);
indexManager.start();
@@ -160,13 +152,6 @@ public void run() {
}
indexManager.enableOfflineCache(urls, flag);
-/*
- for(ConnectionInfo info: connectionManager.getSessionList()){
- DbUrl url = info.getUrl();
- //indexManager.findOrCreateIndex(url);
- nbr++;
- }
-*/
ms = System.currentTimeMillis() - ms;
log.info("Nbr preloaded indexes: " + nbr + ", time spent: " + ms);
@@ -185,29 +170,6 @@ public void run() {
fsIndexer.start();
// PluginKeys.FS_SQL_NAMES_INDEXER.putData(fsIndexManager, project);
-/*
- MessageBus bus1 = project.getMessageBus();
- TestEventListener ll = new TestEventListener(){
-
- public void checkMe() {
- int hh =0;
- }
- };
- bus1.connect().subscribe(TestEventListener.TOPIC, ll);
-*/
-
-/*
- PsiTreeChangeAggregator aggr = new PsiTreeChangeAggregator();
-// PsiManager.getInstance(project).addPsiTreeChangeListener(aggr, project);
-
- MessageBus bus1 = project.getMessageBus();
- bus1.connect().subscribe(PsiDocumentTransactionListener.TOPIC, aggr);
-*/
-
-/*
- PluginKeys.EVNT_CHANNEL.putData(aggr, project);
-*/
-
LocalFSChangeTracker localFSAggr = new LocalFSChangeTracker(project, fsIndexer);
localFSAggr.start();
@@ -216,82 +178,14 @@ public void checkMe() {
nameLookupService = new NameLookupServiceImpl(project);
PluginKeys.NAME_LOOKUP.putData(nameLookupService, project);
-
-// Class clazz = StoresFactory.getProjectStoreClass(false);
-
- int hh = 0;
- // Setup annotator
-// updateAnnotator(current);
- // --------------
-
-// VirtualFileManager vfman = VirtualFileManager.getInstance();
-
-
-/*
- MessageBus bus = project.getMessageBus();
- bus.connect().subscribe(VirtualFileManager.VFS_CHANGES, new BulkFileListener() {
- public void before(List<? extends VFileEvent> events) {
- for (VFileEvent event : events) {
- String path = event.getPath().toLowerCase();
- for(FileNameMatcher m : FileTypeManager.getInstance().getAssociations(PlSqlSupportLoader.PLSQL)){
- if( m.accept(path)){
- log.info("###### " + event );
- }
- }
-// if (path.endsWith(".sql") || path.endsWith(".pkb") || path.endsWith(".pks")) {
-// log.info("###### " + event.getPath());
-// }
- }
- }
-
- public void after(List<? extends VFileEvent> events) {
- for (VFileEvent event : events) {
- String path = event.getPath().toLowerCase();
- for(FileNameMatcher m : FileTypeManager.getInstance().getAssociations(PlSqlSupportLoader.PLSQL)){
- if( m.accept(path)){
- log.info("_____ " + event );
- }
- }
-// if (path.endsWith(".sql") || path.endsWith(".pkb") || path.endsWith(".pks")) {
-// log.info("_____ " + event.getPath());
-// }
- }
- }
- });
-*/
-
-/*
- bus.connect().subscribe(ProjectTopics.MODULES, new ModuleListener() {
- public void moduleAdded(Project project, Module module) {
- //To change body of implemented methods use File | Settings | File Templates.
- }
-
- public void beforeModuleRemoved(Project project, Module module) {
- //To change body of implemented methods use File | Settings | File Templates.
- }
-
- public void moduleRemoved(Project project, Module module) {
- //To change body of implemented methods use File | Settings | File Templates.
- }
-
- public void modulesRenamed(Project project, List<Module> modules) {
- //To change body of implemented methods use File | Settings | File Templates.
- }
- });
-*/
-
}
public void projectClosed() {
-// log.info("#projectClosed :" + project);
connectionManager.removeStateListener(connectionListener);
-
connectionManager.close();
-// objectCache.close();
qrWindow.close();
-// dbBrowser.close();
fsIndexer.stop();
indexManager.stop();
@@ -303,11 +197,11 @@ public String getComponentName() {
}
public void initComponent() {
- int h = 0;
+ CodeChangeEventAggregator.getInstance(project).start();
}
public void disposeComponent() {
- int h = 0;
+ CodeChangeEventAggregator.getInstance(project).stop();
}
private class CacheManagerListenerImpl implements CacheManagerListener {
@@ -321,17 +215,9 @@ public void handleUpdate(int state) {
private class StateListenerImpl implements ConnectionManagerListener {
public void handleUpdate(StateEvent state) {
if (state.getStatus() == ConnectionManagerListener.DISCONNECTED) {
-
-// PluginSettingsBean current = getPluginSettings();
-// current.setLastConnection(null);
-// savePluginSettings(current);
-
PluginKeys.PLUGIN_SETTINGS.getData(project).setConnection(null);
runCodeAnalyzer();
} else if (state.getStatus() == ConnectionManagerListener.CONNECTED) {
-// PluginSettingsBean current = getPluginSettings();
-// current.setLastConnection(connectionManager.getDbUrl().getFullUrl());
-// savePluginSettings(current);
PluginKeys.PLUGIN_SETTINGS.getData(project).setConnection(
connectionManager.getDbUrl().getFullUrl()
);
@@ -339,7 +225,6 @@ public void handleUpdate(StateEvent state) {
}
}
-
private void runCodeAnalyzer() {
ApplicationManager.getApplication().invokeLater(new Runnable() {
public void run() {
@@ -350,58 +235,5 @@ public void run() {
}
});
}
-
-/*
- @Nls
- public String getDisplayName() {
- return "SQL Code Assistant";
- }
-
- @Nullable
- public Icon getIcon() {
- return null;
- }
-
- @Nullable
- public String getHelpTopic() {
- return null;
- }
-*/
-
-/*
- public PluginSettingsBean getState() {
- PluginSettingsBean current = getPluginSettings();
- PluginSettingsBean bean = new PluginSettingsBean();
- XmlSerializerUtil.copyBean(current, bean);
-
- return bean;
- }
-
-
- public void loadState(PluginSettingsBean state) {
- PluginSettingsBean bean = new PluginSettingsBean();
- XmlSerializerUtil.copyBean(state, bean);
- savePluginSettings(bean);
- }
-
-
- private void savePluginSettings(PluginSettingsBean bean) {
-// settings = bean;
- PluginKeys.PLUGIN_SETTINGS.putData(bean, project);
- }
-
- @NotNull
- private PluginSettingsBean getPluginSettings() {
-
- PluginSettingsBean settings = PluginKeys.PLUGIN_SETTINGS.getData2(project);
- if (settings == null) {
- settings = new PluginSettingsBean();
- PluginKeys.PLUGIN_SETTINGS.putData(settings, project);
- }
- return settings;
- }
-*/
-
-
}
139 shared/root/java/core/com/deepsky/lang/integration/CodeChangeEventAggregator.java
View
@@ -0,0 +1,139 @@
+/*
+ * Copyright (c) 2009,2010 Serhiy Kulyk
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * SQL CODE ASSISTANT PLUG-IN FOR INTELLIJ IDEA IS PROVIDED BY SERHIY KULYK
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL SERHIY KULYK BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+package com.deepsky.lang.integration;
+
+import com.deepsky.database.ora.DbUrl;
+import com.deepsky.lang.plsql.indexMan.IndexBulkChangeListener;
+import com.deepsky.lang.plsql.sqlIndex.WordIndexChangeListener;
+import com.intellij.openapi.components.ServiceManager;
+import com.intellij.openapi.project.Project;
+import com.intellij.util.messages.MessageBus;
+import org.jetbrains.annotations.NotNull;
+
+import java.util.*;
+
+public class CodeChangeEventAggregator {
+
+ private Project project;
+ private MessageBus bus1;
+
+ private Thread dispatcher = new Thread(new UpdateEventProcessor());
+ private final Object synch = new Object();
+ private boolean stop = false;
+ private long timeout = 3 * 1000;
+
+ private final Map<DbUrl, Set<String>> dbUrl2types = new HashMap<DbUrl, Set<String>>();
+ private final Map<DbUrl, Set<String>> dbUrl2files = new HashMap<DbUrl, Set<String>>();
+
+ public CodeChangeEventAggregator(Project project){
+ this.project = project;
+ }
+
+ public static CodeChangeEventAggregator getInstance(Project project) {
+ return ServiceManager.getService(project, CodeChangeEventAggregator.class);
+ }
+
+ public void start(){
+ bus1 = project.getMessageBus();
+ stop = false;
+ dispatcher.setDaemon(true);
+ dispatcher.setPriority(2);
+ dispatcher.start();
+ }
+
+ public void stop(){
+ stop = true;
+ synchronized (synch) {
+ synch.notify();
+ }
+
+ if (dispatcher != null) {
+ try {
+ dispatcher.join();
+ } catch (InterruptedException ignored) {
+ }
+ }
+ }
+
+ public void updateIndex(@NotNull DbUrl dbUrl, @NotNull Set<String> types){
+ updateIndex(dbUrl, types.toArray(new String[types.size()]));
+ }
+
+ public void updateIndex(@NotNull DbUrl dbUrl, @NotNull String[] types){
+ synchronized (dbUrl2types){
+ Set<String> typeSet = dbUrl2types.get(dbUrl);
+ if(typeSet == null){
+ typeSet = new HashSet<String>();
+ dbUrl2types.put(dbUrl, typeSet);
+ }
+ typeSet.addAll(Arrays.asList(types));
+ }
+ }
+
+ public void updateWordIndex(DbUrl dbUrl, String filePath){
+ synchronized (dbUrl2files){
+ Set<String> typeSet = dbUrl2files.get(dbUrl);
+ if(typeSet == null){
+ typeSet = new HashSet<String>();
+ dbUrl2files.put(dbUrl, typeSet);
+ }
+ typeSet.add(filePath);
+ }
+ }
+
+
+ private class UpdateEventProcessor implements Runnable {
+ public void run() {
+ synchronized (synch) {
+ while (!stop) {
+ try {
+ synchronized (dbUrl2types){
+ for(Map.Entry<DbUrl, Set<String>> e: dbUrl2types.entrySet()){
+ String[] types = e.getValue().toArray(new String[0]);
+ bus1.syncPublisher(IndexBulkChangeListener.TOPIC).handleUpdate(e.getKey(), types);
+ }
+ dbUrl2types.clear();
+ }
+
+ synchronized (dbUrl2files){
+ for(Map.Entry<DbUrl, Set<String>> e: dbUrl2files.entrySet()){
+ for(String filePath: e.getValue()){
+ bus1.syncPublisher(WordIndexChangeListener.TOPIC).handleUpdate(e.getKey(), filePath);
+ }
+ }
+ dbUrl2files.clear();
+ }
+
+ synch.wait(timeout);
+ } catch (InterruptedException e) {
+ // todo
+ }
+ }
+ }
+ }
+ }
+
+}
70 shared/root/java/core/com/deepsky/lang/integration/LocalFSChangeTracker.java
View
@@ -1,6 +1,5 @@
package com.deepsky.lang.integration;
-import com.deepsky.findUsages.wordProc.FileProcessor;
import com.deepsky.lang.common.PlSqlFile;
import com.deepsky.lang.plsql.indexMan.DbTypeChangeListener;
import com.deepsky.lang.plsql.indexMan.FSIndexer;
@@ -117,27 +116,33 @@ public void handleUpdatedTypes(String[] types) {
String filePath = virtualFile.getPath();
try {
- long ms0 = System.currentTimeMillis();
-
+ long parsingTime = 0;
// Use content of PsiFile if it is found (it can be found if file is opened in the editor)
PsiFile psi = PlSqlElementLocator.locatePsiFile(project, virtualFile);
- String content = (psi != null)? psi.getText(): StringUtils.file2string(new File(filePath));
-
- MarkupGeneratorEx2 generator = new MarkupGeneratorEx2(virtualFile);
- ASTNode root = generator.parse(content);
-
- long ms1 = System.currentTimeMillis();
+ if (psi != null) {
+ if (psi instanceof PlSqlFile) {
+ ((PlSqlFile) psi).resetCaches();
+ }
+ } else {
+ long ms0 = System.currentTimeMillis();
+ String content = StringUtils.file2string(new File(filePath));
+ MarkupGeneratorEx2 generator = new MarkupGeneratorEx2(virtualFile);
+ ASTNode root = generator.parse(content);
+ psi = (PsiFile) root.getPsi();
+ parsingTime = System.currentTimeMillis() - ms0;
+ }
- if (root == null) {
+ if (psi == null) {
log.info("ERROR [File] " + filePath + " Could not parse");
} else {
int cacheSizeBefore = 0;
- fsIndexer.indexPlSqlFile((PlSqlElement) root.getPsi(), listener);
+ long ms = System.currentTimeMillis();
+ fsIndexer.indexPlSqlFile((PlSqlElement) psi, listener);
int sizeAfter = 0;
int added = sizeAfter - cacheSizeBefore;
long ms2 = System.currentTimeMillis();
- log.debug("[Indexing] time (ms): " + (ms2 - ms1) + " \t[Parsing] time (ms): " + (ms1 - ms0) + " \t[Indexes] " + added + "(" + sizeAfter + ")" + "\t[File] " + filePath);
+ log.debug("[Indexing] time (ms): " + (ms2 - ms) + " \t[Parsing] time (ms): " + parsingTime + " \t[Indexes] " + added + "(" + sizeAfter + ")" + "\t[File] " + filePath);
}
} catch (Throwable e) {
fsIndexer.setFileTimestamp(filePath, virtualFile.getTimeStamp(), virtualFile.getModificationStamp());
@@ -159,7 +164,7 @@ public void handleUpdatedTypes(String[] types) {
return typesBeingAdded;
}
- private Set<String> deleteIndex(VirtualFile file, boolean notifyIndexManager){
+ private Set<String> deleteIndex(VirtualFile file, boolean notifyIndexManager) {
Set<String> typesBeenDeleted = fsIndexer.deleteFile(file.getPath());
String[] ttypes = typesBeenDeleted.toArray(new String[typesBeenDeleted.size()]);
log.info("fileDeleted: " + file.getPath() + " types: " + Arrays.toString(ttypes));
@@ -227,7 +232,6 @@ public void modulesRenamed(Project project, List<Module> modules) {
}
-
private class VirtualFileListenerImpl implements VirtualFileListener {
public void propertyChanged(VirtualFilePropertyEvent event) {
log.info("propertyChanged: " + event.getFileName());
@@ -248,14 +252,13 @@ public void contentsChanged(VirtualFileEvent event) {
}
public void fileCreated(VirtualFileEvent event) {
- if(event.getFile().isDirectory()){
+ if (event.getFile().isDirectory()) {
// scan directory recursively and add SQL files to index
final Set<String> updatedTypes = new HashSet<String>();
- FileUtils.processDirectoryTree(event.getFile(), new FileUtils.VirtualFileProcessor(){
+ FileUtils.processDirectoryTree(event.getFile(), new FileUtils.VirtualFileProcessor() {
public void handleEntry(VirtualFile parent, VirtualFile file) {
- if (helper.isFileValid(file)){
+ if (helper.isFileValid(file)) {
log.info("fileCreated: " + file.getPath() + " timestamp: " + file.getModificationStamp());
-// log.info("#BUILD INDEX FOR FILE: " + file.getPath());
updatedTypes.addAll(indexFileWithNotification(file, false));
}
}
@@ -268,7 +271,6 @@ public void handleEntry(VirtualFile parent, VirtualFile file) {
} else if (helper.isFileValid(event.getFile())) {
log.info("fileCreated: " + event.getFileName() + " timestamp: " + event.getFile().getTimeStamp() + " count: " + event.getFile().getModificationStamp());
-// log.info("#BUILD INDEX FOR FILE: " + event.getFile().getPath());
indexFileWithNotification(event.getFile(), true);
}
}
@@ -276,12 +278,12 @@ public void handleEntry(VirtualFile parent, VirtualFile file) {
public void fileDeleted(VirtualFileEvent event) {
// Referenced file does not exist any longer
// fortunately to handle file deletion we need file path only
- if(event.getFile().isDirectory()){
+ if (event.getFile().isDirectory()) {
// scan directory recursively and delete relevant files from index
final Set<String> updatedTypes = new HashSet<String>();
- FileUtils.processDirectoryTree(event.getFile(), new FileUtils.VirtualFileProcessor(){
+ FileUtils.processDirectoryTree(event.getFile(), new FileUtils.VirtualFileProcessor() {
public void handleEntry(VirtualFile parent, VirtualFile file) {
- if (helper.isFileValid(file)){
+ if (helper.isFileValid(file)) {
updatedTypes.addAll(deleteIndex(file, false));
}
}
@@ -298,14 +300,13 @@ public void handleEntry(VirtualFile parent, VirtualFile file) {
public void fileMoved(final VirtualFileMoveEvent event) {
- if(event.getFile().isDirectory()){
+ if (event.getFile().isDirectory()) {
// scan directory recursively and add SQL files to index
final Set<String> updatedTypes = new HashSet<String>();
- FileUtils.processDirectoryTree(event.getFile(), new FileUtils.VirtualFileProcessor(){
+ FileUtils.processDirectoryTree(event.getFile(), new FileUtils.VirtualFileProcessor() {
public void handleEntry(VirtualFile parent, VirtualFile file) {
- if (helper.isFileValid(file)){
+ if (helper.isFileValid(file)) {
log.info("fileMoved: " + file.getPath() + " timestamp: " + file.getModificationStamp());
-// log.info("#BUILD INDEX FOR FILE: " + file.getPath());
updatedTypes.addAll(indexFileWithNotification(file, false));
}
}
@@ -318,18 +319,17 @@ public void handleEntry(VirtualFile parent, VirtualFile file) {
} else if (helper.isFileValid(event.getFile())) {
log.info("fileMoved: " + event.getFileName() + " timestamp: " + event.getFile().getTimeStamp() + " count: " + event.getFile().getModificationStamp());
-// log.info("#BUILD INDEX FOR FILE: " + event.getFile().getPath());
indexFileWithNotification(event.getFile(), true);
}
}
public void fileCopied(VirtualFileCopyEvent event) {
- if(event.getFile().isDirectory()){
+ if (event.getFile().isDirectory()) {
// scan directory recursively and add SQL files to index
final Set<String> updatedTypes = new HashSet<String>();
- FileUtils.processDirectoryTree(event.getFile(), new FileUtils.VirtualFileProcessor(){
+ FileUtils.processDirectoryTree(event.getFile(), new FileUtils.VirtualFileProcessor() {
public void handleEntry(VirtualFile parent, VirtualFile file) {
- if (helper.isFileValid(file)){
+ if (helper.isFileValid(file)) {
log.info("fileCopied: " + file.getPath() + " timestamp: " + file.getModificationStamp());
// log.info("#BUILD INDEX FOR FILE: " + file.getPath());
updatedTypes.addAll(indexFileWithNotification(file, false));
@@ -362,12 +362,12 @@ public void beforeFileDeletion(VirtualFileEvent event) {
}
public void beforeFileMovement(VirtualFileMoveEvent event) {
- if(event.getFile().isDirectory()){
+ if (event.getFile().isDirectory()) {
// scan directory recursively and delete relevant files from index
final Set<String> updatedTypes = new HashSet<String>();
- FileUtils.processDirectoryTree(event.getFile(), new FileUtils.VirtualFileProcessor(){
+ FileUtils.processDirectoryTree(event.getFile(), new FileUtils.VirtualFileProcessor() {
public void handleEntry(VirtualFile parent, VirtualFile file) {
- if (helper.isFileValid(file)){
+ if (helper.isFileValid(file)) {
log.info("beforeFileMovement: " + file + ", delete from index");
updatedTypes.addAll(deleteIndex(file, false));
}
@@ -380,9 +380,7 @@ public void handleEntry(VirtualFile parent, VirtualFile file) {
}
} else if (helper.isFileValid(event.getFile())) {
log.info("beforeFileMovement: " + event.getFile() + ", delete from index");
- Set<String> typesBeenDeleted = fsIndexer.deleteFile(event.getFile().getPath());
- int h = 0;
-// deleteIndex(event.getFile(), true);
+ deleteIndex(event.getFile(), true);
}
}
}
94 shared/root/java/core/com/deepsky/lang/integration/PlSqlFileChangeTracker.java
View
@@ -28,7 +28,6 @@
import com.deepsky.database.ora.DbUrl;
import com.deepsky.lang.common.PlSqlFile;
import com.deepsky.lang.plsql.completion.Constants;
-import com.deepsky.lang.plsql.indexMan.IndexBulkChangeListener;
import com.deepsky.lang.plsql.resolver.index.IndexTree;
import com.deepsky.lang.plsql.resolver.psibased.NamesIndexerSpecific;
import com.deepsky.lang.plsql.resolver.psibased.NamesIndexerWithChangesCollecting;
@@ -37,10 +36,10 @@
import com.deepsky.lang.plsql.sqlIndex.AbstractSchema;
import com.deepsky.lang.plsql.sqlIndex.IndexManager;
import com.deepsky.lang.plsql.sqlIndex.SqlFile;
-import com.deepsky.lang.plsql.sqlIndex.WordIndexChangeListener;
+import com.deepsky.lang.plsql.struct.DbObject;
import com.deepsky.lang.plsql.workarounds.LoggerProxy;
+import com.intellij.openapi.project.Project;
import com.intellij.openapi.vfs.VirtualFile;
-import com.intellij.util.messages.MessageBus;
import java.util.Arrays;
import java.util.Set;
@@ -50,6 +49,7 @@
private static final LoggerProxy log = LoggerProxy.getInstance("#PlSqlFileChangeTracker");
long lastModCounter = -1;
+
public void indexPlSqlFile(PlSqlFile plSqlFile) {
PlSqlFile actualPlSqFile = (PlSqlFile) plSqlFile.getOriginalFile();
@@ -59,50 +59,60 @@ public void indexPlSqlFile(PlSqlFile plSqlFile) {
// 1. pooling changes from DB
// 2. updating db cache
// 3. updating index
-// todo -- make changes in the DB schema also -
+ // todo -- make changes in the DB schema also -
if (IndexManager.FS_URL.equals(actualPlSqFile.getDbUrl())) {
// todo -- is there direct call to FSIndexer.indexPlSqlFIle(...) needed?
AbstractSchema sindex = actualPlSqFile.getResolver().getSimpleIndex();
DbUrl dbUrl = sindex.getDbUrl();
IndexTree itree = sindex.getIndexTree();
-
+ final Project project = actualPlSqFile.getProject();
long ms = System.currentTimeMillis();
- // check whether parsing called on non-physical copy of a file
- VirtualFile vf = actualPlSqFile.getVirtualFile();
- long h =0;
- if(actualPlSqFile == plSqlFile){
- if(true){ //vf == null || lastModCounter != vf.getModificationCount()){
- lastModCounter = vf!=null? vf.getModificationCount(): lastModCounter;
- String filePath = getFilePath(vf);
- Set<String> types = IndexTreeUtil.getTypesInFile(itree, filePath);
+ // check whether parsing called on non-physical copy of a file
- itree.remove(actualPlSqFile.getCtxPath1().getPath());
- NamesIndexerWithChangesCollecting indexer = new NamesIndexerWithChangesCollecting();
+ long h = 0;
+ if (actualPlSqFile == plSqlFile) {
+ final VirtualFile vf = actualPlSqFile.getVirtualFile();
+ lastModCounter = vf != null ? vf.getModificationCount() : lastModCounter;
+ String filePath = getFilePath(vf);
+ Set<String> types = IndexTreeUtil.getTypesInFile(itree, filePath);
+ // todo FUNCTION vs FUNCTION BODY, see below
+ boolean res = itree.remove(actualPlSqFile.getCtxPath1().getPath());
+ NamesIndexerWithChangesCollecting indexer = new NamesIndexerWithChangesCollecting();
- indexer.parse(plSqlFile.getNode(), itree);
+ indexer.parse(plSqlFile.getNode(), itree);
- // todo -- not correct for non FS files
- itree.setFileAttribute(filePath, "timestamp", Long.toString(vf.getModificationCount()));
- itree.setFileAttribute(filePath, "mod_cnt", Long.toString(vf.getModificationStamp()));
+ // todo -- not correct for non FS files
+ itree.setFileAttribute(filePath, "timestamp", Long.toString(vf.getModificationCount()));
+ itree.setFileAttribute(filePath, "mod_cnt", Long.toString(vf.getModificationStamp()));
- ms = System.currentTimeMillis() - ms;
+ ms = System.currentTimeMillis() - ms;
- h = System.currentTimeMillis();
- types.addAll(Arrays.asList(indexer.getUpdatedTypes()));
- MessageBus bus1 = actualPlSqFile.getProject().getMessageBus();
- if (types.size() > 0) {
- bus1.syncPublisher(IndexBulkChangeListener.TOPIC).handleUpdate(dbUrl, types.toArray(new String[types.size()]));
- }
+ h = System.currentTimeMillis();
+ types.addAll(Arrays.asList(indexer.getUpdatedTypes()));
- bus1.asyncPublisher(WordIndexChangeListener.TOPIC).handleUpdate(dbUrl, filePath);
- }
+ CodeChangeEventAggregator.getInstance(project).updateIndex(dbUrl, types);
+ CodeChangeEventAggregator.getInstance(project).updateWordIndex(dbUrl, filePath);
} else {
// make sure completion patch was applied
- if(Constants.IDENT_PATCHER.wasPatched()){
+ if (Constants.IDENT_PATCHER.wasPatched()) {
// Completion request
- new NamesIndexerSpecific().parse(plSqlFile.getNode(), itree);
+ // NOTE: there is a need to reset caches because of IDEA's caching mechanism for PsiFile
+ plSqlFile.resetCaches();
+ final VirtualFile vf = plSqlFile.getVirtualFile();
+ final String filePath = getFilePath(vf);
+ Set<String> types = IndexTreeUtil.getTypesInFile(itree, filePath);
+
+ // todo FUNCTION vs FUNCTION BODY, see below
+ boolean res = itree.remove(plSqlFile.getCtxPath1().getPath());
+
+ NamesIndexerWithChangesCollecting indexer = new NamesIndexerSpecific();
+ indexer.parse(plSqlFile.getNode(), itree);
+ types.addAll(Arrays.asList(indexer.getUpdatedTypes()));
+
+ CodeChangeEventAggregator.getInstance(project).updateIndex(dbUrl, types);
+ CodeChangeEventAggregator.getInstance(project).updateWordIndex(dbUrl, filePath);
Constants.IDENT_PATCHER.cleanSignal();
}
h = System.currentTimeMillis();
@@ -124,4 +134,28 @@ private static String getFilePath(VirtualFile vf) {
}
}
+ /**
+ * Delete file from the index and return types in the file
+ *
+ * @param path
+ * @param itree
+ * @return
+ */
+ public Set<String> deleteFile(String path, IndexTree itree) {
+ Set<String> types = IndexTreeUtil.getTypesInFile(itree, path);
+ String ctxPath = ContextPathUtil.encodeFilePathCtx(path);
+ itree.remove(ctxPath);
+
+ // replace FUNCTION_BODY with FUNCTION, PROCEDURE_BODY with PROCEDURE (if that is a case)
+ if (types.remove(DbObject.FUNCTION_BODY)) {
+ types.add(DbObject.FUNCTION);
+ }
+ if (types.remove(DbObject.PROCEDURE_BODY)) {
+ types.add(DbObject.PROCEDURE);
+ }
+
+ return types;
+ }
+
+
}
15 shared/root/java/core/com/deepsky/lang/plsql/indexMan/FSIndexer.java
View
@@ -58,9 +58,9 @@ public FSIndexer(Project project, SqlDomainIndex sqlIndex) {
}
- public IndexUpdater getUpdater() {
- return new IndexUpdaterImpl();
- }
+// public IndexUpdater getUpdater() {
+// return new IndexUpdaterImpl();
+// }
public void indexPlSqlFile(PlSqlElement file, DbTypeChangeListener listener) {
NamesIndexerWithChangesCollecting indexer = new NamesIndexerWithChangesCollecting();
@@ -75,7 +75,7 @@ public void indexPlSqlFile(PlSqlElement file, DbTypeChangeListener listener) {
}
Set<String> types = IndexTreeUtil.getTypesInFile(itree, vf.getPath());
- itree.remove(file.getCtxPath1().getPath());
+// itree.remove(file.getCtxPath1().getPath());
indexer.parse(file.getNode(), itree);
setFileTimestamp(vf.getPath(), vf.getModificationCount(), vf.getModificationStamp());
@@ -86,9 +86,6 @@ public void indexPlSqlFile(PlSqlElement file, DbTypeChangeListener listener) {
// notify about types have been updated
listener.handleUpdatedTypes(types.toArray(new String[types.size()]));
-// MessageBus bus1 = project.getMessageBus();
-// bus1.asyncPublisher(WordIndexChangeListener.TOPIC).handleUpdate(IndexManager.FS_URL, filePath);
-
log.info("INDEXING entries: " + sizeAfter + " time spent: " + ms);
}
@@ -172,6 +169,7 @@ public void stop() {
* @param newModificationStamp
* @return
*/
+/*
public Set<String> moveFile(File oldF, File newF, long newModificationStamp) {
Set<String> types = IndexTreeUtil.getTypesInFile(itree, oldF.getPath());
// String oldCtxPath = ContextPathUtil.encodeFilePathCtx(oldF.getPath());
@@ -181,8 +179,10 @@ public void stop() {
return types;
}
+*/
+/*
private class IndexUpdaterImpl implements IndexUpdater {
public long getFileTimestamp(String path) {
@@ -201,5 +201,6 @@ public void completeUpdate(DbTypeChangeListener listener) {
//To change body of implemented methods use File | Settings | File Templates.
}
}
+*/
}
7 shared/root/java/core/com/deepsky/lang/plsql/indexMan/IndexManagerImpl.java
View
@@ -74,7 +74,6 @@ public IndexManagerImpl(@NotNull Project project) {
WordIndexChangeListener ll = new WordIndexChangeListener() {
public void handleUpdate(DbUrl source, String path) {
addItem(source, path);
- //System.out.println("Request to index: " + path);
}
};
@@ -475,15 +474,11 @@ public void run() {
continue;
}
- SqlDomainIndex index = uid2index.get(DbUID.getDbUID(item.dbUrl).key()); //item.dbUrl.getUserHostPortServiceName().toLowerCase());
-// SqlDomainIndex index = uid2index.get(item.dbUrl.getUserHostPortServiceName().toLowerCase());
+ SqlDomainIndex index = uid2index.get(DbUID.getDbUID(item.dbUrl).key());
AbstractSchema sindex = index.getSimpleIndex(item.dbUrl.getUser().toLowerCase());
sindex.getWordIndexManager().updateIndexForFile(item.filePath);
}
- if(set.size() > 0){
- System.out.println("Indexed files:: " + set.size());
- }
try {
synch.wait(timeout);
} catch (InterruptedException e) {
79 shared/root/java/core/com/deepsky/lang/plsql/psi/impl/PlSqlElementBase.java
View
@@ -49,15 +49,12 @@
public class PlSqlElementBase extends ASTWrapperPsiElement implements PlSqlElement {
- // private final Logger log = Logger.getInstance("#PlSqlElementBase");
protected ResolveFacade facade;
-
public PlSqlElementBase(ASTNode astNode) {
super(astNode);
}
-
final protected void __ensure_resolver_available__() {
if (facade == null) {
facade = ((ResolveProvider) getContainingFile()).getResolver();
@@ -108,38 +105,12 @@ public String getQuickNavigateInfo() {
public String getStrippedText() {
// todo -- resolve stuff refactoring
throw new NotSupportedException();
-// return PsiTreeHelpers.stripText(this.getText()).trim();
}
public void process(Visitor proc) {
// todo -
}
-
-/*
- protected PlSqlElement getUsageContext(final TokenSet set) {
- // [start] search definition context --------------------
- final PlSqlElement[] elem = new PlSqlElement[1];
- ASTTreeProcessor runner = new ASTTreeProcessor();
- runner.add(new ASTNodeHandler() {
- @NotNull
- public TokenSet getTokenSet() {
- return set;
- }
-
- public boolean handleNode(@NotNull ASTNode node) {
- elem[0] = (PlSqlElement) node.getPsi();
- return false;
- }
- });
- runner.process(getNode());
- // [end] search definition context ------------------------
-
- return elem[0];
- }
-*/
-
-
public <T> T findParent(Class clazz) {
ASTNode n = getNode();
while (n != null) {
@@ -170,56 +141,6 @@ final protected void __ASSERT_NOT_NULL__(Object o) {
}
}
-// public void accept(@NotNull PsiElementVisitor visitor) {
-// if (visitor instanceof PlSqlElementVisitor) {
-// ((PlSqlElementVisitor) visitor).visitPlSqlElement(this);
-// } else {
-// super.accept(visitor);
-// }
-// }
-
-/*
- static private TokenSet CONTEXT = TokenSet.create(
- PlSqlElementTypes.PACKAGE_BODY,
- PlSqlElementTypes.PACKAGE_SPEC,
- PlSqlElementTypes.CREATE_TRIGGER,
- PlSqlElementTypes.FUNCTION_BODY,
- PlSqlElementTypes.PROCEDURE_BODY
- );
-
-
- @NotNull
- public UsageContext getUsageContext() {
-
- final UsageContextImpl usage = new UsageContextImpl();
- ASTTreeProcessor runner = new ASTTreeProcessor();
- runner.add(new ASTNodeHandler() {
- @NotNull
- public TokenSet getTokenSet() {
- return CONTEXT;
- }
-
- public boolean handleNode(@NotNull ASTNode node) {
- if (node.getElementType() == PlSqlElementTypes.PACKAGE_BODY) {
- usage.setPackageBody((PackageBody) node.getPsi());
- } else if (node.getElementType() == PlSqlElementTypes.PACKAGE_SPEC) {
- usage.setPackageSpec((PackageSpec) node.getPsi());
- } else if (node.getElementType() == PlSqlElementTypes.CREATE_TRIGGER) {
- usage.setTrigger((CreateTrigger) node.getPsi());
- } else if (node.getElementType() == PlSqlElementTypes.FUNCTION_BODY) {
- usage.setFunctionBody((Function) node.getPsi());
- } else if (node.getElementType() == PlSqlElementTypes.PROCEDURE_BODY) {
- usage.setProcedureBody((Procedure) node.getPsi());
- }
- return false;
- }
- });
-
- runner.process(getNode());
- return usage;
- }
-*/
-
final public CtxPath getCtxPath1() {
//return ((CompositeElementExt) getNode()).getCtxPath1();
return ContextPathManager.getCtxPath(getNode());
10 shared/root/java/core/com/deepsky/lang/plsql/sqlIndex/impl/WordIndexManagerImpl.java
View
@@ -51,17 +51,11 @@
final private static int WIDX_MASK = 0xF;
File indexHomeDir;
- //SqlDomainIndex sqlIndex;
AbstractSchema sindex;
-// public WordIndexManagerImpl(File indexHomeDir) {
-// this.indexHomeDir = indexHomeDir;
-// }
-
- public WordIndexManagerImpl(AbstractSchema sindex){ //SqlDomainIndex sqlIndex) {
-// this.sqlIndex = sqlIndex;
+ public WordIndexManagerImpl(AbstractSchema sindex){
this.sindex = sindex;
- this.indexHomeDir = new File(sindex.getIndexPath()); //sqlIndex.getIndexHomeDir();
+ this.indexHomeDir = new File(sindex.getIndexPath());
}
public void updateIndexForFile(String filePath) {
7 shared/root/java/db_browser/com/deepsky/view/schema_pane/tree/DbBrowserToolWindowComponent.java
View
@@ -42,9 +42,8 @@
public class DbBrowserToolWindowComponent implements ProjectComponent {
- static private final String componentName = "DbBrowserToolWindowComponent";
-
- public static final String DB_BROWSER_PANE = "DatabaseBrowser";
+ static private final String COMPONENT_NAME = "DbBrowserToolWindowComponent";
+ static public final String DB_BROWSER_PANE = "DatabaseBrowser";
private Project project;
private int splitDividerLocation;
@@ -161,7 +160,7 @@ public void disposeComponent() {
@NotNull
public String getComponentName() {
- return componentName;
+ return COMPONENT_NAME;
}
private class DbObjectTreeManager implements Runnable {
6 shared/root/java/resolver/com/deepsky/lang/plsql/resolver/index/IndexTreeBase.java
View
@@ -1231,7 +1231,7 @@ public boolean remove(String ctxPath) {
FileEntitiesHolder fileHolder = files.remove(fileName);
if (fileHolder != null) {
fileHolder.removeChildren();
- result = true; //root.removeNodeByEncodedName(fileHolder.node.getName());
+ result = true;
}
break;
default:
@@ -1559,6 +1559,10 @@ public void removeNodeByEncodedName(TreeNodeTop[] toDelete) {
iterator.remove();
}
}
+ // todo -- do we need "remove" above and "put" below if lst.size()> 0
+ if(lst.size()==0){
+ root.childs.remove(name);
+ }
}
}
}
3  shared/root/java/resolver/com/deepsky/lang/plsql/resolver/psibased/NamesIndexer.java
View
@@ -550,7 +550,7 @@ public void visitCreateView(CreateView view) {
public void visitCreateViewColumnDefInternal(CreateViewColumnDefInternal node) {
- // todo -- subject to revise - it is expected view will be indexed befor indexing of the view_internal
+ // todo -- subject to revise - it is expected view will be indexed before indexing of the view_internal
String name = ContextPathUtil.extractLastCtxName(node.getCtxPath1().getPath());
ContextItem[] items = itree.findCtxItems(new int[]{ContextPath.VIEW_DEF}, name); //[0].getCtxPath()
if(items.length == 1){
@@ -600,7 +600,6 @@ private String encodeSelectFieldList(SelectFieldCommon[] fields) {
return b.toString();
}
-// }
private class ArgumentSpecImpl implements ArgumentSpec {
20 shared/root/java/resolver/com/deepsky/lang/plsql/resolver/psibased/NamesIndexerSpecific.java
View
@@ -27,12 +27,13 @@
import com.deepsky.lang.plsql.SyntaxTreeCorruptedException;
import com.deepsky.lang.plsql.completion.Constants;
+import com.deepsky.lang.plsql.resolver.utils.ContextPathUtil;
import com.deepsky.lang.plsql.resolver.utils.PsiElementUtil;
import com.deepsky.lang.validation.ValidationException;
import com.intellij.psi.PsiElement;
import com.intellij.psi.tree.IElementType;
-public class NamesIndexerSpecific extends NamesIndexer {
+public class NamesIndexerSpecific extends NamesIndexerWithChangesCollecting {
final private String COMPL_IDENTIFIER_ADOPTED = Constants.COMPL_IDENTIFIER.toLowerCase();
public void visitElement(PsiElement element) {
@@ -60,8 +61,21 @@ public void visitElement(PsiElement element) {
// small trick, do not index entities which contains completion identifier
protected void saveCtxValue(String ctxPath, String value){
- if(ctxPath.contains(COMPL_IDENTIFIER_ADOPTED)){
- throw new CompletionDummyIdent();
+ int start = ctxPath.indexOf(COMPL_IDENTIFIER_ADOPTED);
+ if(start != -1){
+ ContextPathUtil.CtxPathIterator ite = new ContextPathUtil.CtxPathIterator(ctxPath);
+ // if the name of the path is COMPL_IDENTIFIER_ADOPTED (i.e. completion started on ws),
+ // then exclude this element from indexing, otherwise find actual name of the path
+ while(ite.next()){
+ String name = ite.getName();
+ if(name.contains(COMPL_IDENTIFIER_ADOPTED))
+ if(name.length() == COMPL_IDENTIFIER_ADOPTED.length()){
+ throw new CompletionDummyIdent();
+ } else {
+ break;
+ }
+ }
+ ctxPath = ctxPath.substring(0, start) + ctxPath.substring(start+COMPL_IDENTIFIER_ADOPTED.length());
}
itree.addContextPath(ctxPath, value);
}
9 sqlassistant-plugin10/SqlAssistantPlugin/META-INF/plugin.xml
View
@@ -190,6 +190,8 @@
<projectService serviceInterface="com.deepsky.settings.SqlCodeAssistantSettings"
serviceImplementation="com.deepsky.settings.SqlCodeAssistantSettings"/>
+ <projectService serviceInterface="com.deepsky.lang.integration.CodeChangeEventAggregator"
+ serviceImplementation="com.deepsky.lang.integration.CodeChangeEventAggregator"/>
</extensions>
<project-components>
@@ -214,13 +216,6 @@
<component>
<implementation-class>com.deepsky.findUsages.converter.UsageConverter</implementation-class>
</component>
-
- <!--
- <component>
- <interface-class>com.intellij.openapi.fileEditor.impl.text.TextEditorProvider</interface-class>
- <implementation-class>com.intellij.lang.impl.PsiAwareTextEditorProvider777</implementation-class>
- </component>
--->
</application-components>
<!-- Component's actions -->
2  sqlassistant-plugin11/SqlAssistantPlugin/META-INF/plugin.xml
View
@@ -190,6 +190,8 @@
<projectService serviceInterface="com.deepsky.settings.SqlCodeAssistantSettings"
serviceImplementation="com.deepsky.settings.SqlCodeAssistantSettings"/>
+ <projectService serviceInterface="com.deepsky.lang.integration.CodeChangeEventAggregator"
+ serviceImplementation="com.deepsky.lang.integration.CodeChangeEventAggregator"/>
</extensions>
<project-components>
2  sqlassistant-plugin11/SqlAssistantPlugin/SqlAssistantPlugin.iml
View
@@ -25,7 +25,7 @@
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/spec_src" isTestSource="false" />
</content>
- <orderEntry type="jdk" jdkName="IDEA IC-107.587" jdkType="IDEA JDK" />
+ <orderEntry type="jdk" jdkName="IDEA IC-110.291" jdkType="IDEA JDK" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="module-library">
<library>
12 sqlassistant-plugin11/sqlassistant-11.ipr
View
@@ -689,6 +689,11 @@
<option name="projectName" value="sqlassistant-0.9.1" />
</component>
<component name="ProjectDictionaryState">
+ <dictionary name="serhiy.kulyk">
+ <words>
+ <w>quering</w>
+ </words>
+ </dictionary>
<dictionary name="sky">
<words>
<w>accessor</w>
@@ -696,11 +701,6 @@
<w>jdbc</w>
</words>
</dictionary>
- <dictionary name="serhiy.kulyk">
- <words>
- <w>quering</w>
- </words>
- </dictionary>
</component>
<component name="ProjectKey">
<option name="state" value="project://C:\projects8.0\sqlassistant-plugin\sqlassistant-0.9.1.ipr" />
@@ -713,7 +713,7 @@
<component name="ProjectResources">
<default-html-doctype>http://www.w3.org/1999/xhtml</default-html-doctype>
</component>
- <component name="ProjectRootManager" version="2" languageLevel="JDK_1_5" assert-keyword="true" jdk-15="true" project-jdk-name="IDEA IC-107.587" project-jdk-type="IDEA JDK">
+ <component name="ProjectRootManager" version="2" languageLevel="JDK_1_5" assert-keyword="true" jdk-15="true" project-jdk-name="IDEA IC-110.291" project-jdk-type="IDEA JDK">
<output url="file://$PROJECT_DIR$/out" />
</component>
<component name="ResourceManagerContainer">
948 sqlassistant-plugin11/sqlassistant-11.iws
View
171 additions, 777 deletions not shown
Please sign in to comment.
Something went wrong with that request. Please try again.