Giter Club home page Giter Club logo

scalagen's People

Contributors

dnadolny avatar jamesmcmahon avatar timowest avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

scalagen's Issues

Scala IDE integration?

Hello,

I'm a student who's been working on Scala IDE this summer (GSoC) and I randomly stumbled onto this project.

Since I have some experience with writing Scala IDE plugins (see https://github.com/SandroGrzicic/sbtconsole), I was wondering if you would be up for collaborating with me on writing a Scalagen plugin for Scala IDE.

In short, I would do most/all of the work. It seems that Scalagen can be used from the command line as an external process, but also programatically (https://github.com/mysema/scalagen/blob/master/scalagen/src/main/scala/com/mysema/scalagen/Converter.scala) (although it would be nice if it there was a method accepting String input and giving back String output) which means that it could be very easily made into a Scala IDE plugin and later maybe integrated within Scala IDE itself.

So, what do you think? Again, from my perspective it seems easy enough to do.

By the way, this is probably not the best question to ask this but I didn't see a link to a mailing list or a contact email. :)

Sandro

handle embedded for loops

for (element <- elements) {
  for (annotation <- element.getAnnotations) {
    annotations.put(annotation.annotationType(), annotation)
  }
}

should be rendered as

for (element <- elements; annotation <- element.getAnnotations) {
  annotations.put(annotation.annotationType(), annotation)
}

Simplify if/else patterns

turn

if (a == a1) return b1
else if (a == a2) return b2
else return x

into

a match {
  case a1 => b1
  case a2 => b2
  case _ => x
}

Fields/methods from boxed primitives don't compile

If you have the java double d = Double.MAX_VALUE;, converting it gives val d = Double.MAX_VALUE, which doesn't compile because in Java an unqualified Double means java.lang.Double, but in Scala it means scala.Double which doesn't have a MAX_VALUE field, instead it has a MaxValue field.

This is the same with many other boxed primitives (Float, Byte, Short, etc), and any methods on them that are not present in Scala's version (eg Double.doubleToLongBits(1.0)).

There could be special cases for these fields and methods to replace them with the Scala equivalent when present, or to change unqualified Double/Float/etc to be fully qualified with java.lang otherwise.

Bad parameter of ancestor's constructor when Java argument is different from the field name

From this Java

public Concept(Term tm, Memory memory) {
    super(tm.getName());
    term = tm;
}

This gets generated:

class Concept(@BeanProperty var term: Term, var memory: Memory) extends Item(tm.getName) {

( should be Item(term.getName) )

The Java source:
https://open-nars.googlecode.com/svn/trunk/nars/entity/Concept.java

The generated Scala (hand edited) :
https://open-nars.googlecode.com/svn/trunk/nars_core/src/main/scala/nars/entity/Concept.scala

handling lazy init bean property patterns

handling lazy init bean property patterns

public class LazyInitBeanAccessor {
   private String value;   
   public String getValue() {
       if (value == null) {
           value = "XXX";
       }
       return value;
   }        
}

Build failing on Mac OS X (snow leopard)

Hey,

I tried to run the build 'mvn clean package' on my machine but it fails many of the tests:

Results :

Tests in error:
Convert_Creates_Files(com.mysema.scalagen.ConverterTest)
Convert_Creates_File_with_Content(com.mysema.scalagen.ConverterTest)
Dump(com.mysema.scalagen.ScalaDumpVisitorTest)
Compile(com.mysema.scalagen.ScalaCompilationTest)
Control(com.mysema.scalagen.SerializationTest)
AbstractCodeWriter(com.mysema.scalagen.SerializationTest)
ArrayConstructorExpression(com.mysema.scalagen.SerializationTest)
Bean(com.mysema.scalagen.SerializationTest)
Bean2(com.mysema.scalagen.SerializationTest)
BeanWithUnderscores(com.mysema.scalagen.SerializationTest)
Casts(com.mysema.scalagen.SerializationTest)
ConstantImpl(com.mysema.scalagen.SerializationTest)
DateTimeExpression(com.mysema.scalagen.SerializationTest)
IfElse(com.mysema.scalagen.SerializationTest)
Immutable(com.mysema.scalagen.SerializationTest)
Modifiers(com.mysema.scalagen.SerializationTest)
Ops(com.mysema.scalagen.SerializationTest)
Reserved(com.mysema.scalagen.SerializationTest)
Resource(com.mysema.scalagen.SerializationTest)
SimpleCompiler(com.mysema.scalagen.SerializationTest)
SwitchCase(com.mysema.scalagen.SerializationTest)
TryCatch(com.mysema.scalagen.SerializationTest)
WithStaticAndInstance(com.mysema.scalagen.SerializationTest)

Tests run: 53, Failures: 0, Errors: 23, Skipped: 1

Weirdly when I look in the target/surefire-reports directory I see an entry for each failed test but there's pretty much no information in there as to why they failed..

Problem with converting loops to use map

Java:

boolean method(String str) {
    for (String b : java.util.Arrays.asList("a", "b")) {
        if (str.startsWith(b)) {
            return true;
        }
    }
    return false;
}

converted to Scala yields:

  def method(str: String): Boolean = {
    java.util.Arrays.asList("a", "b").find(str.startsWith(_))
      .map(true)
      .getOrElse(false)
  }

which has a compile error with the .map(true). This should be .map(_ => true).
I have written in my notes "Probably in ControlStatements.createFindCall", but I haven't looked in to it more.

further improve equals handling

override def equals(o: Any): Boolean = {
  o.isInstanceOf[Resource] && o.asInstanceOf[Resource].path == path
}

should be

override def equals(o: Any): Boolean = o match {
  case o: Resource => o.path == path
  case _ => false
}

NPE in Helpers$RichBlockStmt.apply(Helpers.scala:72)

Here is the offending Java source :
https://open-nars.googlecode.com/svn/trunk/nars/storage/Bag.java

I'm using the git version of scalagen.

Here is the stack :
Caused by: java.lang.NullPointerException
at com.mysema.scalagen.Helpers$RichBlockStmt.apply(Helpers.scala:72)
at com.mysema.scalagen.Properties$$anonfun$visit$2.apply(Properties.scala:51)
at com.mysema.scalagen.Properties$$anonfun$visit$2.apply(Properties.scala:48)
at scala.collection.LinearSeqOptimized$class.foreach(LinearSeqOptimized.scala:59)
at scala.collection.immutable.List.foreach(List.scala:45)
at com.mysema.scalagen.Properties.visit(Properties.scala:48)
at com.mysema.scalagen.Properties.visit(Properties.scala:27)
at japa.parser.ast.body.ClassOrInterfaceDeclaration.accept(ClassOrInterfaceDeclaration.java:71)

Conversion drops a constructor

Starting from the Java:

class A {
    public A(String str) {}
}
class B extends A {
    public B() {
        super("some value");
    }
    public B(String str) {
        super(str);
    }
}

Converting the class B gives:

  class B extends A {
    def this(str: String) {
      super(str)
    }
  }

The default constructor that called super("some value") is silently dropped.

simplify equals implementations

turn

override def equals(obj: Any): Boolean = {
  if (obj == this) {
    true
  } else if (obj.isInstanceOf[JoinFlag]) {
    obj.asInstanceOf[JoinFlag].flag == flag
  } else {
    false
  }
}

into

override def equals(obj: Any) : Boolean = obj match {
  case obj: JoinFlag => obj.flag == flag
  case _ => false
}

support for lazy val constructs

convert following patterns

private Type variable = null

public Type variable() {
  if (variable == null) {
    variable = ...
  }
  return variable;
}

into

lazy val variable: Type = ....

Simplify certain for / if / return patterns

def getFormat(contentType: String, defaultFormat: Format): Format = {
  for (format <- values if format.mimetype == contentType) {
    return format
  }
  defaultFormat
}

could be expressed as

def getFormat(contentType: String, defaultFormat: Format): Format = {
  values.find(_.mimetype == contenType).getOrElse(defaultFormat)
}

useless and incorrect super() generated

In this example, title is transmitted by calling the ancestor constructor in the main constructor of BagWindow :

class BagWindow(var bag: Bag[_], title: String)
extends NarsFrame(title) with ActionListener with AdjustmentListener {

but scalagen generates an useless and incorrect super() ( line 53 ) :
super(title)

The Java source:
https://open-nars.googlecode.com/svn/trunk/nars/gui/BagWindow.java

The generated Scala :
https://open-nars.googlecode.com/svn/trunk/nars_core/src/main/scala/nars/gui/BagWindow.scala

Jar for Scala 2.9 and 2.10

Right now, scalagen is only compiled for Scala 2.9. I'm working on a Scala IDE plugin backed by scalagen, but in order to have it available for both Scala IDE targets I need a version of the scalagen jar compiled for Scala 2.10 (as well as 2.9).

It would be ideal if scalagen was published to a maven repository for both versions, using the sbt naming convention. To do it manually, in the pom.xml you would change the scala.version property to 2.10.1 and change the artifactId to scalagen_2.10.1 and publish that, and again for 2.9.3 (or 2.9.1 if there's a reason to stick with that). See http://mvnrepository.com/artifact/com.typesafe.akka for an example of this.

ugly exception when running scalagen:main

This is the exception when I run the 0.1.3 version of scalagen against the project hosted here : https://code.google.com/p/blockplus/source/browse/

I'd be happy to help you reproduce the issue or investigate further.

environment

java -version
java version "1.7.0_09"
Java(TM) SE Runtime Environment (build 1.7.0_09-b05)
Java HotSpot(TM) 64-Bit Server VM (build 23.5-b02, mixed mode)

mvn -V
Apache Maven 3.0.3 (r1075438; 2011-02-28 18:31:09+0100)
Maven home: C:\dev\tools\apache-maven-3.0.3\bin..
Java version: 1.7.0_09, vendor: Oracle Corporation
Java home: C:\Program Files\Java\jre7
Default locale: en_US, platform encoding: Cp1252
OS name: "windows 7", version: "6.1", arch: "amd64", family: "windows"

exception

java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:290)
at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:230)
at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:409)
at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:352)
Caused by: scala.collection.parallel.package$CompositeThrowable: Multiple exceptions thrown during a parallel computation: (java.lang.ClassCastException: japa.parser.ast.stmt.IfStmt cannot be cast to japa.parser.ast.stmt.BlockStmt,List(com.mysema.scalagen.ControlStatements.visit(ControlStatements.scala:91), com.mysema.scalagen.ControlStatements.visit(ControlStatements.scala:25), japa.parser.ast.stmt.ForeachStmt.accept(ForeachStmt.java:58), com.mysema.scalagen.ModifierVisitor.filter(ModifierVisitor.scala:41), com.mysema.scalagen.ModifierVisitor.visit(ModifierVisitor.scala:117), com.mysema.scalagen.ControlStatements.visit(ControlStatements.scala:104), com.mysema.scalagen.ControlStatements.visit(ControlStatements.scala:25), japa.parser.ast.stmt.BlockStmt.accept(BlockStmt.java:50), com.mysema.scalagen.ModifierVisitor.filter(ModifierVisitor.scala:28), com.mysema.scalagen.ModifierVisitor.visit(ModifierVisitor.scala:338), com.mysema.scalagen.ModifierVisitor.visit(ModifierVisitor.scala:25), japa.parser.ast.body.MethodDeclaration.accept(MethodDeclaration.java:97), com.mysema.scalagen.ModifierVisitor.filter(ModifierVisitor.scala:41), com.mysema.scalagen.ModifierVisitor.visit(ModifierVisitor.scala:142), com.mysema.scalagen.ModifierVisitor.visit(ModifierVisitor.scala:25), japa.parser.ast.body.ClassOrInterfaceDeclaration.accept(ClassOrInterfaceDeclaration.java:71), com.mysema.scalagen.ModifierVisitor.filter(ModifierVisitor.scala:41), com.mysema.scalagen.UnitTransformer$UnitTransformerBase.visit(UnitTransformer.scala:54), com.mysema.scalagen.UnitTransformer$UnitTransformerBase.visit(UnitTransformer.scala:47), japa.parser.ast.CompilationUnit.accept(CompilationUnit.java:87), com.mysema.scalagen.ControlStatements.transform(ControlStatements.scala:49), com.mysema.scalagen.Converter$$anonfun$2.apply(Converter.scala:74), com.mysema.scalagen.Converter$$anonfun$2.apply(Converter.scala:74), scala.collection.LinearSeqOptimized$class.foldLeft(LinearSeqOptimized.scala:111), scala.collection.immutable.List.foldLeft(List.scala:45), com.mysema.scalagen.Converter.toScala(Converter.scala:74), com.mysema.scalagen.Converter.convertFile(Converter.scala:66), com.mysema.scalagen.Converter$$anonfun$convert$2.apply(Converter.scala:61), com.mysema.scalagen.Converter$$anonfun$convert$2.apply(Converter.scala:61), scala.collection.parallel.mutable.ParArray$ParArrayIterator.foreach_quick(ParArray.scala:143), scala.collection.parallel.mutable.ParArray$ParArrayIterator.foreach(ParArray.scala:136), scala.collection.parallel.ParIterableLike$Foreach.leaf(ParIterableLike.scala:896), scala.collection.parallel.Tasks$Task$$anonfun$tryLeaf$1.apply$mcV$sp(Tasks.scala:66), scala.collection.parallel.Tasks$Task$class.tryLeaf(Tasks.scala:68), scala.collection.parallel.ParIterableLike$Foreach.tryLeaf(ParIterableLike.scala:894), scala.collection.parallel.AdaptiveWorkStealingTasks$TaskImpl$class.internal(Tasks.scala:179), scala.collection.parallel.AdaptiveWorkStealingThreadPoolTasks$TaskImpl.internal(Tasks.scala:521), scala.collection.parallel.AdaptiveWorkStealingTasks$TaskImpl$class.compute(Tasks.scala:164), scala.collection.parallel.AdaptiveWorkStealingThreadPoolTasks$TaskImpl.compute(Tasks.scala:521), scala.collection.parallel.ThreadPoolTasks$TaskImpl$class.run(Tasks.scala:273), scala.collection.parallel.AdaptiveWorkStealingThreadPoolTasks$TaskImpl.run(Tasks.scala:521), java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source), java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source), java.util.concurrent.FutureTask.run(Unknown Source), java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source), java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source), java.lang.Thread.run(Unknown Source))), (java.lang.ClassCastException: japa.parser.ast.stmt.ForeachStmt cannot be cast to japa.parser.ast.stmt.BlockStmt,List(com.mysema.scalagen.ControlStatements.visit(ControlStatements.scala:91), com.mysema.scalagen.ControlStatements.visit(ControlStatements.scala:25), japa.parser.ast.stmt.ForeachStmt.accept(ForeachStmt.java:58), com.mysema.scalagen.ModifierVisitor.filter(ModifierVisitor.scala:41), com.mysema.scalagen.ModifierVisitor.visit(ModifierVisitor.scala:117), com.mysema.scalagen.ControlStatements.visit(ControlStatements.scala:104), com.mysema.scalagen.ControlStatements.visit(ControlStatements.scala:25), japa.parser.ast.stmt.BlockStmt.accept(BlockStmt.java:50), com.mysema.scalagen.ModifierVisitor.filter(ModifierVisitor.scala:28), com.mysema.scalagen.ModifierVisitor.visit(ModifierVisitor.scala:338), com.mysema.scalagen.ModifierVisitor.visit(ModifierVisitor.scala:25), japa.parser.ast.body.MethodDeclaration.accept(MethodDeclaration.java:97), com.mysema.scalagen.ModifierVisitor.filter(ModifierVisitor.scala:41), com.mysema.scalagen.ModifierVisitor.visit(ModifierVisitor.scala:142), com.mysema.scalagen.ModifierVisitor.visit(ModifierVisitor.scala:25), japa.parser.ast.body.ClassOrInterfaceDeclaration.accept(ClassOrInterfaceDeclaration.java:71), com.mysema.scalagen.ModifierVisitor.filter(ModifierVisitor.scala:41), com.mysema.scalagen.UnitTransformer$UnitTransformerBase.visit(UnitTransformer.scala:54), com.mysema.scalagen.UnitTransformer$UnitTransformerBase.visit(UnitTransformer.scala:47), japa.parser.ast.CompilationUnit.accept(CompilationUnit.java:87), com.mysema.scalagen.ControlStatements.transform(ControlStatements.scala:49), com.mysema.scalagen.Converter$$anonfun$2.apply(Converter.scala:74), com.mysema.scalagen.Converter$$anonfun$2.apply(Converter.scala:74), scala.collection.LinearSeqOptimized$class.foldLeft(LinearSeqOptimized.scala:111), scala.collection.immutable.List.foldLeft(List.scala:45), com.mysema.scalagen.Converter.toScala(Converter.scala:74), com.mysema.scalagen.Converter.convertFile(Converter.scala:66), com.mysema.scalagen.Converter$$anonfun$convert$2.apply(Converter.scala:61), com.mysema.scalagen.Converter$$anonfun$convert$2.apply(Converter.scala:61), scala.collection.parallel.mutable.ParArray$ParArrayIterator.foreach_quick(ParArray.scala:143), scala.collection.parallel.mutable.ParArray$ParArrayIterator.foreach(ParArray.scala:136), scala.collection.parallel.ParIterableLike$Foreach.leaf(ParIterableLike.scala:896), scala.collection.parallel.Tasks$Task$$anonfun$tryLeaf$1.apply$mcV$sp(Tasks.scala:66), scala.collection.parallel.Tasks$Task$class.tryLeaf(Tasks.scala:68), scala.collection.parallel.ParIterableLike$Foreach.tryLeaf(ParIterableLike.scala:894), scala.collection.parallel.AdaptiveWorkStealingTasks$TaskImpl$class.internal(Tasks.scala:179), scala.collection.parallel.AdaptiveWorkStealingThreadPoolTasks$TaskImpl.internal(Tasks.scala:521), scala.collection.parallel.AdaptiveWorkStealingTasks$TaskImpl$class.compute(Tasks.scala:164), scala.collection.parallel.AdaptiveWorkStealingThreadPoolTasks$TaskImpl.compute(Tasks.scala:521), scala.collection.parallel.ThreadPoolTasks$TaskImpl$class.run(Tasks.scala:273), scala.collection.parallel.AdaptiveWorkStealingThreadPoolTasks$TaskImpl.run(Tasks.scala:521), java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source), java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source), java.util.concurrent.FutureTask.run(Unknown Source), java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source), java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source), java.lang.Thread.run(Unknown Source))), (java.lang.ClassCastException: japa.parser.ast.stmt.ForeachStmt cannot be cast to japa.parser.ast.stmt.BlockStmt,List(com.mysema.scalagen.ControlStatements.visit(ControlStatements.scala:91), com.mysema.scalagen.ControlStatements.visit(ControlStatements.scala:25), japa.parser.ast.stmt.ForeachStmt.accept(ForeachStmt.java:58), com.mysema.scalagen.ModifierVisitor.filter(ModifierVisitor.scala:41), com.mysema.scalagen.ModifierVisitor.visit(ModifierVisitor.scala:117), com.mysema.scalagen.ControlStatements.visit(ControlStatements.scala:104), com.mysema.scalagen.ControlStatements.visit(ControlStatements.scala:25), japa.parser.ast.stmt.BlockStmt.accept(BlockStmt.java:50), com.mysema.scalagen.ModifierVisitor.filter(ModifierVisitor.scala:28), com.mysema.scalagen.ModifierVisitor.visit(ModifierVisitor.scala:338), com.mysema.scalagen.ModifierVisitor.visit(ModifierVisitor.scala:25), japa.parser.ast.body.MethodDeclaration.accept(MethodDeclaration.java:97), com.mysema.scalagen.ModifierVisitor.filter(ModifierVisitor.scala:41), com.mysema.scalagen.ModifierVisitor.visit(ModifierVisitor.scala:142), com.mysema.scalagen.ModifierVisitor.visit(ModifierVisitor.scala:25), japa.parser.ast.body.ClassOrInterfaceDeclaration.accept(ClassOrInterfaceDeclaration.java:71), com.mysema.scalagen.ModifierVisitor.filter(ModifierVisitor.scala:41), com.mysema.scalagen.UnitTransformer$UnitTransformerBase.visit(UnitTransformer.scala:54), com.mysema.scalagen.UnitTransformer$UnitTransformerBase.visit(UnitTransformer.scala:47), japa.parser.ast.CompilationUnit.accept(CompilationUnit.java:87), com.mysema.scalagen.ControlStatements.transform(ControlStatements.scala:49), com.mysema.scalagen.Converter$$anonfun$2.apply(Converter.scala:74), com.mysema.scalagen.Converter$$anonfun$2.apply(Converter.scala:74), scala.collection.LinearSeqOptimized$class.foldLeft(LinearSeqOptimized.scala:111), scala.collection.immutable.List.foldLeft(List.scala:45), com.mysema.scalagen.Converter.toScala(Converter.scala:74), com.mysema.scalagen.Converter.convertFile(Converter.scala:66), com.mysema.scalagen.Converter$$anonfun$convert$2.apply(Converter.scala:61), com.mysema.scalagen.Converter$$anonfun$convert$2.apply(Converter.scala:61), scala.collection.parallel.mutable.ParArray$ParArrayIterator.foreach_quick(ParArray.scala:143), scala.collection.parallel.mutable.ParArray$ParArrayIterator.foreach(ParArray.scala:136), scala.collection.parallel.ParIterableLike$Foreach.leaf(ParIterableLike.scala:896), scala.collection.parallel.Tasks$Task$$anonfun$tryLeaf$1.apply$mcV$sp(Tasks.scala:66), scala.collection.parallel.Tasks$Task$class.tryLeaf(Tasks.scala:68), scala.collection.parallel.ParIterableLike$Foreach.tryLeaf(ParIterableLike.scala:894), scala.collection.parallel.AdaptiveWorkStealingTasks$TaskImpl$class.internal(Tasks.scala:179), scala.collection.parallel.AdaptiveWorkStealingThreadPoolTasks$TaskImpl.internal(Tasks.scala:521), scala.collection.parallel.AdaptiveWorkStealingTasks$TaskImpl$class.compute(Tasks.scala:164), scala.collection.parallel.AdaptiveWorkStealingThreadPoolTasks$TaskImpl.compute(Tasks.scala:521), scala.collection.parallel.ThreadPoolTasks$TaskImpl$class.run(Tasks.scala:273), scala.collection.parallel.AdaptiveWorkStealingThreadPoolTasks$TaskImpl.run(Tasks.scala:521), java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source), java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source), java.util.concurrent.FutureTask.run(Unknown Source), java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source), java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source), java.lang.Thread.run(Unknown Source))), (java.lang.ClassCastException: japa.parser.ast.stmt.IfStmt cannot be cast to japa.parser.ast.stmt.BlockStmt,List(com.mysema.scalagen.ControlStatements.visit(ControlStatements.scala:91), com.mysema.scalagen.ControlStatements.visit(ControlStatements.scala:25), japa.parser.ast.stmt.ForeachStmt.accept(ForeachStmt.java:58), com.mysema.scalagen.ModifierVisitor.filter(ModifierVisitor.scala:41), com.mysema.scalagen.ModifierVisitor.visit(ModifierVisitor.scala:117), com.mysema.scalagen.ControlStatements.visit(ControlStatements.scala:104), com.mysema.scalagen.ControlStatements.visit(ControlStatements.scala:25), japa.parser.ast.stmt.BlockStmt.accept(BlockStmt.java:50), com.mysema.scalagen.ModifierVisitor.filter(ModifierVisitor.scala:28), com.mysema.scalagen.ModifierVisitor.visit(ModifierVisitor.scala:281), com.mysema.scalagen.ControlStatements.visit(ControlStatements.scala:134), com.mysema.scalagen.ControlStatements.visit(ControlStatements.scala:25), japa.parser.ast.stmt.IfStmt.accept(IfStmt.java:57), com.mysema.scalagen.ModifierVisitor.filter(ModifierVisitor.scala:28), com.mysema.scalagen.ModifierVisitor.visit(ModifierVisitor.scala:281), com.mysema.scalagen.ControlStatements.visit(ControlStatements.scala:134), com.mysema.scalagen.ControlStatements.visit(ControlStatements.scala:25), japa.parser.ast.stmt.IfStmt.accept(IfStmt.java:57), com.mysema.scalagen.ModifierVisitor.filter(ModifierVisitor.scala:41), com.mysema.scalagen.ModifierVisitor.visit(ModifierVisitor.scala:117), com.mysema.scalagen.ControlStatements.visit(ControlStatements.scala:104), com.mysema.scalagen.ControlStatements.visit(ControlStatements.scala:25), japa.parser.ast.stmt.BlockStmt.accept(BlockStmt.java:50), com.mysema.scalagen.ModifierVisitor.filter(ModifierVisitor.scala:28), com.mysema.scalagen.ModifierVisitor.visit(ModifierVisitor.scala:338), com.mysema.scalagen.ModifierVisitor.visit(ModifierVisitor.scala:25), japa.parser.ast.body.MethodDeclaration.accept(MethodDeclaration.java:97), com.mysema.scalagen.ModifierVisitor.filter(ModifierVisitor.scala:41), com.mysema.scalagen.ModifierVisitor.visit(ModifierVisitor.scala:142), com.mysema.scalagen.ModifierVisitor.visit(ModifierVisitor.scala:25), japa.parser.ast.body.ClassOrInterfaceDeclaration.accept(ClassOrInterfaceDeclaration.java:71), com.mysema.scalagen.ModifierVisitor.filter(ModifierVisitor.scala:41), com.mysema.scalagen.UnitTransformer$UnitTransformerBase.visit(UnitTransformer.scala:54), com.mysema.scalagen.UnitTransformer$UnitTransformerBase.visit(UnitTransformer.scala:47), japa.parser.ast.CompilationUnit.accept(CompilationUnit.java:87), com.mysema.scalagen.ControlStatements.transform(ControlStatements.scala:49), com.mysema.scalagen.Converter$$anonfun$2.apply(Converter.scala:74), com.mysema.scalagen.Converter$$anonfun$2.apply(Converter.scala:74), scala.collection.LinearSeqOptimized$class.foldLeft(LinearSeqOptimized.scala:111), scala.collection.immutable.List.foldLeft(List.scala:45), com.mysema.scalagen.Converter.toScala(Converter.scala:74), com.mysema.scalagen.Converter.convertFile(Converter.scala:66), com.mysema.scalagen.Converter$$anonfun$convert$2.apply(Converter.scala:61), com.mysema.scalagen.Converter$$anonfun$convert$2.apply(Converter.scala:61), scala.collection.parallel.mutable.ParArray$ParArrayIterator.foreach_quick(ParArray.scala:143), scala.collection.parallel.mutable.ParArray$ParArrayIterator.foreach(ParArray.scala:136), scala.collection.parallel.ParIterableLike$Foreach.leaf(ParIterableLike.scala:896), scala.collection.parallel.Tasks$Task$$anonfun$tryLeaf$1.apply$mcV$sp(Tasks.scala:66), scala.collection.parallel.Tasks$Task$class.tryLeaf(Tasks.scala:68), scala.collection.parallel.ParIterableLike$Foreach.tryLeaf(ParIterableLike.scala:894), scala.collection.parallel.AdaptiveWorkStealingTasks$TaskImpl$class.internal(Tasks.scala:179), scala.collection.parallel.AdaptiveWorkStealingThreadPoolTasks$TaskImpl.internal(Tasks.scala:521), scala.collection.parallel.AdaptiveWorkStealingTasks$TaskImpl$class.compute(Tasks.scala:164), scala.collection.parallel.AdaptiveWorkStealingThreadPoolTasks$TaskImpl.compute(Tasks.scala:521), scala.collection.parallel.ThreadPoolTasks$TaskImpl$class.run(Tasks.scala:273), scala.collection.parallel.AdaptiveWorkStealingThreadPoolTasks$TaskImpl.run(Tasks.scala:521), java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source), java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source), java.util.concurrent.FutureTask.run(Unknown Source), java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source), java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source), java.lang.Thread.run(Unknown Source)))
at scala.collection.parallel.package$$anon$3.alongWith(package.scala:114)
at scala.collection.parallel.Tasks$Task$class.mergeThrowables(Tasks.scala:98)
at scala.collection.parallel.ParIterableLike$Foreach.mergeThrowables(ParIterableLike.scala:894)
at scala.collection.parallel.Tasks$Task$class.tryMerge(Tasks.scala:84)
at scala.collection.parallel.ParIterableLike$Foreach.tryMerge(ParIterableLike.scala:894)
at scala.collection.parallel.AdaptiveWorkStealingTasks$TaskImpl$class.internal(Tasks.scala:186)
at scala.collection.parallel.AdaptiveWorkStealingThreadPoolTasks$TaskImpl.internal(Tasks.scala:521)
at scala.collection.parallel.AdaptiveWorkStealingTasks$TaskImpl$class.compute(Tasks.scala:164)
at scala.collection.parallel.AdaptiveWorkStealingThreadPoolTasks$TaskImpl.compute(Tasks.scala:521)
at scala.collection.parallel.ThreadPoolTasks$TaskImpl$class.run(Tasks.scala:273)
at scala.collection.parallel.AdaptiveWorkStealingThreadPoolTasks$TaskImpl.run(Tasks.scala:521)
at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)
at java.util.concurrent.FutureTask.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)

