ajwang / groovypptest

Automatically exported from code.google.com/p/groovypptest
0 stars 0 forks source link

BUG! ClassNode#getTypeClass for FListMap is called before the type class is set #371

Closed GoogleCodeExporter closed 8 years ago

GoogleCodeExporter commented 8 years ago
Exception:

BUG! ClassNode#getTypeClass for FListMap is called before the type class is set 
    at org.codehaus.groovy.ast.ClassNode.getTypeClass(ClassNode.java:1311)
    at org.mbte.groovypp.compiler.ClassNodeCache.getClassNodeInfo(ClassNodeCache.java:181)
    at org.mbte.groovypp.compiler.ClassNodeCache.getMethods(ClassNodeCache.java:238)
    at org.mbte.groovypp.compiler.CompilerTransformer.findMethod(CompilerTransformer.java:255)
    at org.mbte.groovypp.compiler.transformers.MethodCallExpressionTransformer.findMethodVariatingArgs(MethodCallExpressionTransformer.java:610)
    at org.mbte.groovypp.compiler.transformers.MethodCallExpressionTransformer.findMethodWithClosureCoercion(MethodCallExpressionTransformer.java:832)
    at org.mbte.groovypp.compiler.transformers.MethodCallExpressionTransformer.createNormalMethodCall(MethodCallExpressionTransformer.java:113)
    at org.mbte.groovypp.compiler.transformers.MethodCallExpressionTransformer.transform(MethodCallExpressionTransformer.java:92)
    at org.mbte.groovypp.compiler.transformers.MethodCallExpressionTransformer.transform(MethodCallExpressionTransformer.java:36)
    at org.mbte.groovypp.compiler.transformers.ExprTransformer.transformExpression(ExprTransformer.groovy:103)
    at org.mbte.groovypp.compiler.CompilerTransformer.transform(CompilerTransformer.java:114)
    at org.codehaus.groovy.ast.expr.Expression.transformExpressions(Expression.java:49)
    at org.codehaus.groovy.ast.expr.ArgumentListExpression.transformExpression(ArgumentListExpression.java:67)
    at org.codehaus.groovy.ast.ClassCodeExpressionTransformer.transform(ClassCodeExpressionTransformer.java:85)
    at org.mbte.groovypp.compiler.CompilerTransformer.transformImpl(CompilerTransformer.java:212)
    at org.mbte.groovypp.compiler.transformers.ExprTransformer.transformExpression(ExprTransformer.groovy:103)
    at org.mbte.groovypp.compiler.CompilerTransformer.transform(CompilerTransformer.java:114)
    at org.mbte.groovypp.compiler.transformers.MethodCallExpressionTransformer.transform(MethodCallExpressionTransformer.java:74)
    at org.mbte.groovypp.compiler.transformers.MethodCallExpressionTransformer.transform(MethodCallExpressionTransformer.java:36)
    at org.mbte.groovypp.compiler.transformers.ExprTransformer.transformExpression(ExprTransformer.groovy:103)
    at org.mbte.groovypp.compiler.CompilerTransformer.transform(CompilerTransformer.java:114)
    at org.mbte.groovypp.compiler.CompilerTransformer.transformToGround(CompilerTransformer.java:132)
    at org.mbte.groovypp.compiler.StaticCompiler.visitReturnStatement(StaticCompiler.java:733)
    at org.codehaus.groovy.ast.stmt.ReturnStatement.visit(ReturnStatement.java:47)
    at org.mbte.groovypp.compiler.StaticCompiler.visitBlockStatement(StaticCompiler.java:378)
    at org.codehaus.groovy.ast.stmt.BlockStatement.visit(BlockStatement.java:69)
    at org.mbte.groovypp.compiler.StaticCompiler.execute(StaticCompiler.java:1233)
    at org.mbte.groovypp.compiler.StaticMethodBytecode.<init>(StaticMethodBytecode.java:71)
    at org.mbte.groovypp.compiler.StaticMethodBytecode.replaceMethodCode(StaticMethodBytecode.java:95)
    at org.mbte.groovypp.compiler.CompilerTransformer.replaceMethodCode(CompilerTransformer.java:172)
    at org.mbte.groovypp.compiler.ClosureUtil.isMatch(ClosureUtil.java:161)
    at org.mbte.groovypp.compiler.transformers.MethodCallExpressionTransformer.inferTypesForClosure(MethodCallExpressionTransformer.java:797)
    at org.mbte.groovypp.compiler.transformers.MethodCallExpressionTransformer.foundMethodInference(MethodCallExpressionTransformer.java:729)
    at org.mbte.groovypp.compiler.transformers.MethodCallExpressionTransformer.findMethodVariatingArgs(MethodCallExpressionTransformer.java:617)
    at org.mbte.groovypp.compiler.transformers.MethodCallExpressionTransformer.findMethodWithClosureCoercion(MethodCallExpressionTransformer.java:832)
    at org.mbte.groovypp.compiler.transformers.MethodCallExpressionTransformer.createNormalMethodCall(MethodCallExpressionTransformer.java:113)
    at org.mbte.groovypp.compiler.transformers.MethodCallExpressionTransformer.transform(MethodCallExpressionTransformer.java:92)
    at org.mbte.groovypp.compiler.transformers.MethodCallExpressionTransformer.transform(MethodCallExpressionTransformer.java:36)
    at org.mbte.groovypp.compiler.transformers.ExprTransformer.transformExpression(ExprTransformer.groovy:103)
    at org.mbte.groovypp.compiler.CompilerTransformer.transform(CompilerTransformer.java:114)
    at org.codehaus.groovy.ast.ClassCodeExpressionTransformer.visitExpressionStatement(ClassCodeExpressionTransformer.java:139)
    at org.mbte.groovypp.compiler.StaticCompiler.visitExpressionStatement(StaticCompiler.java:408)
    at org.codehaus.groovy.ast.stmt.ExpressionStatement.visit(ExpressionStatement.java:40)
    at org.mbte.groovypp.compiler.StaticCompiler.visitBlockStatement(StaticCompiler.java:378)
    at org.codehaus.groovy.ast.stmt.BlockStatement.visit(BlockStatement.java:69)
    at org.mbte.groovypp.compiler.StaticCompiler.execute(StaticCompiler.java:1233)
    at org.mbte.groovypp.compiler.StaticMethodBytecode.<init>(StaticMethodBytecode.java:71)
    at org.mbte.groovypp.compiler.StaticMethodBytecode.replaceMethodCode(StaticMethodBytecode.java:95)
    at org.mbte.groovypp.compiler.CompileASTTransform.visit(CompileASTTransform.java:121)
    at org.codehaus.groovy.transform.ASTTransformationVisitor.visitClass(ASTTransformationVisitor.java:129)
    at org.codehaus.groovy.transform.ASTTransformationVisitor$2.call(ASTTransformationVisitor.java:172)
    at org.codehaus.groovy.control.CompilationUnit.applyToPrimaryClassNodes(CompilationUnit.java:957)
    at org.codehaus.groovy.control.CompilationUnit.doPhaseOperation(CompilationUnit.java:542)
    at org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:520)
    at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:497)
    at org.jetbrains.groovy.compiler.rt.GroovyCompilerWrapper.compile(GroovyCompilerWrapper.java:43)
    at org.jetbrains.groovy.compiler.rt.GroovycRunner.main(GroovycRunner.java:128)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at com.intellij.rt.execution.CommandLineWrapper.main(CommandLineWrapper.java:75)

Code:

final class FListMap<K,V> implements Iterable<Map.Entry<K,V>> {
  private static final FListMap empty = new FListMap(FList.emptyList)
  private final FList<MyEntry<K, V>> list

  static <K, V> FListMap<K, V> getEmptyMap() {
    empty
  }

  private FListMap(FList<MyEntry<K, V>> list) {
    this.list = list
  }

  FListMap<K, V> put(K key, V value) {
    def existing = get(key)
    if (existing == value) return this
    return [remove(key).list + new MyEntry(key, value)]
  }

  FListMap<K, V> remove(K key) {
    MyEntry<K,V> existing = list.find { it.key == key }
    if (existing) {
      return [list.remove(existing)]
    }
    return this
  }

  FListMap<K, V> plus(Map<K, V> map) {
    groovy.lang.Reference<FListMap<K, V>> ref = new Reference<FListMap<K,V>>(this)
    map.each { k, v -> ref.set(ref.get().put(k, v)) }
    return ref.get()
  }

  V get(K key) {
    MyEntry<K, V> existing = list.find { it.key == key }
    return existing?.value
  }

  V getAt(K key) {
    return get(key)
  }

  V getUnresolvedProperty(K key) {
    return get(key)
  }

  Iterator<? extends Entry<K, V>> iterator() {
    return list.iterator()
  }

  private static class MyEntry<K, V> implements Map.Entry<K, V> {
    final K key
    final V value

    MyEntry(K key, V value) {
      this.key = key
      this.value = value
    }

    V setValue(V v) {
      throw new UnsupportedOperationException("setValue is not implemented")
    }
  }

}

Original issue reported on code.google.com by gromop...@gmail.com on 4 May 2011 at 8:17

GoogleCodeExporter commented 8 years ago

Original comment by alex.tka...@gmail.com on 4 May 2011 at 8:30

GoogleCodeExporter commented 8 years ago

Original comment by alex.tka...@gmail.com on 5 May 2011 at 1:50

GoogleCodeExporter commented 8 years ago

Original comment by alex.tka...@gmail.com on 5 May 2011 at 1:53

GoogleCodeExporter commented 8 years ago
Still happens in 0.4.231

Original comment by gromop...@gmail.com on 6 May 2011 at 7:25