static String makeExtensionClassName( String extendedClassname ) { String simpleName = ManClassUtil.getShortClassName( extendedClassname ); return FAVS_EXTENSIONS + extendedClassname + ".My" + simpleName + "Ext"; }
private SrcClass fullName( String fqn ) { _package = ManClassUtil.getPackage( fqn ); return name( ManClassUtil.getShortClassName( fqn ) ); }
public static Set<Class> getAllInterfaces( Class c ) { return getAllInterfacesImpl( c, new HashSet<Class>() ); }
@Override public String getPackage( String fqn ) { String topLevel = findTopLevelFqn( fqn ); return ManClassUtil.getPackage( topLevel ); }
private boolean isValidPackage( IDirectory subdir ) { // Exclude directories that are not actual packages such as META-INF that exist in jar files //## todo: also consider excluding a user-defined list of directories e.g., the ../config directories for XCenter return ManClassUtil.isJavaIdentifier( subdir.getName() ); }
public static String getFileExtension( File file ) { String name = file.getName(); return getFileExtension( name ); }
@Override public Collection<TypeName> getTypeNames( String namespace ) { return getAllTypeNames().stream() .filter( fqn -> ManClassUtil.getPackage( fqn ).equals( namespace ) ) .map( fqn -> new TypeName( fqn, _module, TypeName.Kind.TYPE, TypeName.Visibility.PUBLIC ) ) .collect( Collectors.toSet() ); }
private String extractPackageName( String file ) { try { String source = StreamUtil.getContent( new FileReader( file ) ); int iPkg = source.indexOf( "package" ); if( iPkg >= 0 ) { int iEol = source.indexOf( '\n', iPkg ); if( iEol > iPkg ) { String pkg = source.substring( iPkg + "package".length(), iEol ).trim(); for( StringTokenizer tokenizer = new StringTokenizer( pkg, "." ); tokenizer.hasMoreTokens(); ) { String part = tokenizer.nextToken(); if( !ManClassUtil.isJavaIdentifier( part ) ) { return null; } } return pkg; } } return null; } catch( IOException e ) { throw new RuntimeException( e ); } }
static String makeExtensionClassName( String extendedClassname ) { String simpleName = ManClassUtil.getShortClassName( extendedClassname ); return FAVS_EXTENSIONS + extendedClassname + ".My" + simpleName + "Ext"; }
FileGenerator( String fqn, URI fileUri, String fileName, String source ) { String className = ManClassUtil.getShortClassName( fqn ); String packageName = ManClassUtil.getPackage( fqn ); Tokenizer tokenizer = new Tokenizer(); _tokens = tokenizer.tokenize( source ); List<Directive> dirList = getDirectivesList( _tokens ); _dirMap = getDirectivesMap( dirList ); _currClass = new ClassInfo( dirList.iterator(), fqn, className, fileUri, fileName, _tokens.size() - 1 ); if( fileUri == null ) { // for tests to avoid files _currClass.testSource = source; } buildFile( packageName, dirList ); }
@Override protected String contribute( JavaFileManager.Location location, String topLevelFqn, String existing, T model, DiagnosticListener<JavaFileObject> errorHandler ) { StringBuilder sb = new StringBuilder(); sb.append( "package " ).append( ManClassUtil.getPackage( topLevelFqn ) ).append( ";\n\n" ) .append( "import " ).append( Json.class.getName() ).append( ";\n" ) .append( "import " ).append( Bindings.class.getName() ).append( ";\n" ) .append( "import " ).append( DataBindings.class.getName() ).append( ";\n" ) .append( "import " ).append( IJsonBindingsBacked.class.getName() ).append( ";\n" ) .append( "import " ).append( Structural.class.getName() ).append( ";\n" ) .append( "import " ).append( RuntimeMethods.class.getName() ).append( ";\n\n" ); model.report( errorHandler ); model.getType().render( sb, 0, true ); return sb.toString(); } }
private static Set<Class> getAllInterfacesImpl( Class c, HashSet<Class> hashSet ) { if( c == null || hashSet.contains( c ) ) { return hashSet; } else { if( c.isInterface() ) { hashSet.add( c ); } getAllInterfacesImpl( c.getSuperclass(), hashSet ); for( Class iface : c.getInterfaces() ) { getAllInterfacesImpl( iface, hashSet ); } } return hashSet; }
/** * <p>Gets the class name minus the package name from a <code>Class</code>.</p> * * @param cls the class to get the short name for. * * @return the class name without the package name or an empty string */ public static String getShortClassName( Class cls ) { if( cls == null ) { return ""; } return getShortClassName( cls.getName() ); }
FileGenerator( String fqn, URI fileUri, String fileName, String source ) { String className = ManClassUtil.getShortClassName( fqn ); String packageName = ManClassUtil.getPackage( fqn ); Tokenizer tokenizer = new Tokenizer(); _tokens = tokenizer.tokenize( source ); List<Directive> dirList = getDirectivesList( _tokens ); _dirMap = getDirectivesMap( dirList ); _currClass = new ClassInfo( dirList.iterator(), fqn, className, fileUri, fileName, _tokens.size() - 1 ); if( fileUri == null ) { // for tests to avoid files _currClass.testSource = source; } buildFile( packageName, dirList ); }
private String getTemplateFilePath() { String className = ManClassUtil.getShortClassName( _currClass.fqn ); String uri = _currClass.fileUri.toString(); int nameIndex = uri.lastIndexOf( className ); String fileExt = uri.substring( nameIndex + className.length() ); return '/' + _currClass.fqn.replace( '.', '/' ) + fileExt; }
private String getTemplateFilePath() { String className = ManClassUtil.getShortClassName( _currClass.fqn ); String uri = _currClass.fileUri.toString(); int nameIndex = uri.lastIndexOf( className ); String fileExt = uri.substring( nameIndex + className.length() ); return '/' + _currClass.fqn.replace( '.', '/' ) + fileExt; }
private SrcAnnotationExpression makeSourcePositionAnnotation( Token token ) { int i = getFileIndex( token ); return new SrcAnnotationExpression( SourcePosition.class.getName() ) .addArgument( new SrcArgument( new SrcMemberAccessExpression( ManClassUtil.getShortClassName( _extensionFqn ), FIELD_FILE_URL + i ) ).name( "url" ) ) .addArgument( "feature", String.class, token._value.toString() ) .addArgument( "kind", String.class, "favorite" ) .addArgument( "offset", int.class, token._pos ) .addArgument( "length", int.class, token._value.length() ); }
private SrcAnnotationExpression makeSourcePositionAnnotation( Token token ) { int i = getFileIndex( token ); return new SrcAnnotationExpression( SourcePosition.class.getName() ) .addArgument( new SrcArgument( new SrcMemberAccessExpression( ManClassUtil.getShortClassName( _extensionFqn ), FIELD_FILE_URL + i ) ).name( "url" ) ) .addArgument( "feature", String.class, token._value.toString() ) .addArgument( "kind", String.class, "favorite" ) .addArgument( "offset", int.class, token._pos ) .addArgument( "length", int.class, token._value.length() ); }
if( names.contains( ManClassUtil.getShortClassName( tn.name ) ) )
private Pair<Symbol.ClassSymbol, JCTree.JCCompilationUnit> getClassSymbolForProducedClass( String fqn, BasicJavacTask[] task ) { StringWriter errors = new StringWriter(); // need javac with ManifoldJavaFileManager because the produced class must come from manifold task[0] = getJavacTask_ManFileMgr(); Symbol.ClassSymbol e = IDynamicJdk.instance().getTypeElement( task[0].getContext(), null, fqn ); if( e != null && e.getSimpleName().contentEquals( ManClassUtil.getShortClassName( fqn ) ) ) { JavacTrees trees = JavacTrees.instance( task[0].getContext() ); TreePath path = trees.getPath( e ); if( path != null ) { return new Pair<>( e, (JCTree.JCCompilationUnit)path.getCompilationUnit() ); } else { // TreePath is only applicable to a source file; // if fqn is not a source file, there is no compilation unit available return new Pair<>( e, null ); } } StringBuffer errorText = errors.getBuffer(); if( errorText.length() > 0 ) { throw new RuntimeException( "Compile errors:\n" + errorText ); } return null; }