Fix boolean Bean property handling

private var male: Boolean = _

def isMale(): Boolean = male

def setMale(male: Boolean) {
  this.male = male
}

should be

@BeanProperty 
var male: Boolean = _

maven-plugin: make targetFolder accessible via cmdline (add expression)

Motivation:

Currently, one has to add the plugin to the pom.xml to use the maven-scalagen-plugin. As converting code from an existing maven project is usually an one-time-task, it makes much sense to use the plugin without any need to edit the pom.xml.

To do this use the following commandline:

$ mvn com.mysema.scalagen:scalagen-maven-plugin:0.1.2:main

Unfortunatelly, you can not configure the targetFolder that way, which is especially inconvenient when you already have some scala code in your project.

Solution:

Add the "expression"-tag to the JavaDoc of the targetFolder field:

    /**
     * @parameter default-value="src/test/scala" expression="${targetFolder}"
     */
    private String targetFolder;

Now you can run maven like this, to generate the converted code into another directory (here target/generated-for-review):

$ mvn com.mysema.scalagen:scalagen-maven-plugin:0.1.2:main -DtargetFolder=target/generated-for-review

Same applys for the test goal.

Many thanks for scalagen and the Maven plugin!

Tobias Roeser

bad _ value in case of assignment by an if block

The Java source (line 439 ) :

    boolean success;
    ArrayList<Term> list = t1.cloneComponents();
    if (t1.getClass() == t2.getClass()) {
        success = list.addAll(((CompoundTerm) t2).getComponents());
    } else {
        success = list.add(t2);
    }

https://open-nars.googlecode.com/svn/trunk/nars/language/CompoundTerm.java

The generated Scala :

    var success: Boolean = _
    val list = t1.cloneComponents()
    success = if (t1.getClass == t2.getClass) list.addAll(t2.asInstanceOf[CompoundTerm].getComponents) else list.add(t2)

COMMENT: moving up the val list declaration would be ideal solution, but maybe hard to implement ; maybe instead initialization to a neutral value like false for a Boolean and "" for a String will do . But NOTE : maybe this is intentional, because fixing like this would not be safe .

generated Scala, hand edited :
https://open-nars.googlecode.com/svn/trunk/nars_core/src/main/scala/nars/language/CompoundTerm.scala

Methods that re-assign parameters don't compile

The code:

class A {
  public static void main(String[] args) {
    args = new String[] {"some", "test", "args"};
  }
}

gets converted to:

object A {
  def main(args: Array[String]) {
    args = Array("some", "test", "args")
  }
}

which doesn't compile, since method parameters are always final.

I'm not sure what the best way to fix this is. Maybe detecting re-assignment of a method parameter, changing the name in the method declaration, and creating a var with the original name (assigning the initial value to it).

Improve for/if handling

  for (p <- paths) {
    if (p.contains(".svn")) {
      //continue
    } else if (suffix == null || p.endsWith(suffix)) {
      additions.add(new Resource(p, false, false))
    }
  }

should be translated as

  for (p <- paths if !p.contains(".svn") && (suffix == null || p.endsWith(suffix))) {
    additions.add(new Resource(p, false, false))
  }

if/else transformations

Transform following

if (packageName.length() > 0) {
  this.localName = fullName.substring(packageName.length() + 1)
} else {
  this.localName = fullName
}

into

this.localName =  if (packageName.length() > 0) fullName.substring(packageName.length() + 1)
    else fullName

static methods having array as arguments

The Java main method is translated by :

def main(args: String) {

when it should be :

def main(args: Array[String]) {

It may be the same with any static methods having array as arguments.

bad constructor for base class

This Java :

class Base {
  Base(){} // unused
  Base(String s){} // used
}
class Derived extends Base {
  Derived(String s){ super(s); }
}

gives this :

class Base() {
  def this(s: String) {
  }
}
class Derived(s: String) extends Base(s)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.