Fan

 

class

compilerJava::JavaPod

sys::Obj
  compilerJava::JavaPod : compiler::CPod
//
// Copyright (c) 2008, Brian Frank and Andy Frank
// Licensed under the Academic Free License version 3.0
//
// History:
//   17 Nov 08  Brian Frank  Creation
//

using compiler

**
** JavaPod is the CPod wrapper for a Java package.
**
class JavaPod : CPod
{

  new make(JavaBridge bridge, Str package, Str[]? classes)
  {
    this.bridge = bridge
    this.name = "[java]" + package
    this.packageName = package
    if (classes != null)
      this.types = classes.map |Str n->JavaType| { JavaType(this, n) }
    isInterop = (package == "fanx.interop")
  }

  override CNamespace ns() { return bridge.ns }

  override readonly Str name

  readonly Str packageName

  override Version version() { return Version("0") }

  override JavaBridge? bridge

  override Bool isForeign() { return true }

  override CType[] types

  override JavaType? resolveType(Str typeName, Bool checked)
  {
    if (typeName[0] == '[')
      return resolveType(typeName[1..-1], checked)?.toArrayOf

    x := types.find |JavaType t->Bool| { return t.name == typeName }
    if (x != null) return x
    if (checked) throw UnknownTypeErr(name + "::" + typeName)
    return null
  }

  override CSymbol? resolveSymbol(Str symbolName, Bool checked)
  {
    if (checked) throw UnknownSymbolErr(name + "::" + symbolName)
    return null
  }

  ** Is this the fanx.interop package?
  const Bool isInterop

}