From: Marcelo V. <va...@us...> - 2012-03-12 04:27:29
|
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "The LazyImporter plugin: utilities to manage java import statements.". The branch, master has been created at eaa766e878838efb442bf5d5deda0df08531d61b (commit) - Log ----------------------------------------------------------------- commit: http://jedit.git.sourceforge.net/git/gitweb.cgi?p=jedit/LazyImporter;a=commit;h=eaa766e878838efb442bf5d5deda0df08531d61b commitdiff: http://jedit.git.sourceforge.net/git/gitweb.cgi?p=jedit/LazyImporter;a=commitdiff;h=eaa766e878838efb442bf5d5deda0df08531d61b tree: http://jedit.git.sourceforge.net/git/gitweb.cgi?p=jedit/LazyImporter;a=tree;h=eaa766e878838efb442bf5d5deda0df08531d61b;hb=eaa766e878838efb442bf5d5deda0df08531d61b commit eaa766e878838efb442bf5d5deda0df08531d61b Author: Marcelo Vanzin <va...@us...> Date: Mon Feb 27 21:30:37 2012 -0800 Move the props file, tweak properties. . require modern Java and jEdit (not that the source needs it) . bump version diff --git a/src/LazyImporter.props b/LazyImporter.props similarity index 99% rename from src/LazyImporter.props rename to LazyImporter.props index 15830bd..d073bac 100644 --- a/src/LazyImporter.props +++ b/LazyImporter.props @@ -4,10 +4,10 @@ # general plugin information plugin.org.etheridge.lazyimporter.LazyImporterPlugin.name=LazyImporter plugin.org.etheridge.lazyimporter.LazyImporterPlugin.author=Matt Etheridge -plugin.org.etheridge.lazyimporter.LazyImporterPlugin.version=1.08 +plugin.org.etheridge.lazyimporter.LazyImporterPlugin.version=2.0 plugin.org.etheridge.lazyimporter.LazyImporterPlugin.docs=LazyImporter.html -plugin.org.etheridge.lazyimporter.LazyImporterPlugin.depend.0=jdk 1.4 -plugin.org.etheridge.lazyimporter.LazyImporterPlugin.depend.1=jedit 04.03.03.00 +plugin.org.etheridge.lazyimporter.LazyImporterPlugin.depend.0=jdk 1.6 +plugin.org.etheridge.lazyimporter.LazyImporterPlugin.depend.1=jedit 04.05.99.00 # action labels lazyimporter.resolve-package-imports.label=Resolve Wildcard Imports commit: http://jedit.git.sourceforge.net/git/gitweb.cgi?p=jedit/LazyImporter;a=commit;h=3f536f740c5b5b0664e0dac1c659c845239d45fc commitdiff: http://jedit.git.sourceforge.net/git/gitweb.cgi?p=jedit/LazyImporter;a=commitdiff;h=3f536f740c5b5b0664e0dac1c659c845239d45fc tree: http://jedit.git.sourceforge.net/git/gitweb.cgi?p=jedit/LazyImporter;a=tree;h=3f536f740c5b5b0664e0dac1c659c845239d45fc;hb=3f536f740c5b5b0664e0dac1c659c845239d45fc commit 3f536f740c5b5b0664e0dac1c659c845239d45fc Author: Marcelo Vanzin <va...@us...> Date: Thu Feb 23 22:22:22 2012 -0800 Make the parser recognize generics, annotations and enums. This seems to do the trick. Simple testing shows that using generics and annotations now don't cause the imports to be removed. diff --git a/src/org/etheridge/lazyimporter/importer/JavaClass.java b/src/org/etheridge/lazyimporter/importer/JavaClass.java index f076fd7..7bd3f12 100644 --- a/src/org/etheridge/lazyimporter/importer/JavaClass.java +++ b/src/org/etheridge/lazyimporter/importer/JavaClass.java @@ -80,11 +80,11 @@ public class JavaClass private static final String msPackageStatementRegularExpression = "^\\s*package\\s*" + msJavaFqdn + ";"; private static final String msClassNameRegularExpression - = "\\s*(class|interface|@interface)\\s+\\D\\w*"; + = "\\s*(class|interface|@interface|enum)\\s+\\D\\w*"; // static strings - private static String msValidPreClassCharacters = "\t() \n,!"; - private static String msValidPostClassCharacters = "\t)( .\n[,;"; + private static String msValidPreClassCharacters = "\t() \n,!<@"; + private static String msValidPostClassCharacters = "\t)( .\n[,;<"; public JavaClass(String classText) { commit: http://jedit.git.sourceforge.net/git/gitweb.cgi?p=jedit/LazyImporter;a=commit;h=fac47dda85f74de11bb41e2c8471a7a86171e727 commitdiff: http://jedit.git.sourceforge.net/git/gitweb.cgi?p=jedit/LazyImporter;a=commitdiff;h=fac47dda85f74de11bb41e2c8471a7a86171e727 tree: http://jedit.git.sourceforge.net/git/gitweb.cgi?p=jedit/LazyImporter;a=tree;h=fac47dda85f74de11bb41e2c8471a7a86171e727;hb=fac47dda85f74de11bb41e2c8471a7a86171e727 commit fac47dda85f74de11bb41e2c8471a7a86171e727 Author: Marcelo Vanzin <va...@us...> Date: Thu Feb 23 22:18:29 2012 -0800 Use java.util.regex instead of GNU library. Seems to work just like before so far. diff --git a/src/org/etheridge/lazyimporter/importer/JavaClass.java b/src/org/etheridge/lazyimporter/importer/JavaClass.java index 3dee53f..f076fd7 100644 --- a/src/org/etheridge/lazyimporter/importer/JavaClass.java +++ b/src/org/etheridge/lazyimporter/importer/JavaClass.java @@ -1,18 +1,18 @@ /* - * LazyImporter jEdit Plugin (JavaClass.java) - * + * LazyImporter jEdit Plugin (JavaClass.java) + * * Copyright (C) 2003 Matt Etheridge (ma...@et...) * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. - * + * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. - * + * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. @@ -20,11 +20,6 @@ package org.etheridge.lazyimporter.importer; -import gnu.regexp.RE; -import gnu.regexp.REException; -import gnu.regexp.REMatch; -import gnu.regexp.RESyntax; - import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; @@ -33,6 +28,8 @@ import java.util.Iterator; import java.util.List; import java.util.Set; import java.util.StringTokenizer; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import org.etheridge.lazyimporter.classpath.ClassPath; import org.etheridge.lazyimporter.importer.ClassImportStatement; @@ -46,72 +43,74 @@ import org.etheridge.lazyimporter.utility.JavaUtilities; /** * This class represents a coded version of a Java Class (ie. the text that - * makes up a java class). + * makes up a java class). */ public class JavaClass { // the text of the class private String mClassText; - + // the text of the class without the comments private String mClassTextMinusComments; - + // this class's name private String mClassName; - + // list of import statements (ImportStatement objects) private List mImportStatements; - + // the set of classes explicity imported private Set mImportedClasses; - + // implicit import statement for this class, determined by the package // this class is in (ie. from the package statement). private PackageImportStatement mThisPackageImportStatement; - + // the ordering strategies - order of strategy is important! ;) private List mOrderingStrategies; - + // the drawing strategy private DrawingStrategy mDrawingStrategy; - + // regular expression strings - private static final String msAllImportsRegularExpression - = "import[ ]+[[:alpha:]][[:alnum:]_]*([\\.][[:alpha:]][[:alnum:]_]*)*(\\.\\*)?[ ]*;"; - private static final String msPackageStatementRegularExpression - = "[^][[:space:]]*package[[:space:]]+[[:alnum:].$_*]*;"; + private static final String msJavaFqdn + = "\\D\\w*(?:\\.\\D\\w*)*"; + private static final String msAllImportsRegularExpression + = "import\\s+" + msJavaFqdn + "(\\.\\*)?\\s*;"; + private static final String msPackageStatementRegularExpression + = "^\\s*package\\s*" + msJavaFqdn + ";"; private static final String msClassNameRegularExpression - = "[ ](class|interface)[ ]+[[:alpha:]][[:alnum:]_]*"; + = "\\s*(class|interface|@interface)\\s+\\D\\w*"; // static strings private static String msValidPreClassCharacters = "\t() \n,!"; private static String msValidPostClassCharacters = "\t)( .\n[,;"; - + public JavaClass(String classText) { mClassText = classText; mClassTextMinusComments = JavaUtilities.removeStringLiterals(JavaUtilities.stripJavaComments(classText)); - + // set the ordering strategy to be the default one mOrderingStrategies = new ArrayList(); mOrderingStrategies.add(new DefaultOrderingStrategy()); - + // set the drawing strategy to be the default one mDrawingStrategy = new DefaultDrawingStrategy(); - + // find and store this java classe's name findClassName(); } - + /** * @return the text of this class. - */ + */ public String getClassText() { return mClassText; } - - /** + + /** * @return this classes implicit package import statement. Returns null if * this class has no package statement. */ @@ -119,11 +118,11 @@ public class JavaClass { return mThisPackageImportStatement; } - + /** * Add the specified import to this java class. This will be added after * all other imports. - * + * * @param importStatement the import statement to add */ public void addImportStatement(ImportStatement importStatement) @@ -131,11 +130,11 @@ public class JavaClass if (mImportStatements == null) { findImports(); } - + // add it to the end addImportStatement(importStatement, -1); } - + /** * Adds the specified import statement, overwriting any existing import * statements that have the same class name. @@ -147,7 +146,7 @@ public class JavaClass if (mImportStatements == null) { findImports(); } - + // see if there are any existing import statements with the same class // name and remove it. if (importStatement instanceof ClassImportStatement) { @@ -160,26 +159,26 @@ public class JavaClass if (((ClassImportStatement)currentImportStatement).getClassName().equals(classImportStatement.getClassName())) { // remove from import statement list i.remove(); - + // remove from classes set mImportedClasses.remove(((ClassImportStatement)currentImportStatement).getClassName()); - + } } } } } - + // add it to the end addImportStatement(importStatement, -1); } - - - /** + + + /** * Sets the ordering strategies to be used to display the import statements. - * + * * @param orderingStrategies an array of ordering strategies to be used. The - * order of the strategies in the array defines the order in which the + * order of the strategies in the array defines the order in which the * ordering strategies are applied. (if that makes sense!) ;) */ public void setOrderingStrategies(OrderingStrategy[] orderingStrategies) @@ -187,17 +186,17 @@ public class JavaClass mOrderingStrategies.clear(); mOrderingStrategies.addAll(Arrays.asList(orderingStrategies)); } - + public List getOrderingStrategies() { return Collections.unmodifiableList(mOrderingStrategies); } - + public void setDrawingStrategy(DrawingStrategy drawingStrategy) { mDrawingStrategy = drawingStrategy; } - + /** * @return a list of all import statements of this class as they currently * stand. @@ -210,9 +209,9 @@ public class JavaClass } return Collections.unmodifiableList(mImportStatements); } - + /** - * Removes any unused imports from this java class. Subsequent calls to + * Removes any unused imports from this java class. Subsequent calls to * getImportStatements() will result in a list of ImportStatements that does * *NOT* contain any unused imports. */ @@ -222,7 +221,7 @@ public class JavaClass if (mImportStatements == null) { findImports(); } - + // iterate through import statements, and see if the class is actually used // in this java class code for (Iterator i = mImportStatements.iterator(); i.hasNext();) { @@ -236,31 +235,29 @@ public class JavaClass } } } - - /** + + /** * Gets the import statement at the specified position in this java class. * @return the import statement at the specified position in this java * class. */ public ImportStatement getImportStatementAtPosition(int position) { - try { - RE allImportsRegularExpression = new RE(msAllImportsRegularExpression, RE.REG_MULTILINE, RESyntax.RE_SYNTAX_POSIX_EXTENDED); - REMatch[] importMatches = allImportsRegularExpression.getAllMatches(mClassTextMinusComments); - for (int i = 0; i < importMatches.length; i++) { - int startIndex = importMatches[i].getStartIndex(); - int endIndex = importMatches[i].getEndIndex(); - if (position >= startIndex && position <= endIndex) { - String classImportStatement = mClassTextMinusComments.substring(startIndex, endIndex); - return ImportStatement.create(classImportStatement); - } - } - } catch (REException reException) { - reException.printStackTrace(); + Pattern allImportsRegularExpression = + Pattern.compile(msAllImportsRegularExpression, Pattern.MULTILINE); + + Matcher m = allImportsRegularExpression.matcher(mClassTextMinusComments); + while (m.find()) { + int startIndex = m.start(); + int endIndex = m.end(); + if (position >= startIndex && position <= endIndex) { + String classImportStatement = mClassTextMinusComments.substring(startIndex, endIndex); + return ImportStatement.create(classImportStatement); + } } return null; } - + /** * Converts all explicit imports to wildcard (package) imports. * @@ -272,7 +269,7 @@ public class JavaClass if (mImportStatements == null) { findImports(); } - + // iterate through all of the import statements, and convert any explicit // imports into wildcard imports. Set packagesImported = new HashSet(); @@ -280,25 +277,25 @@ public class JavaClass for (Iterator i = mImportStatements.iterator(); i.hasNext();) { ImportStatement currentImportStatement = (ImportStatement) i.next(); String currentPackageName = currentImportStatement.getPackageName(); - + // if this package hasn't been imported yet, add it if it's a wildcard // and change to a wildcard if it's explicit. if (!packagesImported.contains(currentPackageName)) { ImportStatement importStatementToAdd = currentImportStatement; if (currentImportStatement instanceof ClassImportStatement) { importStatementToAdd = ImportStatement.create(currentPackageName + ".*"); - } + } wildcardImportList.add(importStatementToAdd); packagesImported.add(currentPackageName); } } - + mImportStatements.clear(); mImportStatements.addAll(wildcardImportList); } - + /** - * Resolves any package (wildcard) import statements using the specified + * Resolves any package (wildcard) import statements using the specified * class path to search for classes. * * @param classPath this classpath is used to search for all classes within @@ -310,7 +307,7 @@ public class JavaClass if (mImportStatements == null) { findImports(); } - + // find all the fully qualified imports and add to list List fullyQualifiedImports = new ArrayList(); for (Iterator i = mImportStatements.iterator(); i.hasNext();) { @@ -319,17 +316,17 @@ public class JavaClass fullyQualifiedImports.add(importStatement); } } - + // for each of the package import statements attempt to resolve the classes List packageImportStatements = new ArrayList(mImportStatements); packageImportStatements.removeAll(fullyQualifiedImports); - + // if we want to resolve this packages imports explicitly then add them to // the list to the END of this list to resolve. if (resolveImportsInThisPackage && mThisPackageImportStatement != null) { packageImportStatements.add(mThisPackageImportStatement); } - + for (Iterator i = packageImportStatements.iterator(); i.hasNext();) { PackageImportStatement packageImportStatement = (PackageImportStatement) i.next(); String currentPackageString = packageImportStatement.getPackageName(); @@ -348,130 +345,132 @@ public class JavaClass } } } - + // remove the package import statement, as it is no longer required. mImportStatements.remove(packageImportStatement); } } } - + public void redrawImportStatements() { // lazily find imports if (mImportStatements == null) { findImports(); } - + // if there are no import statements to print, then just return if (mImportStatements == null) { return; } - + int firstImportStart = removeCurrentImports(); // reorder the list of according to the ordering strategies defined List reorderedImportStatements = new ArrayList(mImportStatements); for (Iterator i = mOrderingStrategies.iterator(); i.hasNext();) { - reorderedImportStatements = + reorderedImportStatements = ((OrderingStrategy)i.next()).orderImports(this, reorderedImportStatements); } - + // use drawing strategy to get visual representation of imports String drawnImports = mDrawingStrategy.drawImports(this, reorderedImportStatements); - + // redraw list of import statements StringBuffer buffer = new StringBuffer(mClassText); buffer.insert(firstImportStart, drawnImports); mClassText = buffer.toString(); - + StringBuffer minusCommentsBuffer = new StringBuffer(mClassTextMinusComments); minusCommentsBuffer.insert(firstImportStart, drawnImports); mClassTextMinusComments = minusCommentsBuffer.toString(); } - + // // private helper methods // private int removeCurrentImports() { - // if there is a current import statemetn, then this is where we will + // if there is a current import statemetn, then this is where we will // insert the new import statements. - try { - RE allImportsRegularExpression = new RE(msAllImportsRegularExpression, RE.REG_MULTILINE, RESyntax.RE_SYNTAX_POSIX_EXTENDED); - REMatch[] importMatches = allImportsRegularExpression.getAllMatches(mClassTextMinusComments); - if (importMatches.length > 0) { - int firstImportStart = importMatches[0].getStartIndex(); - int lastImportEnd = importMatches[importMatches.length - 1].getEndIndex(); - StringBuffer buffer = new StringBuffer(mClassText); - StringBuffer bufferMinusComments = new StringBuffer(mClassTextMinusComments); - mClassText = buffer.delete(firstImportStart, lastImportEnd).toString(); - mClassTextMinusComments = bufferMinusComments.delete(firstImportStart, lastImportEnd).toString(); - return firstImportStart; - } - - // otherwise look for package statement - RE packageStatementRegularExpression = new RE(msPackageStatementRegularExpression, RE.REG_MULTILINE, RESyntax.RE_SYNTAX_POSIX_EXTENDED); - REMatch packageMatch = packageStatementRegularExpression.getMatch(mClassTextMinusComments); - if (packageMatch != null) { - return packageMatch.getEndIndex() + 1; + Pattern allImportsRegularExpression = + Pattern.compile(msAllImportsRegularExpression, Pattern.MULTILINE); + Matcher m = allImportsRegularExpression.matcher(mClassTextMinusComments); + + int start = -1; + int end = -1; + while (m.find()) { + if (start == -1) { + start = m.start(); } - } catch (REException reException) { - // should never get here - reException.printStackTrace(); + end = m.end(); + } + + if (start != -1) { + StringBuffer buffer = new StringBuffer(mClassText); + StringBuffer bufferMinusComments = new StringBuffer(mClassTextMinusComments); + mClassText = buffer.delete(start, end).toString(); + mClassTextMinusComments = bufferMinusComments.delete(start, end).toString(); + return start; } - + + // otherwise look for package statement + Pattern packageStatementRegularExpression = + Pattern.compile(msPackageStatementRegularExpression, Pattern.MULTILINE); + m = packageStatementRegularExpression.matcher(mClassTextMinusComments); + if (m.find()) { + return m.end() + 1; + } + // if there is no imports or package statement, just return 0; (beginning) return 0; } - + private void findImports() { mImportStatements = new ArrayList(); mImportedClasses = new HashSet(); - - try { - // find all import statements - RE allImportsRegularExpression = new RE(msAllImportsRegularExpression, RE.REG_MULTILINE, RESyntax.RE_SYNTAX_POSIX_EXTENDED); - REMatch[] importMatches = allImportsRegularExpression.getAllMatches(mClassTextMinusComments); - for (int i = 0; i < importMatches.length; i++) { - int startIndex = importMatches[i].getStartIndex(); - int endIndex = importMatches[i].getEndIndex(); - String classImportStatement = mClassTextMinusComments.substring(startIndex, endIndex); - addImportStatement(ImportStatement.create(classImportStatement), -1); - } - - // find package statement (if it exists) - RE packageStatementRegularExpression = new RE(msPackageStatementRegularExpression, RE.REG_MULTILINE, RESyntax.RE_SYNTAX_POSIX_EXTENDED); - REMatch packageMatch = packageStatementRegularExpression.getMatch(mClassTextMinusComments); - if (packageMatch != null) { - int startIndex = packageMatch.getStartIndex(); - int endIndex = packageMatch.getEndIndex(); - String packageStatement = mClassTextMinusComments.substring(startIndex, endIndex); - mThisPackageImportStatement = - (PackageImportStatement) ImportStatement.create(packageStatement); - } - } catch (REException reException) { - // this should NEVER happen! - reException.printStackTrace(); + + // find all import statements + Pattern allImportsRegularExpression = + Pattern.compile(msAllImportsRegularExpression, Pattern.MULTILINE); + Matcher m = allImportsRegularExpression.matcher(mClassTextMinusComments); + while (m.find()) { + int startIndex = m.start(); + int endIndex = m.end(); + String classImportStatement = mClassTextMinusComments.substring(startIndex, endIndex); + addImportStatement(ImportStatement.create(classImportStatement), -1); + } + + // find package statement (if it exists) + Pattern packageStatementRegularExpression = + Pattern.compile(msPackageStatementRegularExpression, Pattern.MULTILINE); + m = packageStatementRegularExpression.matcher(mClassTextMinusComments); + if (m.find()) { + int startIndex = m.start(); + int endIndex = m.end(); + String packageStatement = mClassTextMinusComments.substring(startIndex, endIndex); + mThisPackageImportStatement = + (PackageImportStatement) ImportStatement.create(packageStatement); } } - + /** * @return whether or not the named class is found in this Java class code. - * + * * NOTE: this was implemented using a dynamic regular expression, however it * was WAY too slow! This may be uglier, but it is much quicker. */ public boolean findClassUsage(String className) { // if the class name we are looking for is the same as the current class, - // then just return false as we do *NOT* want to include an import + // then just return false as we do *NOT* want to include an import // statement for the current class. if (className.equals(mClassName)) { return false; } - + // tokenize on new lines StringTokenizer tokenizer = new StringTokenizer(mClassTextMinusComments, "\n"); while (tokenizer.hasMoreTokens()) { @@ -482,53 +481,53 @@ public class JavaClass while ((index = currentLine.indexOf(className)) >= 0) { boolean validPreClassCharacter = true; boolean validPostClassCharacter = true; - + // check pre classname character if not at the beginning of the line - if (index > 0) { + if (index > 0) { validPreClassCharacter = isValidPreClassCharacter(currentLine.charAt(index - 1)); - } - + } + // check post classname character if not at end of line if ((className.length() + index) < currentLine.length()) { - validPostClassCharacter = + validPostClassCharacter = isValidPostClassCharacter(currentLine.charAt(className.length() + index)); } - + if (validPreClassCharacter && validPostClassCharacter) { return true; } - + currentLine = currentLine.substring(index + 1); } } - + return false; } /** * @return whether the specified character can be before a valid class usage. - */ + */ private boolean isValidPreClassCharacter(char ch) { return msValidPreClassCharacters.indexOf(ch) >= 0; } - + /** * @return whether the specified character can be after a valid class usage. - */ + */ private boolean isValidPostClassCharacter(char ch) { return msValidPostClassCharacters.indexOf(ch) >= 0; } - + /** - * Adds an import statement to the list of import statements, making sure + * Adds an import statement to the list of import statements, making sure * any explicit class imports are not already imported. - * + * * @param importStatement the import statement to add. * @param index the index to add the import statement in. If this is -1, * the statement is added to the end of the import statement list. - */ + */ private void addImportStatement(ImportStatement importStatement, int index) { // if this is an implicit class import statement, only add it if the class @@ -538,17 +537,17 @@ public class JavaClass if (mImportedClasses.contains(className)) { return; } - + // if the class being added is actually an import statemetn for THIS class // then do not add it and return (as this causes compile errors in 1.4 onwards) if (isImportStatementForThisClass((ClassImportStatement)importStatement)) { return; } - + // add to set of implicity loaded classes mImportedClasses.add(className); } - + if (index != -1) { mImportStatements.add(index, importStatement); } else { @@ -561,29 +560,25 @@ public class JavaClass */ private void findClassName() { - try { - RE classRegularExpression = new RE(msClassNameRegularExpression, RE.REG_MULTILINE, RESyntax.RE_SYNTAX_POSIX_EXTENDED); - REMatch classMatch = classRegularExpression.getMatch(mClassTextMinusComments); - if (classMatch != null) { - int startIndex = classMatch.getStartIndex(); - int endIndex = classMatch.getEndIndex(); - String classStatement = mClassTextMinusComments.substring(startIndex, endIndex); - - // if this is a class then remove the class from teh string - if (classStatement.indexOf("class") >= 0) { - int classKeywordIndex = classStatement.indexOf("class"); - mClassName = classStatement.substring(classKeywordIndex + 5).trim(); - } else { // must be an interface, so remove interface - hasty assumption? - int classKeywordIndex = classStatement.indexOf("interface"); - mClassName = classStatement.substring(classKeywordIndex + 9).trim(); - } + Pattern classRegularExpression = + Pattern.compile(msClassNameRegularExpression, Pattern.MULTILINE); + Matcher m = classRegularExpression.matcher(mClassTextMinusComments); + if (m.find()) { + int startIndex = m.start(); + int endIndex = m.end(); + String classStatement = mClassTextMinusComments.substring(startIndex, endIndex); + + // if this is a class then remove the class from teh string + if (classStatement.indexOf("class") >= 0) { + int classKeywordIndex = classStatement.indexOf("class"); + mClassName = classStatement.substring(classKeywordIndex + 5).trim(); + } else { // must be an interface, so remove interface - hasty assumption? + int classKeywordIndex = classStatement.indexOf("interface"); + mClassName = classStatement.substring(classKeywordIndex + 9).trim(); } - } catch (REException reException) { - // this shouldn't happen, so just print the stack trace - reException.printStackTrace(); } } - + /** * @return whether or not the specified import statement is an import * statement for this class! @@ -593,15 +588,15 @@ public class JavaClass if (mThisPackageImportStatement == null) { return false; } - + String thisClassesPackage = mThisPackageImportStatement.getPackageName(); String comparePackage = classImportStatement.getPackageName(); - + // if the packages are not the same, then there is no way this is a match if (!comparePackage.equals(thisClassesPackage)) { return false; } - + // packages must be the same, so see if the classes are the same return (mClassName.equals(classImportStatement.getClassName())); } commit: http://jedit.git.sourceforge.net/git/gitweb.cgi?p=jedit/LazyImporter;a=commit;h=d6869627631c4b9875da116aa12efea80f14befc commitdiff: http://jedit.git.sourceforge.net/git/gitweb.cgi?p=jedit/LazyImporter;a=commitdiff;h=d6869627631c4b9875da116aa12efea80f14befc tree: http://jedit.git.sourceforge.net/git/gitweb.cgi?p=jedit/LazyImporter;a=tree;h=d6869627631c4b9875da116aa12efea80f14befc;hb=d6869627631c4b9875da116aa12efea80f14befc commit d6869627631c4b9875da116aa12efea80f14befc Author: Marcelo Vanzin <va...@us...> Date: Thu Feb 23 21:54:38 2012 -0800 Fixes to make plugin build in current environment. . use the shared build file infrastructure . move actions.xml so the build file picks it up . add .gitignore file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..567609b --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +build/ diff --git a/src/actions.xml b/actions.xml similarity index 100% rename from src/actions.xml rename to actions.xml diff --git a/build.xml b/build.xml index ff7ebc5..61dba78 100644 --- a/build.xml +++ b/build.xml @@ -6,67 +6,22 @@ --> <project name="LazyImporter" default="dist" basedir="."> - <!-- properties --> - <property name="jedit.install.dir" value="../.."/> - <property name="jar.name" value="${ant.project.name}.jar"/> - <property name="src.dir" value="src"/> - <property name="build.dir" value="build"/> - <property name="install.dir" value=".."/> - <property name="docs.dir" value="docs"/> - - <!-- define the class path --> - <path id="project.class.path"> - <pathelement location="${jedit.install.dir}/jedit.jar"/> - <pathelement location="${src.dir}"/> - </path> + <property file="build.properties" /> + <property file="../build.properties" /> - <target name="init"> - <mkdir dir="${build.dir}"/> - </target> + <!-- You should set this property in your build.properties to + the location of the jedit "build-support/trunk" project + checked out from jEdit's SVN repository --> + <property name="build.support" value="../build-support" /> - <target name="compile" depends="init"> - <javac srcdir="${src.dir}" destdir="${build.dir}" deprecation="on" includeJavaRuntime="yes"> - <classpath refid="project.class.path"/> - </javac> - </target> - - <target name="dist" depends="compile"> - - <!-- create installation directory --> - <mkdir dir="${install.dir}"/> - - <!-- create jar file --> - <jar jarfile="${install.dir}/${jar.name}"> - - <!-- add compiled classes to jar --> - <fileset dir="${build.dir}"/> - - <!-- add any required files from the source directory (not java files) --> - <fileset dir="${src.dir}"> - <include name="actions.xml"/> - <include name="**/*.props"/> - <include name="**/*.html"/> - <include name="**/*.jpg"/> - </fileset> - - <!-- add any documentation --> - <fileset dir="${docs.dir}"> - <include name="**/*.xml"/> - <include name="**/*.props"/> - <include name="**/*.html"/> - <include name="**/*.gif"/> - <include name="**/*.jpg"/> - </fileset> - - </jar> - </target> - - <!-- cleans build directory --> - <target name="clean"> - <delete dir="${build.dir}"/> - <delete> - <fileset dir="." includes="**/*~" defaultexcludes="no"/> - </delete> - </target> + <property name="dist.target" value="build" /> + <property name="compiler.source" value="1.6" /> + <property name="compiler.target" value="1.6" /> + <property name="jedit.plugins.dir" value="${install.dir}" /> + <import file="${build.support}/plugin-build.xml" /> + + <selector id="compileFiles"> + <filename name="src/**/*.java" /> + </selector> </project> commit: http://jedit.git.sourceforge.net/git/gitweb.cgi?p=jedit/LazyImporter;a=commit;h=bf8f3b7a3df1b467bd8a10daebe03c6da2166c93 commitdiff: http://jedit.git.sourceforge.net/git/gitweb.cgi?p=jedit/LazyImporter;a=commitdiff;h=bf8f3b7a3df1b467bd8a10daebe03c6da2166c93 tree: http://jedit.git.sourceforge.net/git/gitweb.cgi?p=jedit/LazyImporter;a=tree;h=bf8f3b7a3df1b467bd8a10daebe03c6da2166c93;hb=bf8f3b7a3df1b467bd8a10daebe03c6da2166c93 commit bf8f3b7a3df1b467bd8a10daebe03c6da2166c93 Author: jchoyt <jchoyt> Date: Wed Feb 8 13:44:27 2006 +0000 fixes for JEditTextArea refactoring in 4.3pre3 diff --git a/src/LazyImporter.props b/src/LazyImporter.props index 59c86a9..15830bd 100644 --- a/src/LazyImporter.props +++ b/src/LazyImporter.props @@ -4,10 +4,10 @@ # general plugin information plugin.org.etheridge.lazyimporter.LazyImporterPlugin.name=LazyImporter plugin.org.etheridge.lazyimporter.LazyImporterPlugin.author=Matt Etheridge -plugin.org.etheridge.lazyimporter.LazyImporterPlugin.version=1.07 +plugin.org.etheridge.lazyimporter.LazyImporterPlugin.version=1.08 plugin.org.etheridge.lazyimporter.LazyImporterPlugin.docs=LazyImporter.html plugin.org.etheridge.lazyimporter.LazyImporterPlugin.depend.0=jdk 1.4 -plugin.org.etheridge.lazyimporter.LazyImporterPlugin.depend.1=jedit 04.00.00.00 +plugin.org.etheridge.lazyimporter.LazyImporterPlugin.depend.1=jedit 04.03.03.00 # action labels lazyimporter.resolve-package-imports.label=Resolve Wildcard Imports diff --git a/src/org/etheridge/lazyimporter/LazyImporterPlugin.java b/src/org/etheridge/lazyimporter/LazyImporterPlugin.java index 6c0d412..b46c11a 100644 --- a/src/org/etheridge/lazyimporter/LazyImporterPlugin.java +++ b/src/org/etheridge/lazyimporter/LazyImporterPlugin.java @@ -1,25 +1,26 @@ /* - * LazyImporter jEdit Plugin (LazyImporterPlugin.java) - * + * LazyImporter jEdit Plugin (LazyImporterPlugin.java) + * * Copyright (C) 2003 Matt Etheridge (ma...@et...) * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. - * + * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. - * + * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - + package org.etheridge.lazyimporter; - + +import org.gjt.sp.jedit.Buffer; import java.awt.Point; import java.util.ArrayList; @@ -78,11 +79,11 @@ public class LazyImporterPlugin extends EBPlugin { // Single instance of ClassPath, this is reset whenever the properties // have changed. - private static ClassPathManager msClassPathManager; - + private static ClassPathManager msClassPathManager; + // maps from jEdit Views to the single import listener for that view. private static Map msImportListenerMap = new HashMap(); - + // maps from jEdit Views to the single ImportListWindow instance for that // view. private static Map msImportListWindowMap = new HashMap(); @@ -90,21 +91,21 @@ public class LazyImporterPlugin extends EBPlugin // // jEdit framework/callback methods // - + /** * Called on jEdit startup */ public void start() { - // if the plugin is loaded by "deferred" loading, we should get all views + // if the plugin is loaded by "deferred" loading, we should get all views // and add a listener for each. jEdit 4.1 loaded everything at startup // so we used to be able to do this inital load when we got a ViewUpdate - // message, however, jEdit4.2 cannot rely on this. + // message, however, jEdit4.2 cannot rely on this. View[] views = jEdit.getViews(); for(int i = 0; i < views.length; i++) { createListener(views[i]); - } - + } + // initial creation of the class path manager starts the polling thread // so it is a good time to do this now. msClassPathManager = ClassPathManager.getInstance(); @@ -156,20 +157,20 @@ public class LazyImporterPlugin extends EBPlugin ViewImportListener listenerToRemove = (ViewImportListener) msImportListenerMap.get(closedView); ImportListWindow window = (ImportListWindow) msImportListWindowMap.get(closedView); window.removeImportSelectionListener(listenerToRemove); - + // remove import listener and import window from maps msImportListenerMap.remove(closedView); msImportListWindowMap.remove(closedView); } - + } } - + // // Action Methods - these are "called" from the actions.xml configuration file. // - - /** + + /** * Removes Unused Imports */ public static void removeUnusedImports(final View view) @@ -178,14 +179,14 @@ public class LazyImporterPlugin extends EBPlugin return; } - MonitoredTask monitoredTask = new MonitoredTask(view.getTextArea(), + MonitoredTask monitoredTask = new MonitoredTask(view.getTextArea(), jEdit.getProperty("LazyImporter.MonitoredTask.RemovingUnusedImports.Title"), 5) { protected void doWork() { updateMessage(jEdit.getProperty("LazyImporter.MonitoredTask.WaitingForClassPathToLoad")); showInitialLoadingWindowIfRequired(view); - + updateMessage(jEdit.getProperty("LazyImporter.MonitoredTask.StoringCaretPosition")); int currentCursorPosition = view.getTextArea().getCaretPosition(); @@ -200,10 +201,10 @@ public class LazyImporterPlugin extends EBPlugin } }; monitoredTask.start(); - } - - - /** + } + + + /** * Resolves the wildcard imports of the current class. */ public static void resolvePackageImports(final View view) @@ -211,15 +212,15 @@ public class LazyImporterPlugin extends EBPlugin if (!isJavaFile(view)) { return; } - - MonitoredTask monitoredTask = new MonitoredTask(view.getTextArea(), + + MonitoredTask monitoredTask = new MonitoredTask(view.getTextArea(), jEdit.getProperty("LazyImporter.MonitoredTask.ResolvingPackageImports.Title"), 5) { protected void doWork() { updateMessage(jEdit.getProperty("LazyImporter.MonitoredTask.WaitingForClassPathToLoad")); showInitialLoadingWindowIfRequired(view); - + updateMessage(jEdit.getProperty("LazyImporter.MonitoredTask.StoringCaretPosition")); int currentCursorPosition = view.getTextArea().getCaretPosition(); @@ -235,7 +236,7 @@ public class LazyImporterPlugin extends EBPlugin }; monitoredTask.start(); } - + /** * Displays the class path element that is under the cursor (if any). */ @@ -244,21 +245,21 @@ public class LazyImporterPlugin extends EBPlugin if (!isJavaFile(view)) { return; } - - MonitoredTask monitoredTask = new MonitoredTask(view.getTextArea(), + + MonitoredTask monitoredTask = new MonitoredTask(view.getTextArea(), jEdit.getProperty("LazyImporter.MonitoredTask.FindingImportInClassPath.Title"), 4) { protected void doWork() { updateMessage(jEdit.getProperty("LazyImporter.MonitoredTask.WaitingForClassPathToLoad")); showInitialLoadingWindowIfRequired(view); - + updateMessage(jEdit.getProperty("LazyImporter.MonitoredTask.CreatingJavaClass")); int currentCaretPosition = view.getTextArea().getCaretPosition(); JavaClass javaClass = new JavaClass(view.getTextArea().getText()); - + updateMessage(jEdit.getProperty("LazyImporter.MonitoredTask.FindingImportStatement")); - final ImportStatement importStatementAtPosition = + final ImportStatement importStatementAtPosition = javaClass.getImportStatementAtPosition(currentCaretPosition); if (importStatementAtPosition == null) { setStatusBarMessage(view, jEdit.getProperty("LazyImporter.ErrorMessages.NoImportUnderCursor")); @@ -268,13 +269,13 @@ public class LazyImporterPlugin extends EBPlugin setStatusBarMessage(view, jEdit.getProperty("LazyImporter.ErrorMessages.OnlyFindClassImports")); return; // return and stop worker thread } - + updateMessage(jEdit.getProperty("LazyImporter.MonitoredTask.FindingClassInClasspath")); // given the import statement, ask the class path which package this // class path element. - final List classPathElementsContainingClass = + final List classPathElementsContainingClass = msClassPathManager.getCurrentClassPath().findClass(((ClassImportStatement)importStatementAtPosition).getFullyQualifiedClassName()); - + // show message in event thread SwingUtilities.invokeLater(new Runnable() { @@ -289,8 +290,8 @@ public class LazyImporterPlugin extends EBPlugin }; monitoredTask.start(); } - - + + /** * Attempt to resolve any missing imports for classes found in the currently * imported classes. @@ -300,15 +301,15 @@ public class LazyImporterPlugin extends EBPlugin if (!isJavaFile(view)) { return; } - - MonitoredTask monitoredTask = new MonitoredTask(view.getTextArea(), + + MonitoredTask monitoredTask = new MonitoredTask(view.getTextArea(), jEdit.getProperty("LazyImporter.MonitoredTask.ResolvingMissingImports.Title"), 5) { protected void doWork() { updateMessage(jEdit.getProperty("LazyImporter.MonitoredTask.WaitingForClassPathToLoad")); showInitialLoadingWindowIfRequired(view); - + updateMessage(jEdit.getProperty("LazyImporter.MonitoredTask.StoringCaretPosition")); int currentCursorPosition = view.getTextArea().getCaretPosition(); @@ -324,7 +325,7 @@ public class LazyImporterPlugin extends EBPlugin }; monitoredTask.start(); } - + /** * Performs the quick import functions specified by the user via configuration. */ @@ -333,24 +334,24 @@ public class LazyImporterPlugin extends EBPlugin if (!isJavaFile(view)) { return; } - - MonitoredTask monitoredTask = new MonitoredTask(view.getTextArea(), + + MonitoredTask monitoredTask = new MonitoredTask(view.getTextArea(), jEdit.getProperty("LazyImporter.MonitoredTask.QuickImport.Title"), 6) { protected void doWork() { updateMessage(jEdit.getProperty("LazyImporter.MonitoredTask.WaitingForClassPathToLoad")); showInitialLoadingWindowIfRequired(view); - + updateMessage(jEdit.getProperty("LazyImporter.MonitoredTask.CreatingJavaClass")); int currentCursorPosition = view.getTextArea().getCaretPosition(); JavaClass javaClass = new JavaClass(view.getTextArea().getText()); - + if (jEdit.getBooleanProperty(LazyImporterProperties.QUICK_IMPORT_RESOLVE_PACKAGE_IMPORTS, false)) { updateMessage(jEdit.getProperty("LazyImporter.MonitoredTask.ResolvingWildcardImports")); javaClass.resolvePackageImports(msClassPathManager.getCurrentClassPath(), jEdit.getBooleanProperty(LazyImporterProperties.MISC_DISPLAY_CURRENT_PACKAGE_IMPORTS, false)); } - + if (jEdit.getBooleanProperty(LazyImporterProperties.QUICK_IMPORT_RESOLVE_MISSING_IMPORTS, false)) { updateMessage(jEdit.getProperty("LazyImporter.MonitoredTask.ResolvingMissingImports")); resolveMissingImportsFromExistingImports(javaClass, view); @@ -360,14 +361,14 @@ public class LazyImporterPlugin extends EBPlugin updateMessage(jEdit.getProperty("LazyImporter.MonitoredTask.RemovingUnusedImports")); javaClass.removeUnusedImports(); } - + updateMessage(jEdit.getProperty("LazyImporter.MonitoredTask.RedrawingCurrentClass")); redrawCurrentTextArea(javaClass, view.getTextArea(), currentCursorPosition); } }; monitoredTask.start(); } - + /** * Converts any imports into wildcard imports (.*) */ @@ -376,15 +377,15 @@ public class LazyImporterPlugin extends EBPlugin if (!isJavaFile(view)) { return; } - - MonitoredTask monitoredTask = new MonitoredTask(view.getTextArea(), + + MonitoredTask monitoredTask = new MonitoredTask(view.getTextArea(), jEdit.getProperty("LazyImporter.MonitoredTask.ConvertingToWildcardImports.Title"), 5) { protected void doWork() { updateMessage(jEdit.getProperty("LazyImporter.MonitoredTask.WaitingForClassPathToLoad")); showInitialLoadingWindowIfRequired(view); - + updateMessage(jEdit.getProperty("LazyImporter.MonitoredTask.StoringCaretPosition")); int currentCursorPosition = view.getTextArea().getCaretPosition(); @@ -400,8 +401,8 @@ public class LazyImporterPlugin extends EBPlugin }; monitoredTask.start(); } - - + + /** * Adds an import statement for the classname that is currently under the * cursor. @@ -411,40 +412,40 @@ public class LazyImporterPlugin extends EBPlugin if (!isJavaFile(view)) { return; } - + // get the currently selected word - if there is currently a selection do not // try and select anymore - otherwise, select the current word that the cursor // falls on. final JEditTextArea textArea = view.getTextArea(); if (textArea.getSelectedText() == null || textArea.getSelectedText().length() <= 0) { - textArea.selectWord(); + textArea.selectWord(); } final String selectedText = textArea.getSelectedText(); - - MonitoredTask monitoredTask = new MonitoredTask(view.getTextArea(), + + MonitoredTask monitoredTask = new MonitoredTask(view.getTextArea(), jEdit.getProperty("LazyImporter.MonitoredTask.ImportClassUnderCursor.Title"), 3) { protected void doWork() { updateMessage(jEdit.getProperty("LazyImporter.MonitoredTask.WaitingForClassPathToLoad")); showInitialLoadingWindowIfRequired(view); - + updateMessage(jEdit.getProperty("LazyImporter.MonitoredTask.FindingClassInClassPath")); // see if there is any imports that match the selected word - final Set fullyQualifiedClassMatches = + final Set fullyQualifiedClassMatches = msClassPathManager.getCurrentClassPath().findUnqualifiedClass(selectedText); - + // if there are no matches, just return and do nothing if (fullyQualifiedClassMatches.size() == 0) { - setStatusBarMessage(view, - jEdit.getProperty("LazyImporter.ErrorMessages.NoMatchesInClassPath.1") - + selectedText + " " + + setStatusBarMessage(view, + jEdit.getProperty("LazyImporter.ErrorMessages.NoMatchesInClassPath.1") + + selectedText + " " + jEdit.getProperty("LazyImporter.ErrorMessages.NoMatchesInClassPath.2")); return; - } - + } + // found some matches updateMessage(jEdit.getProperty("LazyImporter.MonitoredTask.CreatingPossibleImports")); // for every match we have, create an import statement @@ -453,8 +454,8 @@ public class LazyImporterPlugin extends EBPlugin String fullyQualifiedClassName = (String) i.next(); possibleImportStatements.add(ImportStatement.create(fullyQualifiedClassName)); } - - // if there is only ONE matching class in teh classpath, import it + + // if there is only ONE matching class in teh classpath, import it // without popping up a window (if the user chose this option) if (jEdit.getBooleanProperty(LazyImporterProperties.MISC_DO_NOT_POPUP_WINDOW_ON_SINGLE_MATCH, false) && fullyQualifiedClassMatches.size() == 1) { @@ -464,18 +465,18 @@ public class LazyImporterPlugin extends EBPlugin redrawCurrentTextArea(javaClass, view.getTextArea(), currentCursorPosition); return; } - + // get the ImportListWindow for this view, reset the ImportStatements it is // going to show, and then show the window in the correct place. getImportListWindow(view).setImportStatements ((ImportStatement[])possibleImportStatements.toArray(new ImportStatement[0])); final Point offsetPoint = textArea.offsetToXY(textArea.getCaretPosition()); SwingUtilities.convertPointToScreen(offsetPoint, textArea); - + getImportListWindow(view).setLocation(offsetPoint); getImportListWindow(view).show(); getImportListWindow(view).setVisible(true); - + SwingUtilities.invokeLater(new Runnable() { public void run() @@ -487,8 +488,8 @@ public class LazyImporterPlugin extends EBPlugin }; monitoredTask.start(); } - - + + // // Private Helper Methods // @@ -497,17 +498,17 @@ public class LazyImporterPlugin extends EBPlugin { // get package-class map from the class path Map packageClassMap = new HashMap(msClassPathManager.getCurrentClassPath().getPackageClassMap()); - + // list of import statements to add Set importStatementsToAdd = new HashSet(); - + // for each import statement in the current class, determien if there are // any other classes in its package to import. List importStatements = javaClass.getImportStatements(); for (Iterator i = importStatements.iterator(); i.hasNext();) { ImportStatement currentImportStatement = (ImportStatement) i.next(); String currentPackage = currentImportStatement.getPackageName(); - + // if this package is in the classpath, see if any of its classes are // being imported, and if so, add a new import statement to the JavaClass. if (packageClassMap.containsKey(currentPackage)) { @@ -523,27 +524,27 @@ public class LazyImporterPlugin extends EBPlugin } } } - + // if there were any import statements to add then add them to teh JavaClass for (Iterator i = importStatementsToAdd.iterator(); i.hasNext();) { javaClass.addImportStatement((ImportStatement)i.next()); } } - + private static void showInitialLoadingWindowIfRequired(View view) { // if the ClassPathManager has not loaded yet, then show this window if (!ClassPathManager.hasLoaded()) { InitialLoadingFrame initialLoadingFrame = new InitialLoadingFrame(view); - + while (!ClassPathManager.hasLoaded()) { try { Thread.sleep(300); } catch (Exception e) { } } - + initialLoadingFrame.setVisible(false); } } - + /** * Determines whether the current file being shown in the specified view is * a java source file (*.java). @@ -551,7 +552,7 @@ public class LazyImporterPlugin extends EBPlugin * @param view the view to check the current file in * @return whether or not the current file in the view is a java source file. */ - private static boolean isJavaFile(View view) + private static boolean isJavaFile(View view) { if (!(view.getBuffer().getName().toLowerCase().endsWith(".java"))) { setStatusBarMessage(view, jEdit.getProperty("LazyImporter.ErrorMessages.InvalidJavaClass")); @@ -559,7 +560,7 @@ public class LazyImporterPlugin extends EBPlugin } return true; } - + /** * Redraws the import statements in the specified text area, according to * the user-specified drawing strategies. @@ -569,86 +570,86 @@ public class LazyImporterPlugin extends EBPlugin // store current marker positions and shortcuts // NOTE: all of this should probably be done in the event thread as well! final Map markerMap = new HashMap(); - for (Iterator i = textArea.getBuffer().getMarkers().iterator(); i.hasNext();) { + for (Iterator i = ((Buffer)textArea.getBuffer()).getMarkers().iterator(); i.hasNext();) { Marker currentMarker = (Marker) i.next(); markerMap.put - (new Integer(textArea.getLineOfOffset(currentMarker.getPosition())), + (new Integer(textArea.getLineOfOffset(currentMarker.getPosition())), new Character(currentMarker.getShortcut())); } - + // text size before any change final int beforeLineCount = textArea.getLineCount(); - + // do stuff to textarea javaClass.setOrderingStrategies(getUserSpecifiedOrderingStrategies()); javaClass.setDrawingStrategy(getUserSpecifiedDrawingStrategy()); javaClass.redrawImportStatements(); // actually update the jEditText area - // NOTE: this is done in the event thread to avoid any nasty stuff - // happening! ;) + // NOTE: this is done in the event thread to avoid any nasty stuff + // happening! ;) SwingUtilities.invokeLater(new Runnable() { public void run() { // set the text of the class on the jEditTextArea textArea.setText(javaClass.getClassText()); - + // set the caret position if it is still valid if (caretPosition >= 0 && caretPosition <= textArea.getText().length()) { textArea.setCaretPosition(caretPosition); } - + // calculate different in line count, so markers can move accordingly int difference = textArea.getLineCount() - beforeLineCount; - + // remove any spuriously added markers - textArea.getBuffer().removeAllMarkers(); - + ((Buffer)textArea.getBuffer()).removeAllMarkers(); + // add markers after we've modified the text for (Iterator i = markerMap.keySet().iterator(); i.hasNext();) { Integer currentLineNumber = (Integer) i.next(); Character currentShortcut = (Character) markerMap.get(currentLineNumber); int lineToInsertMarker = currentLineNumber.intValue() + difference; - + // make sure the marker wasn't on one of the imports and has been deleted! if (lineToInsertMarker >= 0 ) { int positionToInsertMarker = textArea.getLineStartOffset(lineToInsertMarker); - textArea.getBuffer().addMarker(currentShortcut.charValue(), positionToInsertMarker); + ((Buffer)textArea.getBuffer()).addMarker(currentShortcut.charValue(), positionToInsertMarker); } } } }); - - + + } - + /** * @return the ordering stratagies based upon user-specified properties - */ + */ private static OrderingStrategy[] getUserSpecifiedOrderingStrategies() { List orderingStrategies = new ArrayList(); - + if (jEdit.getBooleanProperty(LazyImporterProperties.SORTING_SORT_ALPHABETICALLY, false)) { orderingStrategies.add(new AlphabeticalOrderingStrategy()); } - + if (jEdit.getBooleanProperty(LazyImporterProperties.SORTING_CURRENT_PACKAGE_IMPORTS_AT_TOP, false)) { orderingStrategies.add(new ImplicitImportsAtTopOrderingStrategy()); } - + if (jEdit.getBooleanProperty(LazyImporterProperties.SORTING_JAVA_IMPORTS_AT_EXTREMITIES, false)) { if (jEdit.getBooleanProperty(LazyImporterProperties.SORTING_JAVA_IMPORTS_AT_TOP, false)) { - orderingStrategies.add(new JavaImportsAtBeginningOrderingStrategy()); + orderingStrategies.add(new JavaImportsAtBeginningOrderingStrategy()); } else if (jEdit.getBooleanProperty(LazyImporterProperties.SORTING_JAVA_IMPORTS_AT_BOTTOM, false)) { orderingStrategies.add(new JavaImportsAtBottomOrderingStrategy()); } } - + return (OrderingStrategy[]) orderingStrategies.toArray(new OrderingStrategy[0]); } - + private static DrawingStrategy getUserSpecifiedDrawingStrategy() { if (jEdit.getBooleanProperty(LazyImporterProperties.LAYOUT_GROUP_IMPORTS, false)) { @@ -660,7 +661,7 @@ public class LazyImporterPlugin extends EBPlugin } return new DefaultDrawingStrategy(); } - + private static ImportListWindow getImportListWindow(View view) { ImportListWindow window = (ImportListWindow) msImportListWindowMap.get(view); @@ -674,7 +675,7 @@ public class LazyImporterPlugin extends EBPlugin /** * Sets the statusbar message in the event thread. */ - private static void setStatusBarMessage(final View view, final String message) + private static void setStatusBarMessage(final View view, final String message) { SwingUtilities.invokeLater(new Runnable() { @@ -685,30 +686,30 @@ public class LazyImporterPlugin extends EBPlugin }); } - + private static void createListener(View view) { ViewImportListener listener = new ViewImportListener(view); msImportListenerMap.put(view, listener); getImportListWindow(view).addImportSelectionListener(listener); } - + // // Inner Classes // - + /** * Listens for import selection from popup import window. */ private static class ViewImportListener implements ImportSelectionListener { private View mView; - + public ViewImportListener(View view) { mView = view; } - + public void importSelected(ImportStatement statementSelected) { int currentCursorPosition = mView.getTextArea().getCaretPosition(); @@ -717,5 +718,5 @@ public class LazyImporterPlugin extends EBPlugin redrawCurrentTextArea(javaClass, mView.getTextArea(), currentCursorPosition); } } - + } commit: http://jedit.git.sourceforge.net/git/gitweb.cgi?p=jedit/LazyImporter;a=commit;h=9d1ab06a4196d167084cd91d6f30d71369d7e83b commitdiff: http://jedit.git.sourceforge.net/git/gitweb.cgi?p=jedit/LazyImporter;a=commitdiff;h=9d1ab06a4196d167084cd91d6f30d71369d7e83b tree: http://jedit.git.sourceforge.net/git/gitweb.cgi?p=jedit/LazyImporter;a=tree;h=9d1ab06a4196d167084cd91d6f30d71369d7e83b;hb=9d1ab06a4196d167084cd91d6f30d71369d7e83b commit 9d1ab06a4196d167084cd91d6f30d71369d7e83b Author: matt_etheridge <matt_etheridge> Date: Thu Aug 12 20:26:20 2004 +0000 no message diff --git a/docs/LazyImporter.html b/docs/LazyImporter.html index ffedb5f..0623a6e 100644 --- a/docs/LazyImporter.html +++ b/docs/LazyImporter.html @@ -634,7 +634,6 @@ specified (this has been replaced with a message in the activity log).</LI> Allows you to group and order import statements and configure the spacing between them.</LI> </UL> -</UL> <LI> 1.07 (Aug 12, 2004)</LI> @@ -646,6 +645,7 @@ between them.</LI> <LI> <I>Bug Fix</I>: fixed NullPointerException... [truncated message content] |