cherrypick-svn Mailing List for CherryPick
Status: Pre-Alpha
Brought to you by:
jeanlaurent
You can subscribe to this list here.
| 2006 |
Jan
|
Feb
|
Mar
|
Apr
|
May
(3) |
Jun
(2) |
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
|---|
|
From: <jea...@us...> - 2006-06-29 15:53:22
|
Revision: 5 Author: jeanlaurent Date: 2006-06-29 08:53:16 -0700 (Thu, 29 Jun 2006) ViewCVS: http://svn.sourceforge.net/cherrypick/?rev=5&view=rev Log Message: ----------- added svn ignore list Property Changed: ---------------- trunk/cherrypick-core/ Property changes on: trunk/cherrypick-core ___________________________________________________________________ Name: svn:ignore + target .project .classpath This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
|
From: <jea...@us...> - 2006-06-13 10:05:55
|
Revision: 4 Author: jeanlaurent Date: 2006-06-13 03:05:40 -0700 (Tue, 13 Jun 2006) ViewCVS: http://svn.sourceforge.net/cherrypick/?rev=4&view=rev Log Message: ----------- adding CodeHaus repositories to get javacc maven plugin 2.1-SNAPHSOT version. Modified Paths: -------------- trunk/cherrypick-core/pom.xml Modified: trunk/cherrypick-core/pom.xml =================================================================== --- trunk/cherrypick-core/pom.xml 2006-05-31 21:36:12 UTC (rev 3) +++ trunk/cherrypick-core/pom.xml 2006-06-13 10:05:40 UTC (rev 4) @@ -28,6 +28,13 @@ <scope>test</scope> </dependency> </dependencies> + <pluginRepositories> + <pluginRepository> + <id>CodeHaus</id> + <name>CodeHaus</name> + <url>http://snapshots.maven.codehaus.org/maven2</url> + </pluginRepository> + </pluginRepositories> <build> <plugins> <plugin> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
|
From: <jea...@us...> - 2006-05-31 21:36:22
|
Revision: 3 Author: jeanlaurent Date: 2006-05-31 14:36:12 -0700 (Wed, 31 May 2006) ViewCVS: http://svn.sourceforge.net/cherrypick/?rev=3&view=rev Log Message: ----------- added readme-build.txt Added Paths: ----------- trunk/readme-build.txt Added: trunk/readme-build.txt =================================================================== --- trunk/readme-build.txt (rev 0) +++ trunk/readme-build.txt 2006-05-31 21:36:12 UTC (rev 3) @@ -0,0 +1,5 @@ +You need maven2 to build this software. +Maven is freely available from http://maven.apache.org +once maven properly installed +perform mvn eclipse:eclipse in the top root directory to build the .classpath & .project for using this code under eclipse. +you may need a -Dmaven.test.skip=true since most test does not actually pass ... This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
|
From: <jea...@us...> - 2006-05-31 21:31:42
|
Revision: 2 Author: jeanlaurent Date: 2006-05-31 14:30:53 -0700 (Wed, 31 May 2006) ViewCVS: http://svn.sourceforge.net/cherrypick/?rev=2&view=rev Log Message: ----------- initial import Added Paths: ----------- trunk/LICENCE.txt trunk/cherrypick-core/ trunk/cherrypick-core/misc/ trunk/cherrypick-core/misc/Token.java trunk/cherrypick-core/pom.xml trunk/cherrypick-core/src/ trunk/cherrypick-core/src/main/ trunk/cherrypick-core/src/main/java/ trunk/cherrypick-core/src/main/java/net/ trunk/cherrypick-core/src/main/java/net/morlhon/ trunk/cherrypick-core/src/main/java/net/morlhon/javacc/ trunk/cherrypick-core/src/main/java/net/morlhon/javacc/AbstractMetric.java trunk/cherrypick-core/src/main/java/net/morlhon/javacc/AbstractParser.java trunk/cherrypick-core/src/main/java/net/morlhon/javacc/CherryPick.java trunk/cherrypick-core/src/main/java/net/morlhon/javacc/CherryPickException.java trunk/cherrypick-core/src/main/java/net/morlhon/javacc/ClassMetric.java trunk/cherrypick-core/src/main/java/net/morlhon/javacc/Context.java trunk/cherrypick-core/src/main/java/net/morlhon/javacc/ContextImpl.java trunk/cherrypick-core/src/main/java/net/morlhon/javacc/EssaiJavaParser.java trunk/cherrypick-core/src/main/java/net/morlhon/javacc/Memory.java trunk/cherrypick-core/src/main/java/net/morlhon/javacc/MemoryImpl.java trunk/cherrypick-core/src/main/java/net/morlhon/javacc/MethodMetric.java trunk/cherrypick-core/src/main/java/net/morlhon/javacc/Metric.java trunk/cherrypick-core/src/main/java/net/morlhon/javacc/MetricMap.java trunk/cherrypick-core/src/main/java/net/morlhon/javacc/MetricStack.java trunk/cherrypick-core/src/main/java/net/morlhon/javacc/PackageMetric.java trunk/cherrypick-core/src/main/java/net/morlhon/javacc/ProgramMetric.java trunk/cherrypick-core/src/main/javacc/ trunk/cherrypick-core/src/main/javacc/reference-Java1.5.jj trunk/cherrypick-core/src/test/ trunk/cherrypick-core/src/test/java/ trunk/cherrypick-core/src/test/java/net/ trunk/cherrypick-core/src/test/java/net/morlhon/ trunk/cherrypick-core/src/test/java/net/morlhon/javacc/ trunk/cherrypick-core/src/test/java/net/morlhon/javacc/CherryPickTest.java trunk/cherrypick-core/src/test/java/net/morlhon/javacc/JavaParserTest.java trunk/cherrypick-core/src/test/java/net/morlhon/javacc/MetricListTest.java trunk/cherrypick-core/src/test/java/net/morlhon/javacc/SimpleMetric.java trunk/cherrypick-core/src/test/resources/ trunk/cherrypick-core/src/test/resources/test01.java.test trunk/cherrypick-core/src/test/resources/test02.java.test trunk/pom.xml Added: trunk/LICENCE.txt =================================================================== --- trunk/LICENCE.txt (rev 0) +++ trunk/LICENCE.txt 2006-05-31 21:30:53 UTC (rev 2) @@ -0,0 +1,13 @@ + Copyright 2005-2006 Jean-Laurent de Morlhon (jea...@gm...) + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. Added: trunk/cherrypick-core/misc/Token.java =================================================================== --- trunk/cherrypick-core/misc/Token.java (rev 0) +++ trunk/cherrypick-core/misc/Token.java 2006-05-31 21:30:53 UTC (rev 2) @@ -0,0 +1,85 @@ +package net.morlhon.javacc; +/* Generated By:JavaCC: Do not edit this line. Token.java Version 3.0 */ +/** + * Describes the input token stream. + */ + +public class Token { + + /** + * An integer that describes the kind of this token. This numbering + * system is determined by JavaCCParser, and a table of these numbers is + * stored in the file ...Constants.java. + */ + public int kind; + + /** + * beginLine and beginColumn describe the position of the first character + * of this token; endLine and endColumn describe the position of the + * last character of this token. + */ + public int beginLine, beginColumn, endLine, endColumn; + + /** + * The string image of the token. + */ + public String image; + + /** + * A reference to the next regular (non-special) token from the input + * stream. If this is the last token from the input stream, or if the + * token manager has not read tokens beyond this one, this field is + * set to null. This is true only if this token is also a regular + * token. Otherwise, see below for a description of the contents of + * this field. + */ + public Token next; + + /** + * This field is used to access special tokens that occur prior to this + * token, but after the immediately preceding regular (non-special) token. + * If there are no such special tokens, this field is set to null. + * When there are more than one such special token, this field refers + * to the last of these special tokens, which in turn refers to the next + * previous special token through its specialToken field, and so on + * until the first special token (whose specialToken field is null). + * The next fields of special tokens refer to other special tokens that + * immediately follow it (without an intervening regular token). If there + * is no such token, this field is null. + */ + public Token specialToken; + + /** + * Returns the image. + */ + public String toString() + { + return image; + } + + /** + * Returns a new Token object, by default. However, if you want, you + * can create and return subclass objects based on the value of ofKind. + * Simply add the cases to the switch for all those special cases. + * For example, if you have a subclass of Token called IDToken that + * you want to create if ofKind is ID, simlpy add something like : + * + * case MyParserConstants.ID : return new IDToken(); + * + * to the following switch statement. Then you can cast matchedToken + * variable to the appropriate type and use it in your lexical actions. + */ + public static final Token newToken(int ofKind) + { + switch(ofKind) + { + default : return new Token(); + } + } + + public static class GTToken extends Token + { + int realKind = JavaParserConstants.GT; + } + +} Added: trunk/cherrypick-core/pom.xml =================================================================== --- trunk/cherrypick-core/pom.xml (rev 0) +++ trunk/cherrypick-core/pom.xml 2006-05-31 21:30:53 UTC (rev 2) @@ -0,0 +1,69 @@ +<project> + <modelVersion>4.0.0</modelVersion> + <parent> + <groupId>net.sf.cherrypick</groupId> + <artifactId>cherrypick</artifactId> + <version>1.0-SNAPSHOT</version> + </parent> + <groupId>net.sf.cherrypick</groupId> + <artifactId>cherrypick-core</artifactId> + <name>CherryPick Core</name> + <url>http://cherrypick.sf.net</url> + <developers> + <developer> + <name>Jean-Laurent de Morlhon</name> + <id>jeanlaurent</id> + <email>jea...@gm...</email> + <roles> + <role>Java Developer</role> + </roles> + <timezone>+1</timezone> + </developer> + </developers> + <dependencies> + <dependency> + <groupId>junit</groupId> + <artifactId>junit</artifactId> + <version>3.8.1</version> + <scope>test</scope> + </dependency> + </dependencies> + <build> + <plugins> + <plugin> + <artifactId>maven-antrun-plugin</artifactId> + <executions> + <execution> + <phase>process-sources</phase> + <configuration> + <tasks> + <copy overwrite="true" + todir="${project.build.directory}/generated-sources/javacc/net/morlhon/javacc"> + <fileset file="misc/Token.java" /> + </copy> + </tasks> + </configuration> + <goals> + <goal>run</goal> + </goals> + </execution> + </executions> + </plugin> + <plugin> + <groupId>org.codehaus.mojo</groupId> + <artifactId>javacc-maven-plugin</artifactId> + <version>2.1-SNAPSHOT</version> + <configuration> + <packageName>net.morlhon.javacc</packageName> + </configuration> + <executions> + <execution> + <goals> + <goal>javacc</goal> + </goals> + </execution> + </executions> + </plugin> + </plugins> + </build> +</project> Added: trunk/cherrypick-core/src/main/java/net/morlhon/javacc/AbstractMetric.java =================================================================== --- trunk/cherrypick-core/src/main/java/net/morlhon/javacc/AbstractMetric.java (rev 0) +++ trunk/cherrypick-core/src/main/java/net/morlhon/javacc/AbstractMetric.java 2006-05-31 21:30:53 UTC (rev 2) @@ -0,0 +1,101 @@ +package net.morlhon.javacc; + +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; + +public class AbstractMetric implements Metric { + private String name; + private int ncss; + private int ccn; + private Map children; + + public AbstractMetric(String name) { + this.name = name; + this.children = new HashMap(10); + } + + public AbstractMetric(String name, int value) { + this.name = name; + this.children = new HashMap(value); + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public int getCcn() { + return ccn; + } + + public void setCcn(int ccn) { + this.ccn = ccn; + } + + public int getNcss() { + return ncss; + } + + public void setNcss(int ncss) { + this.ncss = ncss; + } + + public void incrementNcss() { + ncss++; + } + + public void incrementNcss(int value) { + ncss += value; + } + + public void incrementCcn() { + ccn++; + } + + public void incrementCcn(int value) { + ccn += value; + } + + public void add(Metric metric) { + if (!contains(metric.getName())) { + children.put(metric.getName(), metric); + } else { + Metric existingMetric = (Metric) children.get(metric.getName()); + Iterator iterator = metric.iterator(); + while (iterator.hasNext()) { + existingMetric.add((Metric) iterator.next()); + } + } + } + + public Iterator iterator() { + return children.values().iterator(); + } + + public boolean contains(String name) { + return children.containsKey(name); + } + + public Metric getMetric(String name) { + return (Metric) children.get(name); + } + + public int size() { + return children.size(); + } + + public int sumNcss() { + int sumNcss = this.ncss; + Iterator iterator = children.values().iterator(); + while (iterator.hasNext()) { + Metric metric = (Metric) iterator.next(); + sumNcss += metric.sumNcss(); + } + return sumNcss; + } + +} Added: trunk/cherrypick-core/src/main/java/net/morlhon/javacc/AbstractParser.java =================================================================== --- trunk/cherrypick-core/src/main/java/net/morlhon/javacc/AbstractParser.java (rev 0) +++ trunk/cherrypick-core/src/main/java/net/morlhon/javacc/AbstractParser.java 2006-05-31 21:30:53 UTC (rev 2) @@ -0,0 +1,14 @@ +package net.morlhon.javacc; + +public abstract class AbstractParser { + private Context context; + + public Context getContext() { + return this.context; + } + + public void setContext(Context context) { + this.context = context; + } + +} Added: trunk/cherrypick-core/src/main/java/net/morlhon/javacc/CherryPick.java =================================================================== --- trunk/cherrypick-core/src/main/java/net/morlhon/javacc/CherryPick.java (rev 0) +++ trunk/cherrypick-core/src/main/java/net/morlhon/javacc/CherryPick.java 2006-05-31 21:30:53 UTC (rev 2) @@ -0,0 +1,43 @@ +package net.morlhon.javacc; + +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.InputStream; + +public class CherryPick { + private ProgramMetric programMetric; + + public CherryPick() { + programMetric = new ProgramMetric(); + } + + public void parse(String[] fileList) throws CherryPickException { + for (int i = 0; i < fileList.length; i++) { + parse(fileList[i]); + } + } + + public void parse(String file) throws CherryPickException { + try { + parse(new FileInputStream(file)); + } catch(FileNotFoundException fnfe ) { + throw new CherryPickException( fnfe); + } + } + + public void parse(InputStream stream) throws CherryPickException { + JavaParser parser = new JavaParser(stream); + parser.setContext(new ContextImpl()); + try { + parser.CompilationUnit(); + } catch (ParseException pe) { + pe.printStackTrace(); + throw new CherryPickException(pe); + } + programMetric.add(parser.getContext().getRootMetric()); + } + + public ProgramMetric getMetric() { + return this.programMetric; + } +} Added: trunk/cherrypick-core/src/main/java/net/morlhon/javacc/CherryPickException.java =================================================================== --- trunk/cherrypick-core/src/main/java/net/morlhon/javacc/CherryPickException.java (rev 0) +++ trunk/cherrypick-core/src/main/java/net/morlhon/javacc/CherryPickException.java 2006-05-31 21:30:53 UTC (rev 2) @@ -0,0 +1,12 @@ +package net.morlhon.javacc; + +public class CherryPickException extends Exception { + + public CherryPickException(String message) { + super(message); + } + + public CherryPickException(Exception exception) { + super(exception); + } +} Added: trunk/cherrypick-core/src/main/java/net/morlhon/javacc/ClassMetric.java =================================================================== --- trunk/cherrypick-core/src/main/java/net/morlhon/javacc/ClassMetric.java (rev 0) +++ trunk/cherrypick-core/src/main/java/net/morlhon/javacc/ClassMetric.java 2006-05-31 21:30:53 UTC (rev 2) @@ -0,0 +1,37 @@ +package net.morlhon.javacc; + + +public class ClassMetric extends AbstractMetric implements Metric { + private String packageName = null; + private int lineNumber; + + public int getLineNumber() { + return lineNumber; + } + + public void setLineNumber(int lineNumber) { + this.lineNumber = lineNumber; + } + + public ClassMetric(String name) { + super(name,10); + } + + public ClassMetric(String packageName, String name) { + super(name,10); + this.packageName = packageName; + } + + public String toString() { + return "{class} " + getName() + " [" + lineNumber + "]"; + } + + public String getPackageName() { + return packageName; + } + + public void setPackageName(String packageName) { + this.packageName = packageName; + } + +} Added: trunk/cherrypick-core/src/main/java/net/morlhon/javacc/Context.java =================================================================== --- trunk/cherrypick-core/src/main/java/net/morlhon/javacc/Context.java (rev 0) +++ trunk/cherrypick-core/src/main/java/net/morlhon/javacc/Context.java 2006-05-31 21:30:53 UTC (rev 2) @@ -0,0 +1,15 @@ +package net.morlhon.javacc; + +public interface Context { + + public Metric getCurrentMetric(); + + public void setCurrentMetric(Metric metric); + + public Metric endCurrentMetric(); + + public Metric getRootMetric(); + + public void setRootMetric(Metric metricGroup); + +} Added: trunk/cherrypick-core/src/main/java/net/morlhon/javacc/ContextImpl.java =================================================================== --- trunk/cherrypick-core/src/main/java/net/morlhon/javacc/ContextImpl.java (rev 0) +++ trunk/cherrypick-core/src/main/java/net/morlhon/javacc/ContextImpl.java 2006-05-31 21:30:53 UTC (rev 2) @@ -0,0 +1,54 @@ +package net.morlhon.javacc; + +import java.util.Map; + +public class ContextImpl implements Context { + private PackageMetric packageMetric; // rootMetric + private MetricStack currentMetric; + private Memory memory; + + public ContextImpl() { + this.currentMetric = new MetricStack(); + this.memory = new MemoryImpl(); + } + + public Memory getMemory() { + return this.memory; + } + + public void setCurrentMetric(Metric metric) { + System.out.println("+" + metric.toString()); + currentMetric.push(metric); + } + + public Metric getCurrentMetric() { + Metric metric = currentMetric.peek(); + if (metric == null ) { + return getRootMetric(); + } + return metric; + } + + public Metric endCurrentMetric() { + Metric metric = currentMetric.pop(); + System.out.println("-" + metric.toString()); + getCurrentMetric().add(metric); + return metric; + } + + public void setRootMetric(Metric metricGroup) { + if (this.packageMetric != null) { + throw new IllegalStateException("root metric alreay stated"); + } + this.packageMetric = (PackageMetric) metricGroup; + System.out.println("\n!" + this.packageMetric.toString()); + } + + public Metric getRootMetric() { + if (this.packageMetric == null) { + this.packageMetric = new PackageMetric(""); + } + return this.packageMetric; + } + +} Added: trunk/cherrypick-core/src/main/java/net/morlhon/javacc/EssaiJavaParser.java =================================================================== --- trunk/cherrypick-core/src/main/java/net/morlhon/javacc/EssaiJavaParser.java (rev 0) +++ trunk/cherrypick-core/src/main/java/net/morlhon/javacc/EssaiJavaParser.java 2006-05-31 21:30:53 UTC (rev 2) @@ -0,0 +1,16 @@ +package net.morlhon.javacc; + +public class EssaiJavaParser { + public static final String[] FILE = { + "D:\\src\\InterviewExercice\\src\\main\\java\\net\\morlhon\\interview\\sort\\SortSolutionB.java", + "D:\\src\\InterviewExercice\\src\\main\\java\\net\\morlhon\\interview\\sort\\SortSolutionA.java", + "D:\\eclipse\\workspace\\javacctest\\misc\\Token.java" + }; + + public static void main(String[] args) throws Exception { + CherryPick cherryPick = new CherryPick(); + cherryPick.parse(FILE); + ProgramMetric metric = cherryPick.getMetric(); + System.exit(0); + } +} Added: trunk/cherrypick-core/src/main/java/net/morlhon/javacc/Memory.java =================================================================== --- trunk/cherrypick-core/src/main/java/net/morlhon/javacc/Memory.java (rev 0) +++ trunk/cherrypick-core/src/main/java/net/morlhon/javacc/Memory.java 2006-05-31 21:30:53 UTC (rev 2) @@ -0,0 +1,9 @@ +package net.morlhon.javacc; + +public interface Memory { + + public Object get(String key); + + public void put(String key, String value); + +} Added: trunk/cherrypick-core/src/main/java/net/morlhon/javacc/MemoryImpl.java =================================================================== --- trunk/cherrypick-core/src/main/java/net/morlhon/javacc/MemoryImpl.java (rev 0) +++ trunk/cherrypick-core/src/main/java/net/morlhon/javacc/MemoryImpl.java 2006-05-31 21:30:53 UTC (rev 2) @@ -0,0 +1,20 @@ +package net.morlhon.javacc; + +import java.util.HashMap; +import java.util.Map; + +public class MemoryImpl implements Memory { + private Map memory; + + public MemoryImpl() { + memory = new HashMap(10); + } + + public Object get(String key) { + return memory.get(key); + } + + public void put(String key, String value) { + memory.put(key, value); + } +} Added: trunk/cherrypick-core/src/main/java/net/morlhon/javacc/MethodMetric.java =================================================================== --- trunk/cherrypick-core/src/main/java/net/morlhon/javacc/MethodMetric.java (rev 0) +++ trunk/cherrypick-core/src/main/java/net/morlhon/javacc/MethodMetric.java 2006-05-31 21:30:53 UTC (rev 2) @@ -0,0 +1,29 @@ +package net.morlhon.javacc; + +/** + * Holds the metric for a method. + * + * @author <a href="jea...@gm...">Jean-Laurent de Morlhon</a> + */ +public class MethodMetric extends AbstractMetric implements Metric { + private int lineNumber; + + public MethodMetric(String name) { + super(name); + setCcn(1); + } + + public String toString() { + return "{method} " + getName() + " [" + lineNumber + "]" + "(" + getCcn() + + "," + getNcss() + ")"; + } + + public void setLineNumber(int lineNumber) { + this.lineNumber = lineNumber; + } + + public int getLineNumber() { + return lineNumber; + } + +} Added: trunk/cherrypick-core/src/main/java/net/morlhon/javacc/Metric.java =================================================================== --- trunk/cherrypick-core/src/main/java/net/morlhon/javacc/Metric.java (rev 0) +++ trunk/cherrypick-core/src/main/java/net/morlhon/javacc/Metric.java 2006-05-31 21:30:53 UTC (rev 2) @@ -0,0 +1,47 @@ +package net.morlhon.javacc; + +import java.util.Iterator; + +/** + * Interface common to all metrics. + * + * @author <a href="jea...@gm...">Jean-Laurent de Morlhon</a> + */ +public interface Metric { + /** + * returns the name of the metric. This can be anything. + * + * @return a String holding the name of the metric. + */ + public String getName(); + + /** + * returns the ncss for this metric. + * + * @return a int holding the ncss for this metric. + */ + public int getNcss(); + + /** + * returns the ccn indicator for this metric. + * + * @return a int holding the cnn for this metric. + */ + public int getCcn(); + + public void incrementNcss(); + + public void incrementNcss(int value); + + public void incrementCcn(); + + public void incrementCcn(int value); + + public void add(Metric metric); + + public int size(); + + public int sumNcss(); + + public Iterator iterator(); +} Added: trunk/cherrypick-core/src/main/java/net/morlhon/javacc/MetricMap.java =================================================================== --- trunk/cherrypick-core/src/main/java/net/morlhon/javacc/MetricMap.java (rev 0) +++ trunk/cherrypick-core/src/main/java/net/morlhon/javacc/MetricMap.java 2006-05-31 21:30:53 UTC (rev 2) @@ -0,0 +1,92 @@ +package net.morlhon.javacc; + +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; + +public class MetricMap { + private String name; + private int ccn; + private int ncss; + private int extraNcss; + private Map map; + + public MetricMap(String name, int max) { + this.name = name; + map = new HashMap(max); + } + + /* (non-Javadoc) + * @see net.morlhon.javacc.MetricGroup#add(net.morlhon.javacc.Metric) + */ + public void add(Metric metric) { + this.ccn += metric.getCcn(); + this.ncss += metric.getNcss(); + if ( !contains(metric.getName()) ) { + map.put(metric.getName(),metric); + } else { + // SHOULD INCREMENT CCN OF CURRENT METRIC + Metric c = (Metric)map.get(metric.getName()); + } + } + + public boolean contains(String name) { + return map.containsKey(name); + } + + public Metric getMetric(String name) { + return (Metric)map.get(name); + } + + /* (non-Javadoc) + * @see net.morlhon.javacc.MetricGroup#size() + */ + public int size() { + return map.size(); + } + + public void incrementNcss() { + this.extraNcss++; + this.ncss++; + } + + public void incrementNcss(int value) { + this.extraNcss += value; + this.ncss += value; + } + + public void incrementCcn() { + ccn++; + } + + public void incrementCcn(int value) { + ccn += value; + } + + public String getName() { + return this.name; + } + + public int getNcss() { + return this.ncss; + } + + public int getCcn() { + return this.ccn; + } + + /* (non-Javadoc) + * @see net.morlhon.javacc.MetricGroup#forceUpdate() + */ + public void forceUpdate() { + ccn = 0; + ncss = extraNcss; + Iterator iterator = map.values().iterator(); + while (iterator.hasNext()) { + Metric metric = (Metric) iterator.next(); + ccn += metric.getCcn(); + ncss += metric.getNcss(); + } + } + +} Added: trunk/cherrypick-core/src/main/java/net/morlhon/javacc/MetricStack.java =================================================================== --- trunk/cherrypick-core/src/main/java/net/morlhon/javacc/MetricStack.java (rev 0) +++ trunk/cherrypick-core/src/main/java/net/morlhon/javacc/MetricStack.java 2006-05-31 21:30:53 UTC (rev 2) @@ -0,0 +1,34 @@ +package net.morlhon.javacc; + +import java.util.EmptyStackException; +import java.util.Stack; + +/** + * Stupid Stack wrapper to make code in jj template as smooth as possible. + * + * @author <a href="jea...@gm...">Jean-Laurent de Morlhon</a> + * + */ +public class MetricStack { + private Stack stack; + + public MetricStack() { + stack = new Stack(); + } + + public Metric pop() { + return (Metric)stack.pop(); + } + + public void push(Metric metric) { + stack.push(metric); + } + + public Metric peek() { + try { + return (Metric)stack.peek(); + } catch (EmptyStackException ese) { + return null; + } + } +} Added: trunk/cherrypick-core/src/main/java/net/morlhon/javacc/PackageMetric.java =================================================================== --- trunk/cherrypick-core/src/main/java/net/morlhon/javacc/PackageMetric.java (rev 0) +++ trunk/cherrypick-core/src/main/java/net/morlhon/javacc/PackageMetric.java 2006-05-31 21:30:53 UTC (rev 2) @@ -0,0 +1,12 @@ +package net.morlhon.javacc; + +public class PackageMetric extends AbstractMetric implements Metric { + + public PackageMetric(String name) { + super(name,50); + } + + public String toString() { + return new String("{package}" + getName()); + } +} Added: trunk/cherrypick-core/src/main/java/net/morlhon/javacc/ProgramMetric.java =================================================================== --- trunk/cherrypick-core/src/main/java/net/morlhon/javacc/ProgramMetric.java (rev 0) +++ trunk/cherrypick-core/src/main/java/net/morlhon/javacc/ProgramMetric.java 2006-05-31 21:30:53 UTC (rev 2) @@ -0,0 +1,14 @@ +package net.morlhon.javacc; + + +public class ProgramMetric extends AbstractMetric implements Metric { + + public ProgramMetric() { + super("program",100); + } + + public int classNumber() { + return size(); + } + +} Added: trunk/cherrypick-core/src/main/javacc/reference-Java1.5.jj =================================================================== --- trunk/cherrypick-core/src/main/javacc/reference-Java1.5.jj (rev 0) +++ trunk/cherrypick-core/src/main/javacc/reference-Java1.5.jj 2006-05-31 21:30:53 UTC (rev 2) @@ -0,0 +1,2267 @@ + +/* + * Copyright © 2002 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * California 95054, U.S.A. All rights reserved. Sun Microsystems, Inc. has + * intellectual property rights relating to technology embodied in the product + * that is described in this document. In particular, and without limitation, + * these intellectual property rights may include one or more of the U.S. + * patents listed at http://www.sun.com/patents and one or more additional + * patents or pending patent applications in the U.S. and in other countries. + * U.S. Government Rights - Commercial software. Government users are subject + * to the Sun Microsystems, Inc. standard license agreement and applicable + * provisions of the FAR and its supplements. Use is subject to license terms. + * Sun, Sun Microsystems, the Sun logo and Java are trademarks or registered + * trademarks of Sun Microsystems, Inc. in the U.S. and other countries. This + * product is covered and controlled by U.S. Export Control laws and may be + * subject to the export or import laws in other countries. Nuclear, missile, + * chemical biological weapons or nuclear maritime end uses or end users, + * whether direct or indirect, are strictly prohibited. Export or reexport + * to countries subject to U.S. embargo or to entities identified on U.S. + * export exclusion lists, including, but not limited to, the denied persons + * and specially designated nationals lists is strictly prohibited. + */ + +options { + JAVA_UNICODE_ESCAPE = true; + ERROR_REPORTING = false; + STATIC = false; + JDK_VERSION = "1.5"; +} + +PARSER_BEGIN(JavaParser) +package net.morlhon.javacc; + +import java.io.*; + +/** + * Grammar to parse Java version 1.5 + * @author Sreenivasa Viswanadha - Simplified and enhanced for 1.5 + */ +public class JavaParser extends AbstractParser +{ + public String packageName = ""; + private String dummyName; + private boolean returnFound; //context de methode + + /** + * Class to hold modifiers. + */ + static public final class ModifierSet + { + /* Definitions of the bits in the modifiers field. */ + public static final int PUBLIC = 0x0001; + public static final int PROTECTED = 0x0002; + public static final int PRIVATE = 0x0004; + public static final int ABSTRACT = 0x0008; + public static final int STATIC = 0x0010; + public static final int FINAL = 0x0020; + public static final int SYNCHRONIZED = 0x0040; + public static final int NATIVE = 0x0080; + public static final int TRANSIENT = 0x0100; + public static final int VOLATILE = 0x0200; + public static final int STRICTFP = 0x1000; + + /** A set of accessors that indicate whether the specified modifier + is in the set. */ + + public boolean isPublic(int modifiers) + { + return (modifiers & PUBLIC) != 0; + } + + public boolean isProtected(int modifiers) + { + return (modifiers & PROTECTED) != 0; + } + + public boolean isPrivate(int modifiers) + { + return (modifiers & PRIVATE) != 0; + } + + public boolean isStatic(int modifiers) + { + return (modifiers & STATIC) != 0; + } + + public boolean isAbstract(int modifiers) + { + return (modifiers & ABSTRACT) != 0; + } + + public boolean isFinal(int modifiers) + { + return (modifiers & FINAL) != 0; + } + + public boolean isNative(int modifiers) + { + return (modifiers & NATIVE) != 0; + } + + public boolean isStrictfp(int modifiers) + { + return (modifiers & STRICTFP) != 0; + } + + public boolean isSynchronized(int modifiers) + { + return (modifiers & SYNCHRONIZED) != 0; + } + + public boolean isTransient(int modifiers) + { + return (modifiers & TRANSIENT) != 0; + } + + public boolean isVolatile(int modifiers) + { + return (modifiers & VOLATILE) != 0; + } + + /** + * Removes the given modifier. + */ + static int removeModifier(int modifiers, int mod) + { + return modifiers & ~mod; + } + } + + public JavaParser(String fileName) + { + this(System.in); + try { + ReInit(new FileInputStream(new File(fileName))); + } + catch(Exception e) { + e.printStackTrace(); + } + } + +} + +PARSER_END(JavaParser) + +/* WHITE SPACE */ + +SKIP : +{ + " " +| "\t" +| "\n" +| "\r" +| "\f" +} + +/* COMMENTS */ + +MORE : +{ + <"/**" ~["/"]> { input_stream.backup(1); } : IN_FORMAL_COMMENT +| + "/*" : IN_MULTI_LINE_COMMENT +} + +SPECIAL_TOKEN : +{ + <SINGLE_LINE_COMMENT: "//" (~["\n", "\r"])* ("\n" | "\r" | "\r\n")?> +} + +<IN_FORMAL_COMMENT> +SPECIAL_TOKEN : +{ + <FORMAL_COMMENT: "*/" > : DEFAULT +} + +<IN_MULTI_LINE_COMMENT> +SPECIAL_TOKEN : +{ + <MULTI_LINE_COMMENT: "*/" > : DEFAULT +} + +<IN_FORMAL_COMMENT,IN_MULTI_LINE_COMMENT> +MORE : +{ + < ~[] > +} + +/* RESERVED WORDS AND LITERALS */ + +TOKEN : +{ + < ABSTRACT: "abstract" > +| < ASSERT: "assert" > +| < BOOLEAN: "boolean" > +| < BREAK: "break" > +| < BYTE: "byte" > +| < CASE: "case" > +| < CATCH: "catch" > +| < CHAR: "char" > +| < CLASS: "class" > +| < CONST: "const" > +| < CONTINUE: "continue" > +| < _DEFAULT: "default" > +| < DO: "do" > +| < DOUBLE: "double" > +| < ELSE: "else" > +| < ENUM: "enum" > +| < EXTENDS: "extends" > +| < FALSE: "false" > +| < FINAL: "final" > +| < FINALLY: "finally" > +| < FLOAT: "float" > +| < FOR: "for" > +| < GOTO: "goto" > +| < IF: "if" > +| < IMPLEMENTS: "implements" > +| < IMPORT: "import" > +| < INSTANCEOF: "instanceof" > +| < INT: "int" > +| < INTERFACE: "interface" > +| < LONG: "long" > +| < NATIVE: "native" > +| < NEW: "new" > +| < NULL: "null" > +| < PACKAGE: "package"> +| < PRIVATE: "private" > +| < PROTECTED: "protected" > +| < PUBLIC: "public" > +| < RETURN: "return" > +| < SHORT: "short" > +| < STATIC: "static" > +| < STRICTFP: "strictfp" > +| < SUPER: "super" > +| < SWITCH: "switch" > +| < SYNCHRONIZED: "synchronized" > +| < THIS: "this" > +| < THROW: "throw" > +| < THROWS: "throws" > +| < TRANSIENT: "transient" > +| < TRUE: "true" > +| < TRY: "try" > +| < VOID: "void" > +| < VOLATILE: "volatile" > +| < WHILE: "while" > +} + +/* LITERALS */ + +TOKEN : +{ + < INTEGER_LITERAL: + <DECIMAL_LITERAL> (["l","L"])? + | <HEX_LITERAL> (["l","L"])? + | <OCTAL_LITERAL> (["l","L"])? + > +| + < #DECIMAL_LITERAL: ["1"-"9"] (["0"-"9"])* > +| + < #HEX_LITERAL: "0" ["x","X"] (["0"-"9","a"-"f","A"-"F"])+ > +| + < #OCTAL_LITERAL: "0" (["0"-"7"])* > +| + < FLOATING_POINT_LITERAL: + <DECIMAL_FLOATING_POINT_LITERAL> + | <HEXADECIMAL_FLOATING_POINT_LITERAL> + > +| + < #DECIMAL_FLOATING_POINT_LITERAL: + (["0"-"9"])+ "." (["0"-"9"])* (<DECIMAL_EXPONENT>)? (["f","F","d","D"])? + | "." (["0"-"9"])+ (<DECIMAL_EXPONENT>)? (["f","F","d","D"])? + | (["0"-"9"])+ <DECIMAL_EXPONENT> (["f","F","d","D"])? + | (["0"-"9"])+ (<DECIMAL_EXPONENT>)? ["f","F","d","D"] + > +| + < #DECIMAL_EXPONENT: ["e","E"] (["+","-"])? (["0"-"9"])+ > +| + < #HEXADECIMAL_FLOATING_POINT_LITERAL: + "0" ["x", "X"] (["0"-"9","a"-"f","A"-"F"])+ (".")? <HEXADECIMAL_EXPONENT> (["f","F","d","D"])? + | "0" ["x", "X"] (["0"-"9","a"-"f","A"-"F"])* "." (["0"-"9","a"-"f","A"-"F"])+ <HEXADECIMAL_EXPONENT> (["f","F","d","D"])? + > +| + < #HEXADECIMAL_EXPONENT: ["p","P"] (["+","-"])? (["0"-"9"])+ > +| + < CHARACTER_LITERAL: + "'" + ( (~["'","\\","\n","\r"]) + | ("\\" + ( ["n","t","b","r","f","\\","'","\""] + | ["0"-"7"] ( ["0"-"7"] )? + | ["0"-"3"] ["0"-"7"] ["0"-"7"] + ) + ) + ) + "'" + > +| + < STRING_LITERAL: + "\"" + ( (~["\"","\\","\n","\r"]) + | ("\\" + ( ["n","t","b","r","f","\\","'","\""] + | ["0"-"7"] ( ["0"-"7"] )? + | ["0"-"3"] ["0"-"7"] ["0"-"7"] + ) + ) + )* + "\"" + > +} + +/* IDENTIFIERS */ + +TOKEN : +{ + < IDENTIFIER: <LETTER> (<PART_LETTER>)* > +| + < #LETTER: + [ // all chars for which Character.isIdentifierStart is true + "$", + "A"-"Z", + "_", + "a"-"z", + "\u00a2"-"\u00a5", + "\u00aa", + "\u00b5", + "\u00ba", + "\u00c0"-"\u00d6", + "\u00d8"-"\u00f6", + "\u00f8"-"\u021f", + "\u0222"-"\u0233", + "\u0250"-"\u02ad", + "\u02b0"-"\u02b8", + "\u02bb"-"\u02c1", + "\u02d0"-"\u02d1", + "\u02e0"-"\u02e4", + "\u02ee", + "\u037a", + "\u0386", + "\u0388"-"\u038a", + "\u038c", + "\u038e"-"\u03a1", + "\u03a3"-"\u03ce", + "\u03d0"-"\u03d7", + "\u03da"-"\u03f3", + "\u0400"-"\u0481", + "\u048c"-"\u04c4", + "\u04c7"-"\u04c8", + "\u04cb"-"\u04cc", + "\u04d0"-"\u04f5", + "\u04f8"-"\u04f9", + "\u0531"-"\u0556", + "\u0559", + "\u0561"-"\u0587", + "\u05d0"-"\u05ea", + "\u05f0"-"\u05f2", + "\u0621"-"\u063a", + "\u0640"-"\u064a", + "\u0671"-"\u06d3", + "\u06d5", + "\u06e5"-"\u06e6", + "\u06fa"-"\u06fc", + "\u0710", + "\u0712"-"\u072c", + "\u0780"-"\u07a5", + "\u0905"-"\u0939", + "\u093d", + "\u0950", + "\u0958"-"\u0961", + "\u0985"-"\u098c", + "\u098f"-"\u0990", + "\u0993"-"\u09a8", + "\u09aa"-"\u09b0", + "\u09b2", + "\u09b6"-"\u09b9", + "\u09dc"-"\u09dd", + "\u09df"-"\u09e1", + "\u09f0"-"\u09f3", + "\u0a05"-"\u0a0a", + "\u0a0f"-"\u0a10", + "\u0a13"-"\u0a28", + "\u0a2a"-"\u0a30", + "\u0a32"-"\u0a33", + "\u0a35"-"\u0a36", + "\u0a38"-"\u0a39", + "\u0a59"-"\u0a5c", + "\u0a5e", + "\u0a72"-"\u0a74", + "\u0a85"-"\u0a8b", + "\u0a8d", + "\u0a8f"-"\u0a91", + "\u0a93"-"\u0aa8", + "\u0aaa"-"\u0ab0", + "\u0ab2"-"\u0ab3", + "\u0ab5"-"\u0ab9", + "\u0abd", + "\u0ad0", + "\u0ae0", + "\u0b05"-"\u0b0c", + "\u0b0f"-"\u0b10", + "\u0b13"-"\u0b28", + "\u0b2a"-"\u0b30", + "\u0b32"-"\u0b33", + "\u0b36"-"\u0b39", + "\u0b3d", + "\u0b5c"-"\u0b5d", + "\u0b5f"-"\u0b61", + "\u0b85"-"\u0b8a", + "\u0b8e"-"\u0b90", + "\u0b92"-"\u0b95", + "\u0b99"-"\u0b9a", + "\u0b9c", + "\u0b9e"-"\u0b9f", + "\u0ba3"-"\u0ba4", + "\u0ba8"-"\u0baa", + "\u0bae"-"\u0bb5", + "\u0bb7"-"\u0bb9", + "\u0c05"-"\u0c0c", + "\u0c0e"-"\u0c10", + "\u0c12"-"\u0c28", + "\u0c2a"-"\u0c33", + "\u0c35"-"\u0c39", + "\u0c60"-"\u0c61", + "\u0c85"-"\u0c8c", + "\u0c8e"-"\u0c90", + "\u0c92"-"\u0ca8", + "\u0caa"-"\u0cb3", + "\u0cb5"-"\u0cb9", + "\u0cde", + "\u0ce0"-"\u0ce1", + "\u0d05"-"\u0d0c", + "\u0d0e"-"\u0d10", + "\u0d12"-"\u0d28", + "\u0d2a"-"\u0d39", + "\u0d60"-"\u0d61", + "\u0d85"-"\u0d96", + "\u0d9a"-"\u0db1", + "\u0db3"-"\u0dbb", + "\u0dbd", + "\u0dc0"-"\u0dc6", + "\u0e01"-"\u0e30", + "\u0e32"-"\u0e33", + "\u0e3f"-"\u0e46", + "\u0e81"-"\u0e82", + "\u0e84", + "\u0e87"-"\u0e88", + "\u0e8a", + "\u0e8d", + "\u0e94"-"\u0e97", + "\u0e99"-"\u0e9f", + "\u0ea1"-"\u0ea3", + "\u0ea5", + "\u0ea7", + "\u0eaa"-"\u0eab", + "\u0ead"-"\u0eb0", + "\u0eb2"-"\u0eb3", + "\u0ebd", + "\u0ec0"-"\u0ec4", + "\u0ec6", + "\u0edc"-"\u0edd", + "\u0f00", + "\u0f40"-"\u0f47", + "\u0f49"-"\u0f6a", + "\u0f88"-"\u0f8b", + "\u1000"-"\u1021", + "\u1023"-"\u1027", + "\u1029"-"\u102a", + "\u1050"-"\u1055", + "\u10a0"-"\u10c5", + "\u10d0"-"\u10f6", + "\u1100"-"\u1159", + "\u115f"-"\u11a2", + "\u11a8"-"\u11f9", + "\u1200"-"\u1206", + "\u1208"-"\u1246", + "\u1248", + "\u124a"-"\u124d", + "\u1250"-"\u1256", + "\u1258", + "\u125a"-"\u125d", + "\u1260"-"\u1286", + "\u1288", + "\u128a"-"\u128d", + "\u1290"-"\u12ae", + "\u12b0", + "\u12b2"-"\u12b5", + "\u12b8"-"\u12be", + "\u12c0", + "\u12c2"-"\u12c5", + "\u12c8"-"\u12ce", + "\u12d0"-"\u12d6", + "\u12d8"-"\u12ee", + "\u12f0"-"\u130e", + "\u1310", + "\u1312"-"\u1315", + "\u1318"-"\u131e", + "\u1320"-"\u1346", + "\u1348"-"\u135a", + "\u13a0"-"\u13f4", + "\u1401"-"\u166c", + "\u166f"-"\u1676", + "\u1681"-"\u169a", + "\u16a0"-"\u16ea", + "\u1780"-"\u17b3", + "\u17db", + "\u1820"-"\u1877", + "\u1880"-"\u18a8", + "\u1e00"-"\u1e9b", + "\u1ea0"-"\u1ef9", + "\u1f00"-"\u1f15", + "\u1f18"-"\u1f1d", + "\u1f20"-"\u1f45", + "\u1f48"-"\u1f4d", + "\u1f50"-"\u1f57", + "\u1f59", + "\u1f5b", + "\u1f5d", + "\u1f5f"-"\u1f7d", + "\u1f80"-"\u1fb4", + "\u1fb6"-"\u1fbc", + "\u1fbe", + "\u1fc2"-"\u1fc4", + "\u1fc6"-"\u1fcc", + "\u1fd0"-"\u1fd3", + "\u1fd6"-"\u1fdb", + "\u1fe0"-"\u1fec", + "\u1ff2"-"\u1ff4", + "\u1ff6"-"\u1ffc", + "\u203f"-"\u2040", + "\u207f", + "\u20a0"-"\u20af", + "\u2102", + "\u2107", + "\u210a"-"\u2113", + "\u2115", + "\u2119"-"\u211d", + "\u2124", + "\u2126", + "\u2128", + "\u212a"-"\u212d", + "\u212f"-"\u2131", + "\u2133"-"\u2139", + "\u2160"-"\u2183", + "\u3005"-"\u3007", + "\u3021"-"\u3029", + "\u3031"-"\u3035", + "\u3038"-"\u303a", + "\u3041"-"\u3094", + "\u309d"-"\u309e", + "\u30a1"-"\u30fe", + "\u3105"-"\u312c", + "\u3131"-"\u318e", + "\u31a0"-"\u31b7", + "\u3400"-"\u4db5", + "\u4e00"-"\u9fa5", + "\ua000"-"\ua48c", + "\uac00"-"\ud7a3", + "\uf900"-"\ufa2d", + "\ufb00"-"\ufb06", + "\ufb13"-"\ufb17", + "\ufb1d", + "\ufb1f"-"\ufb28", + "\ufb2a"-"\ufb36", + "\ufb38"-"\ufb3c", + "\ufb3e", + "\ufb40"-"\ufb41", + "\ufb43"-"\ufb44", + "\ufb46"-"\ufbb1", + "\ufbd3"-"\ufd3d", + "\ufd50"-"\ufd8f", + "\ufd92"-"\ufdc7", + "\ufdf0"-"\ufdfb", + "\ufe33"-"\ufe34", + "\ufe4d"-"\ufe4f", + "\ufe69", + "\ufe70"-"\ufe72", + "\ufe74", + "\ufe76"-"\ufefc", + "\uff04", + "\uff21"-"\uff3a", + "\uff3f", + "\uff41"-"\uff5a", + "\uff65"-"\uffbe", + "\uffc2"-"\uffc7", + "\uffca"-"\uffcf", + "\uffd2"-"\uffd7", + "\uffda"-"\uffdc", + "\uffe0"-"\uffe1", + "\uffe5"-"\uffe6" + ] + > +| + < #PART_LETTER: + [ // all chars for which Character.isIdentifierPart is true + "\u0000"-"\u0008", + "\u000e"-"\u001b", + "$", + "0"-"9", + "A"-"Z", + "_", + "a"-"z", + "\u007f"-"\u009f", + "\u00a2"-"\u00a5", + "\u00aa", + "\u00b5", + "\u00ba", + "\u00c0"-"\u00d6", + "\u00d8"-"\u00f6", + "\u00f8"-"\u021f", + "\u0222"-"\u0233", + "\u0250"-"\u02ad", + "\u02b0"-"\u02b8", + "\u02bb"-"\u02c1", + "\u02d0"-"\u02d1", + "\u02e0"-"\u02e4", + "\u02ee", + "\u0300"-"\u034e", + "\u0360"-"\u0362", + "\u037a", + "\u0386", + "\u0388"-"\u038a", + "\u038c", + "\u038e"-"\u03a1", + "\u03a3"-"\u03ce", + "\u03d0"-"\u03d7", + "\u03da"-"\u03f3", + "\u0400"-"\u0481", + "\u0483"-"\u0486", + "\u048c"-"\u04c4", + "\u04c7"-"\u04c8", + "\u04cb"-"\u04cc", + "\u04d0"-"\u04f5", + "\u04f8"-"\u04f9", + "\u0531"-"\u0556", + "\u0559", + "\u0561"-"\u0587", + "\u0591"-"\u05a1", + "\u05a3"-"\u05b9", + "\u05bb"-"\u05bd", + "\u05bf", + "\u05c1"-"\u05c2", + "\u05c4", + "\u05d0"-"\u05ea", + "\u05f0"-"\u05f2", + "\u0621"-"\u063a", + "\u0640"-"\u0655", + "\u0660"-"\u0669", + "\u0670"-"\u06d3", + "\u06d5"-"\u06dc", + "\u06df"-"\u06e8", + "\u06ea"-"\u06ed", + "\u06f0"-"\u06fc", + "\u070f"-"\u072c", + "\u0730"-"\u074a", + "\u0780"-"\u07b0", + "\u0901"-"\u0903", + "\u0905"-"\u0939", + "\u093c"-"\u094d", + "\u0950"-"\u0954", + "\u0958"-"\u0963", + "\u0966"-"\u096f", + "\u0981"-"\u0983", + "\u0985"-"\u098c", + "\u098f"-"\u0990", + "\u0993"-"\u09a8", + "\u09aa"-"\u09b0", + "\u09b2", + "\u09b6"-"\u09b9", + "\u09bc", + "\u09be"-"\u09c4", + "\u09c7"-"\u09c8", + "\u09cb"-"\u09cd", + "\u09d7", + "\u09dc"-"\u09dd", + "\u09df"-"\u09e3", + "\u09e6"-"\u09f3", + "\u0a02", + "\u0a05"-"\u0a0a", + "\u0a0f"-"\u0a10", + "\u0a13"-"\u0a28", + "\u0a2a"-"\u0a30", + "\u0a32"-"\u0a33", + "\u0a35"-"\u0a36", + "\u0a38"-"\u0a39", + "\u0a3c", + "\u0a3e"-"\u0a42", + "\u0a47"-"\u0a48", + "\u0a4b"-"\u0a4d", + "\u0a59"-"\u0a5c", + "\u0a5e", + "\u0a66"-"\u0a74", + "\u0a81"-"\u0a83", + "\u0a85"-"\u0a8b", + "\u0a8d", + "\u0a8f"-"\u0a91", + "\u0a93"-"\u0aa8", + "\u0aaa"-"\u0ab0", + "\u0ab2"-"\u0ab3", + "\u0ab5"-"\u0ab9", + "\u0abc"-"\u0ac5", + "\u0ac7"-"\u0ac9", + "\u0acb"-"\u0acd", + "\u0ad0", + "\u0ae0", + "\u0ae6"-"\u0aef", + "\u0b01"-"\u0b03", + "\u0b05"-"\u0b0c", + "\u0b0f"-"\u0b10", + "\u0b13"-"\u0b28", + "\u0b2a"-"\u0b30", + "\u0b32"-"\u0b33", + "\u0b36"-"\u0b39", + "\u0b3c"-"\u0b43", + "\u0b47"-"\u0b48", + "\u0b4b"-"\u0b4d", + "\u0b56"-"\u0b57", + "\u0b5c"-"\u0b5d", + "\u0b5f"-"\u0b61", + "\u0b66"-"\u0b6f", + "\u0b82"-"\u0b83", + "\u0b85"-"\u0b8a", + "\u0b8e"-"\u0b90", + "\u0b92"-"\u0b95", + "\u0b99"-"\u0b9a", + "\u0b9c", + "\u0b9e"-"\u0b9f", + "\u0ba3"-"\u0ba4", + "\u0ba8"-"\u0baa", + "\u0bae"-"\u0bb5", + "\u0bb7"-"\u0bb9", + "\u0bbe"-"\u0bc2", + "\u0bc6"-"\u0bc8", + "\u0bca"-"\u0bcd", + "\u0bd7", + "\u0be7"-"\u0bef", + "\u0c01"-"\u0c03", + "\u0c05"-"\u0c0c", + "\u0c0e"-"\u0c10", + "\u0c12"-"\u0c28", + "\u0c2a"-"\u0c33", + "\u0c35"-"\u0c39", + "\u0c3e"-"\u0c44", + "\u0c46"-"\u0c48", + "\u0c4a"-"\u0c4d", + "\u0c55"-"\u0c56", + "\u0c60"-"\u0c61", + "\u0c66"-"\u0c6f", + "\u0c82"-"\u0c83", + "\u0c85"-"\u0c8c", + "\u0c8e"-"\u0c90", + "\u0c92"-"\u0ca8", + "\u0caa"-"\u0cb3", + "\u0cb5"-"\u0cb9", + "\u0cbe"-"\u0cc4", + "\u0cc6"-"\u0cc8", + "\u0cca"-"\u0ccd", + "\u0cd5"-"\u0cd6", + "\u0cde", + "\u0ce0"-"\u0ce1", + "\u0ce6"-"\u0cef", + "\u0d02"-"\u0d03", + "\u0d05"-"\u0d0c", + "\u0d0e"-"\u0d10", + "\u0d12"-"\u0d28", + "\u0d2a"-"\u0d39", + "\u0d3e"-"\u0d43", + "\u0d46"-"\u0d48", + "\u0d4a"-"\u0d4d", + "\u0d57", + "\u0d60"-"\u0d61", + "\u0d66"-"\u0d6f", + "\u0d82"-"\u0d83", + "\u0d85"-"\u0d96", + "\u0d9a"-"\u0db1", + "\u0db3"-"\u0dbb", + "\u0dbd", + "\u0dc0"-"\u0dc6", + "\u0dca", + "\u0dcf"-"\u0dd4", + "\u0dd6", + "\u0dd8"-"\u0ddf", + "\u0df2"-"\u0df3", + "\u0e01"-"\u0e3a", + "\u0e3f"-"\u0e4e", + "\u0e50"-"\u0e59", + "\u0e81"-"\u0e82", + "\u0e84", + "\u0e87"-"\u0e88", + "\u0e8a", + "\u0e8d", + "\u0e94"-"\u0e97", + "\u0e99"-"\u0e9f", + "\u0ea1"-"\u0ea3", + "\u0ea5", + "\u0ea7", + "\u0eaa"-"\u0eab", + "\u0ead"-"\u0eb9", + "\u0ebb"-"\u0ebd", + "\u0ec0"-"\u0ec4", + "\u0ec6", + "\u0ec8"-"\u0ecd", + "\u0ed0"-"\u0ed9", + "\u0edc"-"\u0edd", + "\u0f00", + "\u0f18"-"\u0f19", + "\u0f20"-"\u0f29", + "\u0f35", + "\u0f37", + "\u0f39", + "\u0f3e"-"\u0f47", + "\u0f49"-"\u0f6a", + "\u0f71"-"\u0f84", + "\u0f86"-"\u0f8b", + "\u0f90"-"\u0f97", + "\u0f99"-"\u0fbc", + "\u0fc6", + "\u1000"-"\u1021", + "\u1023"-"\u1027", + "\u1029"-"\u102a", + "\u102c"-"\u1032", + "\u1036"-"\u1039", + "\u1040"-"\u1049", + "\u1050"-"\u1059", + "\u10a0"-"\u10c5", + "\u10d0"-"\u10f6", + "\u1100"-"\u1159", + "\u115f"-"\u11a2", + "\u11a8"-"\u11f9", + "\u1200"-"\u1206", + "\u1208"-"\u1246", + "\u1248", + "\u124a"-"\u124d", + "\u1250"-"\u1256", + "\u1258", + "\u125a"-"\u125d", + "\u1260"-"\u1286", + "\u1288", + "\u128a"-"\u128d", + "\u1290"-"\u12ae", + "\u12b0", + "\u12b2"-"\u12b5", + "\u12b8"-"\u12be", + "\u12c0", + "\u12c2"-"\u12c5", + "\u12c8"-"\u12ce", + "\u12d0"-"\u12d6", + "\u12d8"-"\u12ee", + "\u12f0"-"\u130e", + "\u1310", + "\u1312"-"\u1315", + "\u1318"-"\u131e", + "\u1320"-"\u1346", + "\u1348"-"\u135a", + "\u1369"-"\u1371", + "\u13a0"-"\u13f4", + "\u1401"-"\u166c", + "\u166f"-"\u1676", + "\u1681"-"\u169a", + "\u16a0"-"\u16ea", + "\u1780"-"\u17d3", + "\u17db", + "\u17e0"-"\u17e9", + "\u180b"-"\u180e", + "\u1810"-"\u1819", + "\u1820"-"\u1877", + "\u1880"-"\u18a9", + "\u1e00"-"\u1e9b", + "\u1ea0"-"\u1ef9", + "\u1f00"-"\u1f15", + "\u1f18"-"\u1f1d", + "\u1f20"-"\u1f45", + "\u1f48"-"\u1f4d", + "\u1f50"-"\u1f57", + "\u1f59", + "\u1f5b", + "\u1f5d", + "\u1f5f"-"\u1f7d", + "\u1f80"-"\u1fb4", + "\u1fb6"-"\u1fbc", + "\u1fbe", + "\u1fc2"-"\u1fc4", + "\u1fc6"-"\u1fcc", + "\u1fd0"-"\u1fd3", + "\u1fd6"-"\u1fdb", + "\u1fe0"-"\u1fec", + "\u1ff2"-"\u1ff4", + "\u1ff6"-"\u1ffc", + "\u200c"-"\u200f", + "\u202a"-"\u202e", + "\u203f"-"\u2040", + "\u206a"-"\u206f", + "\u207f", + "\u20a0"-"\u20af", + "\u20d0"-"\u20dc", + "\u20e1", + "\u2102", + "\u2107", + "\u210a"-"\u2113", + "\u2115", + "\u2119"-"\u211d", + "\u2124", + "\u2126", + "\u2128", + "\u212a"-"\u212d", + "\u212f"-"\u2131", + "\u2133"-"\u2139", + "\u2160"-"\u2183", + "\u3005"-"\u3007", + "\u3021"-"\u302f", + "\u3031"-"\u3035", + "\u3038"-"\u303a", + "\u3041"-"\u3094", + "\u3099"-"\u309a", + "\u309d"-"\u309e", + "\u30a1"-"\u30fe", + "\u3105"-"\u312c", + "\u3131"-"\u318e", + "\u31a0"-"\u31b7", + "\u3400"-"\u4db5", + "\u4e00"-"\u9fa5", + "\ua000"-"\ua48c", + "\uac00"-"\ud7a3", + "\uf900"-"\ufa2d", + "\ufb00"-"\ufb06", + "\ufb13"-"\ufb17", + "\ufb1d"-"\ufb28", + "\ufb2a"-"\ufb36", + "\ufb38"-"\ufb3c", + "\ufb3e", + "\ufb40"-"\ufb41", + "\ufb43"-"\ufb44", + "\ufb46"-"\ufbb1", + "\ufbd3"-"\ufd3d", + "\ufd50"-"\ufd8f", + "\ufd92"-"\ufdc7", + "\ufdf0"-"\ufdfb", + "\ufe20"-"\ufe23", + "\ufe33"-"\ufe34", + "\ufe4d"-"\ufe4f", + "\ufe69", + "\ufe70"-"\ufe72", + "\ufe74", + "\ufe76"-"\ufefc", + "\ufeff", + "\uff04", + "\uff10"-"\uff19", + "\uff21"-"\uff3a", + "\uff3f", + "\uff41"-"\uff5a", + "\uff65"-"\uffbe", + "\uffc2"-"\uffc7", + "\uffca"-"\uffcf", + "\uffd2"-"\uffd7", + "\uffda"-"\uffdc", + "\uffe0"-"\uffe1", + "\uffe5"-"\uffe6", + "\ufff9"-"\ufffb" + ] + > +} + +/* SEPARATORS */ + +TOKEN : +{ + < LPAREN: "(" > +| < RPAREN: ")" > +| < LBRACE: "{" > +| < RBRACE: "}" > +| < LBRACKET: "[" > +| < RBRACKET: "]" > +| < SEMICOLON: ";" > +| < COMMA: "," > +| < DOT: "." > +| < AT: "@" > +} + +/* OPERATORS */ + +TOKEN : +{ + < ASSIGN: "=" > +| < LT: "<" > +| < BANG: "!" > +| < TILDE: "~" > +| < HOOK: "?" > +| < COLON: ":" > +| < EQ: "==" > +| < LE: "<=" > +| < GE: ">=" > +| < NE: "!=" > +| < SC_OR: "||" > +| < SC_AND: "&&" > +| < INCR: "++" > +| < DECR: "--" > +| < PLUS: "+" > +| < MINUS: "-" > +| < STAR: "*" > +| < SLASH: "/" > +| < BIT_AND: "&" > +| < BIT_OR: "|" > +| < XOR: "^" > +| < REM: "%" > +| < LSHIFT: "<<" > +| < PLUSASSIGN: "+=" > +| < MINUSASSIGN: "-=" > +| < STARASSIGN: "*=" > +| < SLASHASSIGN: "/=" > +| < ANDASSIGN: "&=" > +| < ORASSIGN: "|=" > +| < XORASSIGN: "^=" > +| < REMASSIGN: "%=" > +| < LSHIFTASSIGN: "<<=" > +| < RSIGNEDSHIFTASSIGN: ">>=" > +| < RUNSIGNEDSHIFTASSIGN: ">>>=" > +| < ELLIPSIS: "..." > +} + +/* >'s need special attention due to generics syntax. */ +TOKEN : +{ + < RUNSIGNEDSHIFT: ">>>" > + { + matchedToken.kind = GT; + ((Token.GTToken)matchedToken).realKind = RUNSIGNEDSHIFT; + input_stream.backup(2); + matchedToken.image = ">"; + } +| < RSIGNEDSHIFT: ">>" > + { + matchedToken.kind = GT; + ((Token.GTToken)matchedToken).realKind = RSIGNEDSHIFT; + input_stream.backup(1); + matchedToken.image = ">"; + } +| < GT: ">" > +} + + +/***************************************** + * THE JAVA LANGUAGE GRAMMAR STARTS HERE * + *****************************************/ + +/* + * Program structuring syntax follows. + */ + +void CompilationUnit(): +{} +{ + [ LOOKAHEAD( ( Annotation() )* "package" ) PackageDeclaration() ] + ( ImportDeclaration() )* + ( TypeDeclaration() )* + ( < "\u001a" > )? + ( <STUFF_TO_IGNORE: ~[]> )? + <EOF> + { + //System.out.println(getToken(0).endLine); + } +} + +void PackageDeclaration(): +{} +{ + Modifiers() "package" Name() ";" + { + // ## MODIF ## + //TODO packageName is a parser scope variable + packageName = new String(dummyName); + PackageMetric packageMetric = new PackageMetric(dummyName); + packageMetric.incrementNcss(); + getContext().setRootMetric(packageMetric); + } +} + +void ImportDeclaration(): +{} +{ + "import" [ "static" ] Name() [ "." "*" ] ";" + { + // ## MODIF ## + // FIXME : This also cause the *_kind of import. + // how to count them ? + getContext().getCurrentMetric().incrementNcss(); + } +} + +/* + * Modifiers. We match all modifiers in a single rule to reduce the chances of + * syntax errors for simple modifier mistakes. It will also enable us to give + * better error messages. + */ + +int Modifiers(): +{ + int modifiers = 0; +} +{ + ( + LOOKAHEAD(2) + ( + "public" { modifiers |= ModifierSet.PUBLIC; } + | + "static" { modifiers |= ModifierSet.STATIC; } + | + "protected" { modifiers |= ModifierSet.PROTECTED; } + | + "private" { modifiers |= ModifierSet.PRIVATE; } + | + "final" { modifiers |= ModifierSet.FINAL; } + | + "abstract" { modifiers |= ModifierSet.ABSTRACT; } + | + "synchronized" { modifiers |= ModifierSet.SYNCHRONIZED; } + | + "native" { modifiers |= ModifierSet.NATIVE; } + | + "transient" { modifiers |= ModifierSet.TRANSIENT; } + | + "volatile" { modifiers |= ModifierSet.VOLATILE; } + | + "strictfp" { modifiers |= ModifierSet.STRICTFP; } + | + Annotation() + ) + )* + + { + return modifiers; + } +} + +/* + * Declaration syntax follows. + */ +void TypeDeclaration(): +{ + int modifiers; +} +{ + ";" +| + modifiers = Modifiers() + ( + ClassOrInterfaceDeclaration(modifiers) + | + EnumDeclaration(modifiers) + | + AnnotationTypeDeclaration(modifiers) + ) +} + + +void ClassOrInterfaceDeclaration(int modifiers): +{ + boolean isInterface = false; +} +{ + ( "class" | "interface" { isInterface = true; } ) + <IDENTIFIER> + { + // ## MODIF ## + ClassMetric classMetric = new ClassMetric(packageName + "." + getToken(0).toString()); + classMetric.setPackageName(packageName); + // FIXME here we should count somehow the ncss of package & import + classMetric.incrementNcss(); + classMetric.setLineNumber(getToken(0).beginLine); + getContext().setCurrentMetric(classMetric); + } + [ TypeParameters() ] + [ ExtendsList(isInterface) ] + [ ImplementsList(isInterface) ] + ClassOrInterfaceBody(isInterface) + { + // ## MODIF ## + getContext().endCurrentMetric(); + } +} + +void ExtendsList(boolean isInterface): +{ + boolean extendsMoreThanOne = false; +} +{ + "extends" ClassOrInterfaceType() + ( "," ClassOrInterfaceType() { extendsMoreThanOne = true; } )* + { + if (extendsMoreThanOne && !isInterface) + throw new ParseException("A class cannot extend more than one other class"); + } +} + +void ImplementsList(boolean isInterface): +{} +{ + "implements" ClassOrInterfaceType() + ( "," ClassOrInterfaceType() )* + { + if (isInterface) + throw new ParseException("An interface cannot implement other interfaces"); + } +} + +void EnumDeclaration(int modifiers): +{} +{ + "enum" <IDENTIFIER> + [ ImplementsList(false) ] + EnumBody() +} + +void EnumBody(): +{} +{ + "{" + [ EnumConstant() ( LOOKAHEAD(2) "," EnumConstant() )* ] + [ "," ] + [ ";" ( ClassOrInterfaceBodyDeclaration(false) )* ] + "}" +} + +void EnumConstant(): +{} +{ + Modifiers() <IDENTIFIER> [ Arguments() ] [ ClassOrInterfaceBody(false) ] +} + +void TypeParameters(): +{} +{ + "<" TypeParameter() ( "," TypeParameter() )* ">" +} + +void TypeParameter(): +{} +{ + <IDENTIFIER> [ TypeBound() ] +} + +void TypeBound(): +{} +{ + "extends" ClassOrInterfaceType() ( "&" ClassOrInterfaceType() )* +} + +void ClassOrInterfaceBody(boolean isInterface): +{} +{ + "{" ( ClassOrInterfaceBodyDeclaration(isInterface) )* "}" +} + +void ClassOrInterfaceBodyDeclaration(boolean isInterface): +{ + boolean isNestedInterface = false; + int modifiers; +} +{ + LOOKAHEAD(2) + Initializer() + { + if (isInterface) + throw new ParseException("An interface cannot have initializers"); + } +| + modifiers = Modifiers() // Just get all the modifiers out of the way. If you want to do + // more checks, pass the modifiers down to the member + ( + ClassOrInterfaceDeclaration(modifiers) + | + EnumDeclaration(modifiers) + | + LOOKAHEAD( [ TypeParameters() ] <IDENTIFIER> "(" ) + ConstructorDeclaration() + | + LOOKAHEAD( Type() <IDENTIFIER> ( "[" "]" )* ( "," | "=" | ";" ) ) + FieldDeclaration(modifiers) + | + MethodDeclaration(modifiers) + ) +| + ";" +} + +void FieldDeclaration(int modifiers): +{} +{ + // Modifiers are already matched in the caller + Type() VariableDeclarator() ( "," VariableDeclarator() )* ";" + { + // ## MODIF ## + getContext().getCurrentMetric().incrementNcss();; + } +} + +void VariableDeclarator(): +{} +{ + VariableDeclaratorId() [ "=" VariableInitializer() ] +} + +void VariableDeclaratorId(): +{} +{ + <IDENTIFIER> ( "[" "]" )* +} + +void VariableInitializer(): +{} +{ + ArrayInitializer() +| + Expression() +} + +void ArrayInitializer(): +{} +{ + "{" [ VariableInitializer() ( LOOKAHEAD(2) "," VariableInitializer() )* ] [ ","... [truncated message content] |
|
From: <jea...@us...> - 2006-05-31 21:28:32
|
Revision: 1 Author: jeanlaurent Date: 2006-05-31 14:28:23 -0700 (Wed, 31 May 2006) ViewCVS: http://svn.sourceforge.net/cherrypick/?rev=1&view=rev Log Message: ----------- Created folder remotely Added Paths: ----------- trunk/ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |