/* * Copyright (c) 2012 Sam Harwell, Tunnel Vision Laboratories LLC * All rights reserved. * * The source code of this document is proprietary work, and is not licensed for * distribution. For information about licensing, contact Sam Harwell at: * sam@tunnelvisionlabs.com */ package org.tvl.goworks.editor.go.codemodel.impl; import java.util.Collection; import java.util.HashSet; import java.util.Set; import org.netbeans.api.editor.mimelookup.MimeRegistration; import org.netbeans.api.project.Project; import org.tvl.goworks.editor.GoEditorKit; import org.tvl.goworks.project.GoProject; import org.tvl.goworks.project.ProjectBinaryResolver; /** * * @author Sam Harwell */ @MimeRegistration(service = ProjectBinaryResolver.class, mimeType = GoEditorKit.GO_MIME_TYPE) public class GoProjectBinaryResolver implements ProjectBinaryResolver { @Override public String[] findProjectBinaries(Project project) { if (!(project instanceof GoProject)) { return null; } CodeModelProjectCache cache = CodeModelCacheImpl.getInstance().getProjectCache((GoProject)project, false); if (cache == null) { return new String[0]; } // looking for "main" package containing "func main()" Set<String> binaries = new HashSet<>(); for (PackageModelImpl packageModel : cache.getPackages()) { Collection<FunctionModelImpl> functions = packageModel.getFunctions("main"); if (functions.isEmpty()) { continue; } for (FunctionModelImpl functionModel : functions) { if (functionModel.isMethod()) { continue; } if (!functionModel.getParameters().isEmpty() || !functionModel.getReturnValues().isEmpty()) { continue; } boolean mainPackage = "main".equals(packageModel.getName()); if (!mainPackage) { FileModelImpl fileModel = functionModel.getFile(); if (fileModel == null) { continue; } Collection<PackageDeclarationModelImpl> packageDeclarations = fileModel.getPackageDeclarations(); if (packageDeclarations.isEmpty()) { continue; } mainPackage = true; for (PackageDeclarationModelImpl packageDeclaration : packageDeclarations) { mainPackage &= "main".equals(packageDeclaration.getName()); } } if (mainPackage) { binaries.add(packageModel.getName()); } } } return binaries.toArray(new String[binaries.size()]); } }