From 96bc1ceeed49d505277bfaa2c3c16bb632fe275d Mon Sep 17 00:00:00 2001 From: anquetil Date: Wed, 8 Mar 2023 15:13:05 +0100 Subject: [PATCH] deal with file encoding --- .classpath | 2 +- lib/verveine.extractor.java.jar | Bin 500853 -> 501160 bytes .../extractor/java/EntityDictionary.java | 41 +++++---- .../extractor/java/VerveineJOptions.java | 87 ++++++++++++------ .../java/utils/FileContentExtractor.java | 64 ------------- .../visitors/defvisitors/VisitorComments.java | 80 +++++++++++++++- .../java/VerveineJTest_Configuration.java | 29 ++++++ 7 files changed, 191 insertions(+), 112 deletions(-) delete mode 100644 src/fr/inria/verveine/extractor/java/utils/FileContentExtractor.java diff --git a/.classpath b/.classpath index 68057ea2..a92d7195 100644 --- a/.classpath +++ b/.classpath @@ -23,7 +23,7 @@ - + diff --git a/lib/verveine.extractor.java.jar b/lib/verveine.extractor.java.jar index 2cafdde0f1299f4893c6d526d159d2bd1149ee40..0ba884d09724a78fabd19f571afd1139707acf31 100644 GIT binary patch delta 59144 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�%8+r#epQF6Bl*~ncMl!}?+_7ITimsVXOH{J= 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 j!ll?Usa* excludeMatchers; + /** + * File encoding to use to read java files + */ + protected String fileEncoding = DEFAULT_FILE_ENCODING; + /** * Name of the file where to put the MSE model. * Defaults to {@link VerveineParser#OUTPUT_FILE} @@ -142,6 +153,7 @@ public void setOptions( String[] args) { } catch (IllegalArgumentException e) { System.err.println(e.getMessage()); usage(); + throw e; } } @@ -178,6 +190,7 @@ protected int setOption( String[] args, int i) throws IllegalArgumentException { if (arg.equals("-h")) { usage(); + System.exit(0); } else if (arg.matches("-1\\.[1-7]") || arg.matches("-[1-7]")) { setCodeVersion(arg); @@ -188,6 +201,9 @@ else if (arg.matches("-1\\.[1-7]") || arg.matches("-[1-7]")) { } else if ((arg.charAt(0) == '-') && (arg.endsWith("cp"))) { classPathOptions = setOptionClassPath(classPathOptions, args, i); argumentsTreated++; + } else if (arg.equals("-encoding")) { + setOptionEncoding(args, i); + argumentsTreated++; } else if (arg.equals("-anchor")) { setOptionAnchor(args, i); argumentsTreated++; @@ -227,21 +243,21 @@ else if (arg.equals("-debugging")) { */ protected String[] setOptionClassPath( String[] classPath, String[] args, int i) throws IllegalArgumentException { if (args[i].equals("-autocp")) { - if (i < args.length) { + if (i+1 < args.length) { return addToClassPath(classPath, collectAllJars(args[i+1]) ); } else { throw new IllegalArgumentException("-autocp requires a root folder"); } } else if (args[i].equals("-filecp")) { - if (i < args.length) { + if (i+1 < args.length) { return addToClassPath(classPath, readAllJars(args[i+1])); } else { throw new IllegalArgumentException("-filecp requires a filename"); } } else if (args[i].equals("-cp")) { - if (i < args.length) { + if (i+1 < args.length) { return addToClassPath(classPath, Arrays.asList(args[i+1].split(System.getProperty("path.separator")))); } else { @@ -251,6 +267,40 @@ else if (args[i].equals("-cp")) { return classPath; } + protected void setOptionEncoding(String[] args, int i) { + if (i+1 < args.length) { + this.fileEncoding = args[i + 1].trim(); + if (Charset.availableCharsets().get(this.fileEncoding) == null) { + throw new IllegalArgumentException("Unknown file encoding: -encoding " + this.fileEncoding); + } + } else { + throw new IllegalArgumentException("-encoding requires an encoding name (eg. " + DEFAULT_FILE_ENCODING + ")"); + } + } + + protected void setOptionAnchor(String[] args, int i) { + if (i+1 < args.length) { + String anchor = args[i + 1].trim(); + anchors = VerveineJOptions.AnchorOptions.getValue(anchor); + if (anchors == null) { + throw new IllegalArgumentException("unknown option to -anchor: " + anchor); + } + } else { + throw new IllegalArgumentException("-anchor requires an option (none|default|assoc)"); + } + } + + protected void setOptionFormat(String[] args, int i) { + if (i+1 < args.length) { + this.outputFormat = args[i + 1].trim(); + if ((! this.outputFormat.equalsIgnoreCase(MSE_OUTPUT_FORMAT)) && (! this.outputFormat.equalsIgnoreCase(JSON_OUTPUT_FORMAT))) { + throw new IllegalArgumentException("unknown option to -format: " + outputFormat); + } + } else { + throw new IllegalArgumentException("-format requires an option (mse|json)"); + } + } + protected List collectAllJars(String sDir) { File[] faFiles = new File(sDir).listFiles(); List tmpPath = new ArrayList(); @@ -299,29 +349,6 @@ protected List readAllJars(String filename) { return tmpPath; } - protected void setOptionAnchor(String[] args, int i) { - if (i < args.length) { - String anchor = args[i + 1].trim(); - anchors = VerveineJOptions.AnchorOptions.getValue(anchor); - if (anchors == null) { - throw new IllegalArgumentException("unknown option to -anchor: " + anchor); - } - } else { - throw new IllegalArgumentException("-anchor requires an option (none|default|assoc)"); - } - } - - protected void setOptionFormat(String[] args, int i) { - if (i < args.length) { - outputFormat = args[i + 1].trim(); - if ((!outputFormat.equalsIgnoreCase(MSE_OUTPUT_FORMAT)) && (!outputFormat.equalsIgnoreCase(JSON_OUTPUT_FORMAT))) { - throw new IllegalArgumentException("unknown option to -format: " + outputFormat); - } - } else { - throw new IllegalArgumentException("-format requires an option (mse|json)"); - } - } - protected void usage() { System.err.println("Usage: VerveineJ [-h] [-i] [-o ] [-prettyPrint] [-summary] [-alllocals] [-anchor (none|default|assoc)] [-cp CLASSPATH | -autocp DIR] [-1.1 | -1 | -1.2 | -2 | ... | -1.7 | -7] | "); System.err.println(" [-h] prints this message"); @@ -333,6 +360,7 @@ protected void usage() { System.err.println(" Summarizing at the level of classes does not produce Methods, Attributes, Accesses, and Invocations"); System.err.println(" Everything is represented as references between classes: e.g. \"A.m1() invokes B.m2()\" is uplifted to \"A references B\""); System.err.println(" [-alllocals] Forces outputing all local variables, even those with primitive type (incompatible with \"-summary\")"); + System.err.println(" [-encoding ] File encoding to use for reading the source code default: " + DEFAULT_FILE_ENCODING); System.err.println(" [-anchor (none|entity|default|assoc)] options for source anchor information:\n" + " - no entity\n" + " - only named entities [default]\n" + @@ -344,14 +372,13 @@ protected void usage() { System.err.println(" [-excludepath GLOBBINGEXPR] A globbing expression of file path to exclude from parsing"); System.err.println(" [-1.1 | -1 | -1.2 | -2 | ... | -1.7 | -7] specifies version of Java"); System.err.println(" | list of source files to parse or directories to search for source files"); - System.exit(0); - } protected void setCodeVersion(String arg) { if (codeVers != null) { System.err.println("Trying to set twice code versions: " + codeVers + " and " + arg); usage(); + throw new IllegalArgumentException(); } else if (arg.equals("-1.1") || arg.equals("-1")) { codeVers = JavaCore.VERSION_1_1; } else if (arg.equals("-1.2") || arg.equals("-2")) { @@ -551,4 +578,8 @@ public boolean commentsAsText() { return commentText; } + public String getFileEncoding() { + return fileEncoding; + } + } \ No newline at end of file diff --git a/src/fr/inria/verveine/extractor/java/utils/FileContentExtractor.java b/src/fr/inria/verveine/extractor/java/utils/FileContentExtractor.java deleted file mode 100644 index 2fd5fa1e..00000000 --- a/src/fr/inria/verveine/extractor/java/utils/FileContentExtractor.java +++ /dev/null @@ -1,64 +0,0 @@ -package fr.inria.verveine.extractor.java.utils; - -import java.io.FileNotFoundException; -import java.io.IOException; -import java.io.RandomAccessFile; -import java.nio.charset.StandardCharsets; - -/** - * A utility to read the content of files. - * To make it faster, we try to keep the file opened so that successive reads in the same file - * do not have to re-open. - * Also to make it easier to use, everything is static (not proud of it) - * @author anquetil - */ -public class FileContentExtractor { - - static protected String filename = null; - static protected RandomAccessFile openedFile = null; - - public static String getFileContent( String inputfile, int start, int end) { - if (filename != inputfile) { - closeCurrentFile(); - openFile(inputfile); - } - return getFileContent(start, end); - } - - protected static void openFile(String fname) { - try { - openedFile = new RandomAccessFile( fname, "r"); - filename = fname; - } catch (FileNotFoundException e) { - System.err.println("Error opening "+fname+" for reading"); - } - } - - protected static void closeCurrentFile() { - if (openedFile!= null) { - try { - openedFile.close(); - } catch (IOException e) { - // nothing - } - } - } - - protected static String getFileContent( int start, int end) { - byte buffer[] = new byte[ end-start+1]; - try { - openedFile.seek(start - 1); // moose position start at 1, Java at 0 - int ret = openedFile.read(buffer); - if (ret < end-start+1) { - System.err.println("missing bytes, read "+ret+" instead of "+(end-start+1)); - return ""; - } - return new String(buffer, StandardCharsets.UTF_8); - - } catch (IOException e) { - e.printStackTrace(); - } - return ""; - } - -} diff --git a/src/fr/inria/verveine/extractor/java/visitors/defvisitors/VisitorComments.java b/src/fr/inria/verveine/extractor/java/visitors/defvisitors/VisitorComments.java index 3fde81ff..aa11e3f8 100644 --- a/src/fr/inria/verveine/extractor/java/visitors/defvisitors/VisitorComments.java +++ b/src/fr/inria/verveine/extractor/java/visitors/defvisitors/VisitorComments.java @@ -1,5 +1,12 @@ package fr.inria.verveine.extractor.java.visitors.defvisitors; +import java.io.BufferedReader; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.UnsupportedEncodingException; import java.util.List; import org.eclipse.jdt.core.dom.ASTNode; @@ -74,6 +81,11 @@ public class VisitorComments extends GetVisitedEntityAbstractVisitor { */ private int methodStartPosition; + protected String currentFilename = null; + protected BufferedReader openedFile = null; + protected int lastPositionRead = 0; + + public VisitorComments(EntityDictionary dico, VerveineJOptions options) { super(dico, options); classMemberDeclarations = false; @@ -83,7 +95,7 @@ public VisitorComments(EntityDictionary dico, VerveineJOptions options) { @Override public boolean visit(CompilationUnit node) { - allComments = node.getCommentList(); + initializeCommentsReader(node); if (allComments.size() == 0) { // no comment, not visiting return false; @@ -97,6 +109,7 @@ public boolean visit(CompilationUnit node) { @Override public void endVisit(CompilationUnit node) { endVisitCompilationUnit(node); + closeFile(); } @Override @@ -249,7 +262,7 @@ protected void assignCommentsInInterval(int start, int end, TWithComments fmx) { while ( searchComment && pendingComments() ) { Comment cmt = allComments.get(nextComment); if (commentIsInside(cmt, start, end)) { - dico.createFamixComment(cmt, fmx, options.commentsAsText()); + commentCreation( cmt, fmx); nextComment++; } else { @@ -258,6 +271,16 @@ protected void assignCommentsInInterval(int start, int end, TWithComments fmx) { } } + private void commentCreation(Comment cmt, TWithComments fmx) { + if (options.commentsAsText()) { + + dico.createFamixComment(cmt, fmx, getFileContent(cmt.getStartPosition(), cmt.getLength())); + } + else { + dico.createFamixComment(cmt, fmx); + } + } + /** * Whether there is still some "pending" comments */ @@ -272,4 +295,57 @@ protected boolean commentIsInside(Comment cmt, int start, int end) { return (start <= cmt.getStartPosition()) && (end >= cmt.getStartPosition() + cmt.getLength()); } + protected void initializeCommentsReader(CompilationUnit node) { + allComments = node.getCommentList(); + + currentFilename = (String) ((CompilationUnit)node).getProperty(EntityDictionary.SOURCE_FILENAME_PROPERTY); + try { + InputStream is = new FileInputStream(currentFilename); + this.openedFile = new BufferedReader(new InputStreamReader(is, options.getFileEncoding())); + + this.lastPositionRead = 0; + } catch (FileNotFoundException|UnsupportedEncodingException e) { + System.err.println("Not able to read comments from "+currentFilename); + } + + } + + protected String getFileContent( int start, int lenghtToRead) { + char buffer[]; + + if(openedFile == null) { + return ""; + } + + buffer = new char[lenghtToRead]; + try { + + openedFile.skip(start - lastPositionRead); + int ret = openedFile.read( buffer, /*offset in buffer*/0, lenghtToRead); + + if (ret < lenghtToRead) { + System.err.println("missing bytes in "+ currentFilename + ", read " + ret + " instead of " + lenghtToRead); + return ""; + } + lastPositionRead = start + ret; + + return new String(buffer); + + } catch (IOException e) { + e.printStackTrace(); + } + return ""; + } + + protected void closeFile() { + if (openedFile != null) { + try { + openedFile.close(); + } catch (IOException e) { + // nothing + } + openedFile= null; + } + } + } \ No newline at end of file diff --git a/tests/fr/inria/verveine/extractor/java/VerveineJTest_Configuration.java b/tests/fr/inria/verveine/extractor/java/VerveineJTest_Configuration.java index 54cc34ff..1dd22fab 100644 --- a/tests/fr/inria/verveine/extractor/java/VerveineJTest_Configuration.java +++ b/tests/fr/inria/verveine/extractor/java/VerveineJTest_Configuration.java @@ -1,6 +1,7 @@ package fr.inria.verveine.extractor.java; import org.junit.Before; +import org.junit.Rule; import org.junit.Test; import org.moosetechnology.model.famix.famixjavaentities.*; import org.moosetechnology.model.famix.famixjavaentities.Class; @@ -141,6 +142,21 @@ public void testAlllocals() { assertEquals(3, accessSetNom); } + @Test + public void testEncodingUTF8() { + parser.configure(new String[]{"-encoding", "UTF-8", "test_src/comments"}); + } + + @Test(expected = IllegalArgumentException.class) + public void testEncodingMissing() { + parser.configure(new String[]{"-encoding"}); + } + + @Test(expected = IllegalArgumentException.class) + public void testEncodingWrong() { + parser.configure(new String[]{"-encoding", "BLAH", "test_src/comments"}); + } + @Test public void testCommentsText() { parse(new String[]{"-commenttext", "test_src/comments"}); @@ -190,6 +206,19 @@ else if (meth.getName().equals("methodWithoutBody")) { assertEquals(6, numberTested); // check that all expected methods were actually found and tested } + @Test + public void testCommentsAnchor() { + parse(new String[]{"test_src/comments"}); + + assertEquals(14, entitiesOfType(Comment.class).size()); + for (Comment cmt : entitiesOfType(Comment.class)) { + assertNotNull(cmt.getSourceAnchor()); + assertNull( cmt.getContent()); + int len = (int)((IndexedFileAnchor)cmt.getSourceAnchor()).getEndPos() - (int)((IndexedFileAnchor)cmt.getSourceAnchor()).getStartPos(); + assertTrue( len >= 20); // none of the comments have less than 20 characters + } + } + @Test public void testClassDeclsInExpr() { parse(new String[]{"-alllocals", "test_src/ad_hoc/SpecialLocalVarDecls.java"});